Skip to content

Dialetos

Leonel Sanches da Silva edited this page Feb 17, 2024 · 27 revisions

Delégua possui um dialeto próprio e implementa outros dialetos de linguagens também baseadas em português, como Égua, Pituguês, VisuAlg, Portugol Studio, Mapler e Potigol.

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 Pituguês:

delegua --dialeto pitugues

A extensão do arquivo também define automaticamente o dialeto:

delegua ./meu-arquivo.pitugues

A arquitetura de dialetos de Delégua

Delégua foi estruturada para ter seus componentes trabalhando de maneira independente. Isso possibilita aos desenvolvedores não apenas desenvolver seus próprios dialetos, como também reutilizar estruturas que não requerem uma implementação própria para o dialeto. Por exemplo, o dialeto Pituguês utiliza o mesmo interpretador do dialeto-padrão de Delégua.

Égua (ou Égua Clássico)

Esse dialeto segue a implementação da linguagem original da qual foi derivada, Égua, quanto ao comportamento de interpretação e, parcialmente, de lexação e análise sintática. Sua documentação pode ser lida aqui e sua implementação, aqui.

Definimos a seguir, 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 ou senao. Precisa ser, respectivamente, função e senã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 Pituguês;
  • Égua não suporta comentários multilinha, ou seja, começados por /* e finalizados por */. São suportados apenas comentários de uma linha só. 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 aceita pausa 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 Pituguês, escreva() aceita N argumentos;
  • Égua não possui o comando leia(), implementado em Delégua, Pituguês e dialetos de Portugol;
  • Égua não aceita parâmetros na seção pegue de uma declaração tente.
  • Égua não aceita interpolação de variáveis em escreva();
  • Égua não possui inferência de variáveis, portanto não implementa quaisquer métodos de primitivas. Por exemplo, "meu texto".maiusculo() e "MEU TEXTO".minusculo() funcionam em Delégua mas não em Égua;
  • Delégua e Pituguês depreciaram as palavras reservadas senãose e senaose a partir da versão 0.9.12, porque elas não existem em português. A forma de uso nos dois dialetos é senão se e senao se, respectivamente.

Arquiteturalmente falando, as diferenças entre Égua Clássico e outros dialetos são:

  • Égua 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 + 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 repete-se para cada arquivo importado;
  • Em Delégua e Pituguês, 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, o resolvedor faz parte da instância da linguagem, e não do interpretador. O interpretador conhece a instância do resolvedor e chama-a antes de iniciar o processo de interpretação.
  • A implementação do dialeto Égua Clássico em Delégua usa o Resolvedor dentro do interpretador, e não como etapa em separado;
  • Em Delégua, Pituguês e dialetos de Portugol não existe um Resolvedor (removido na versão 0.6.0). O time de desenvolvimento de Delégua optou por implementar uma pilha de execução de escopos, que busca variáveis usando um algoritmo que executa em O(n) no pior caso. Como a pesquisa de variável, mesmo com uma implementação de Resolver, é O(n) também no pior caso, entendemos que o Resolvedor pode ser completamente descartado.

Pituguês

Originalmente um dialeto de Égua chamado EguaP, mas aparentemente abandonado pelo projeto original e reimplementado em Delégua, Pituguês é um dialeto que tenta juntar qualidades das linguagens Delégua e Python.

Python, assim como Delé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 só deixa o código mais elegante e estruturado, como também é 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 Pituguês são:

  • Abertura de escopo: em Delégua, são utilizadas chaves para abertura e fechamento de escopo. Em Pituguês, a abertura de escopo é feita pelo sinal de dois-pontos e não há um símbolo de fechamento de escopo: ele é 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)
  • Componentes de classe: Pituguês pede a palavras reservada função (ou funcao) para declarar funções. Em Delégua basta que o nome do componente que será função tenha os símbolos de abertura e fechamento de parênteses após o nome. Por exemplo, a classe abaixo em Pituguês:
classe Resposta:
    funcao enviar(codigo):
        isto.codigo = codigo
        retorna(isto)

    função status(statusHttp):
        isto.statusHttp = statusHttp
        retorna(isto)

É equivalente à classe em Delégua abaixo:

classe Resposta {
    enviar(codigo) {
        isto.codigo = codigo
        retorna(isto)
    }

    status(statusHttp) {
        isto.statusHttp = statusHttp
        retorna(isto)
    }
}

VisuAlg

Portugol VisuAlg, ou simplesmente VisuAlg, é uma especificação criada pelo professor Antonio Carlos Nicolodi de um dialeto de português estruturado, e implementada por Nicolodi e o professor Cláudio Morgado de Souza. A estrutura é parecida com a linguagem Pascal.

Delégua implementa integralmente o dialeto VisuAlg. A ideia é ter o mesmo suporte de depuração que o editor de VisuAlg tem, mas para qualquer sistema operacional e capacidade de execução em ambiente remoto. Um ambiente de execução em que isso pode ser visto funcionando é o Visual Studio Code. A extensão da Design Líquido, que traz este suporte, pode ser obtida aqui ou aqui.

Portugol IPT

Portugol IPT, ou simplesmente Portugol, é uma especificação de Portugol criada pelo professor António Manso e implementada por Manso, Eduardo Gomes e Paulo Santos num editor chamado Portugol IDE. Aparentemente recebeu manutenção até 2006. Portugol IDE não apenas interpreta código como também permite aos desenvolvedores criarem fluxogramas executáveis.

Delégua implementa parcialmente o dialeto Portugol IPT, e tal esforço ainda está em andamento.

Portugol Studio

Portugol Studio, ou Portugol Webstudio, é uma especificação de Portugol criada pelo LITE - Laboratório de Inovação Tecnológica na Educação da UNIVALI - Universidade do Vale do Itajaí. Possui dois editores: um desktop (instalável) e outro Web. A gramática da linguagem é a mesma para ambos os editores, mas as biliotecas não.

Delégua implementa parcialmente o dialeto Portugol Studio, e tal esforço ainda está em andamento.

Mapler

Mapler é um dialeto de Portugol implementado por alunos da Universidade Federal do Maranhão, no Brasil. Possui editor desktop próprio e capacidades de tradução para outras linguagens de mercado, como Pascal, C, C++, Python e Java.

Delégua implementa Mapler integralmente.

Potigol

Potigol é uma linguagem de programação funcional criada pelo professor Leonardo Lucena, do Instituto Federal do Rio Grande do Norte. Possui um editor de código próprio, mas a linguagem pode ser executada sem o uso de um editor, por linha de comando.

Delégua implementa parcialmente o dialeto Potigol, e tal esforço ainda está em andamento.