-
Notifications
You must be signed in to change notification settings - Fork 21
Dialetos
Delégua possui um dialeto próprio, um pouco diferente de Égua, e implementa mais um dialeto que era parte de Égua, mas foi removido: EguaP. Por isso, temos suporte a vários dialetos.
Ao executar o pacote sem parâmetros, o dialeto padrão é iniciado:
delegua
delegua ./meu-arquivo.egua
Podemos especificar um dialeto na inicialização. Por exemplo:
delegua --dialeto egua
Especifica o dialeto original de Égua (também chamado de Égua Clássico). Podemos também especificar o uso de dialetos ao executar um arquivo.
delegua --dialeto egua ./meu-arquivo.egua
Para EguaP:
delegua --dialeto eguap
A extensão do arquivo também define automaticamente o dialeto:
delegua ./meu-arquivo.eguap
Delégua foi estruturada para ter seus componentes trabalhando de maneira independente. Isso possibilita a desenvolvedores não apenas desenvolver seus próprios dialetos, como também reusar estruturas que não requerem uma implementação própria para o dialeto. Por exemplo, o dialeto EguaP utiliza o mesmo interpretador do dialeto padrão de Delégua.
Esse dialeto segue a implementação da linguagem original, Égua, quanto ao comportamento de interpretação e, parcialmente, de lexação e análise sintática. Sua especificação pode ser lida aqui e sua implementação, aqui.
Mais do que isso, abaixo definimos, grosso modo, as principais diferenças entre este dialeto e Delégua:
- Em Égua, ponto-e-vírgula é obrigatório ao final de cada expressão. Em Delégua, o ponto-e-vírgula é opcional;
- Em Égua, a partir da sua versão 1.3.1, expressões e declarações devem ser obrigatoriamente acentuadas. Por exemplo, Égua não aceita
funcao
ousenao
. Precisa ser, respectivamente,função
esenão
. Delégua suporta as duas formas; - Operadores
+=
(adição + atribuição),-=
(subtração + atribuição),*=
(multiplicação + atribuição) e/=
(divisão + atribuição) não são suportados em Égua: apenas em Delégua e EguaP; - Égua não suporta comentários multilinha, ou seja, começados por
/*
e finalizados por*/
. Apenas comentários de uma linha só são suportados. Delégua suporta comentários tanto de uma linha, começados por//
, quanto multilinhas; - Em Égua, a interrupção de um laço de repetição é feita pela palavra reservada
pausa
que, no entendimento dos desenvolvedores de Delégua, não passa a ideia correta do que o comando faz. "Pausa" em português possui como definição em dicionários da língua portuguesa: "1. Breve interrupção; 2. Descanso, intervalo; 3. Tardança, lentidão, vagar.". Delégua aceitapausa
por questões de retrocompatibilidade, mas a palavra reservada oficial em Delégua ésustar
, que possui como definição: "verbo transitivo, intransitivo e pronominal: Fazer parar ou parar"; - Em Égua,
escreva()
aceita apenas um argumento. Em Delégua e EguaP,escreva()
aceita N argumentos.
Arquiteturalmente falando, as diferenças entre Égua Clássico e outros dialetos são:
- Égua Clássico não possui um importador. Com isso, o procedimento de importação de outros arquivos fonte pós arquivo principal fica a cargo do interpretador de Égua Clássico + uma instância em separado da linguagem, o que consome mais recursos de máquina (ciclos de processamento, memória, etc.). O resultado da execução do procedimento de importação pelo interpretador, quando feito com sucesso, tem como sequência o interpretador chamador importando todas as declarações dessa instância em separado. O procedimento se repete para cada arquivo importado;
- Em Delégua e EguaP, como todo arquivo aberto na execução da linguagem passa pelo importador, o interpretador não precisa instanciar o núcleo da linguagem inteira para cada arquivo importado: apenas um interpretador é utilizado para toda a execução;
- Em Égua Clássico, o resolvedor faz parte da instância da linguagem, e não do interpretador. O interpretador conhece a instância do resolvedor, e a chama antes de iniciar o processo de interpretação.
- Em Delégua e EguaP, o resolvedor vive apenas dentro do interpretador, já que a etapa de resolução de variáveis é entendida também como parte da interpretação.
Originalmente um dialeto de Égua, mas aparentemente abandonado pelo projeto original e reimplementado em Delégua, EguaP é um dialeto que tenta juntar qualidades das linguagens Égua e Python.
Python, assim como Égua, é uma linguagem de tipagem dinâmica (Duck Typing), orientada a objetos e de propósito geral. Uma das características é o que chamamos de indentação significativa: a indentação não apenas deixa o código mais elegante e estruturado, como é algo que a linguagem força por design para funcionar corretamente. O resultado é uma melhor legibilidade e organização do código.
As diferenças fundamentais entre Delégua e EguaP são:
- Abertura de escopo: em Delégua, usa-se chaves para abertura e fechamento de escopo. Em EguaP, a abertura de escopo é feita pelo sinal de dois-pontos, e não possui um símbolo de fechamento de escopo: o escopo é finalizado quando a indentação muda. Por exemplo:
var a = 1
se (a > 0):
escreva('variável `a` é maior que zero. Incrementando...')
a = 10
escreva(a)
Em Delégua, o mesmo código pode ser escrito da seguinte forma:
var a = 1
se (a > 0) {
escreva('variável `a` é maior que zero. Incrementando...')
a = 10
}
escreva(a)