@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
141 lines • 8.35 kB
TypeScript
import { AcessoElementoMatriz, AcessoIndiceVariavel, AcessoIntervaloVariavel, AcessoMetodo, AcessoMetodoOuPropriedade, AcessoPropriedade, Agrupamento, ArgumentoReferenciaFuncao, AtribuicaoPorIndice, AtribuicaoPorIndicesMatriz, Atribuir, Binario, Chamada, ComentarioComoConstruto, Constante, DefinirValor, Dicionario, ExpressaoRegular, FimPara, FormatacaoEscrita, FuncaoConstruto, Isto, Leia, Literal, Logico, ReferenciaFuncao, Separador, Super, TipoDe, Tupla, TuplaN, Unario, Variavel, Vetor } from '../construtos';
import { Bloco, CabecalhoPrograma, Classe, Comentario, Const, ConstMultiplo, Continua, Declaracao, Enquanto, Escolha, Escreva, EscrevaMesmaLinha, Expressao, Falhar, Fazer, FuncaoDeclaracao, InicioAlgoritmo, Para, ParaCada, Retorna, Se, Sustar, TendoComo, Tente, TextoDocumentacao, Var, VarMultiplo } from '../declaracoes';
import { ContinuarQuebra, SustarQuebra } from '../quebras';
import { TradutorInterface, VisitanteComumInterface } from '../interfaces';
import { SimboloInterface } from '../interfaces/simbolo-interface';
/**
* Tradutor que converte código Delégua para Elixir.
*
* Elixir é uma linguagem funcional, então algumas conversões são necessárias:
* - Classes → Módulos com structs
* - Métodos → Funções que recebem structs como primeiro parâmetro
* - Loops imperativos → Funções recursivas ou Enum.each
* - Variables → Bindings imutáveis
*/
export declare class TradutorElixir implements TradutorInterface<Declaracao>, VisitanteComumInterface {
indentacaoAtual: number;
moduloAtual: string | null;
modulosConhecidos: Set<string>;
funcoesConhecidas: Set<string>;
atributosModulo: Map<string, string>;
dentroDeMetodo: boolean;
nomeParametroStruct: string | null;
contadorVariavelTemporaria: number;
constructor();
/**
* Adiciona a indentação atual (Elixir usa 2 espaços por convenção)
*/
protected adicionarIndentacao(): string;
/**
* Aumenta o nível de indentação em 2 espaços
*/
protected aumentarIndentacao(): void;
/**
* Diminui o nível de indentação em 2 espaços
*/
protected diminuirIndentacao(): void;
/**
* Converte identificadores de camelCase para snake_case (convenção Elixir)
*/
protected converterIdentificador(nome: string): string;
/**
* Converte nomes de classes/módulos, preservando PascalCase
*/
protected converterNomeModulo(nome: string): string;
/**
* Gera nome único para variável temporária
*/
protected gerarVariavelTemporaria(): string;
/**
* Mapeia operadores Delégua para Elixir
*/
protected traduzirOperador(simbolo: SimboloInterface): string;
/**
* Ponto de entrada para tradução
*/
traduzir(declaracoes: Declaracao[]): Promise<string>;
visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise<any> | void;
visitarDeclaracaoClasse(declaracao: Classe): Promise<string>;
/**
* Extrai nomes de campos do struct a partir do construtor da classe
*/
protected extrairCamposStruct(declaracao: Classe): Promise<string[]>;
/**
* Extrai campos de uma declaração recursivamente
*/
protected extrairCamposDeDeclaracao(declaracao: any, campos: Set<string>): void;
/**
* Traduz um método de classe para função de módulo
*/
protected traduzirMetodoClasse(metodo: FuncaoDeclaracao, nomeModulo: string): Promise<string>;
/**
* Extrai inicializações de struct do corpo do construtor
*/
protected extrairInicializacoesStruct(corpo: any[], nomeModulo: string): Promise<string>;
visitarDeclaracaoComentario(declaracao: Comentario): Promise<string>;
visitarDeclaracaoConst(declaracao: Const): Promise<string>;
visitarDeclaracaoConstMultiplo(declaracao: ConstMultiplo): Promise<any> | void;
visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<string>;
visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): Promise<string>;
visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<string>;
visitarDeclaracaoEscolha(declaracao: Escolha): Promise<string>;
visitarDeclaracaoEscreva(declaracao: Escreva): Promise<string>;
visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha): Promise<any> | void;
visitarDeclaracaoFazer(declaracao: Fazer): Promise<string>;
visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise<any> | void;
visitarDeclaracaoPara(declaracao: Para): Promise<string>;
visitarDeclaracaoParaCada(declaracao: ParaCada): Promise<string>;
visitarDeclaracaoSe(declaracao: Se): Promise<string>;
visitarDeclaracaoTendoComo(declaracao: TendoComo): Promise<string>;
visitarDeclaracaoTente(declaracao: Tente): Promise<any> | void;
visitarDeclaracaoTextoDocumentacao(declaracao: TextoDocumentacao): Promise<any> | void;
visitarDeclaracaoVar(declaracao: Var): Promise<string>;
visitarDeclaracaoVarMultiplo(declaracao: VarMultiplo): Promise<any> | void;
visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<string>;
visitarExpressaoAcessoIndiceVariavel(expressao: AcessoIndiceVariavel): Promise<string>;
visitarExpressaoAcessoIntervaloVariavel(expressao: AcessoIntervaloVariavel): Promise<any> | void;
visitarExpressaoAcessoElementoMatriz(expressao: AcessoElementoMatriz): Promise<any> | void;
visitarExpressaoAcessoMetodo(expressao: AcessoMetodo): Promise<string>;
/**
* Mapeia métodos built-in de Delégua para Elixir
*/
protected mapearMetodoBuiltIn(metodo: string, objeto: string, argumentos: string[]): string | null;
/**
* Tenta extrair o nome do módulo de uma expressão de objeto
*/
protected obterNomeModulo(objetoStr: string): string;
visitarExpressaoAcessoMetodoOuPropriedade(expressao: AcessoMetodoOuPropriedade): Promise<string>;
visitarExpressaoAcessoPropriedade(expressao: AcessoPropriedade): Promise<string>;
visitarExpressaoAgrupamento(expressao: Agrupamento): Promise<string>;
visitarExpressaoArgumentoReferenciaFuncao(expressao: ArgumentoReferenciaFuncao): Promise<any> | void;
visitarExpressaoAtribuicaoPorIndice(expressao: AtribuicaoPorIndice): Promise<any> | void;
visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: AtribuicaoPorIndicesMatriz): Promise<any> | void;
visitarExpressaoBinaria(expressao: Binario): Promise<string>;
visitarExpressaoBloco(declaracao: Bloco): Promise<string>;
visitarExpressaoComentario(expressao: ComentarioComoConstruto): Promise<any> | void;
visitarExpressaoContinua(declaracao?: Continua): ContinuarQuebra;
visitarExpressaoDeChamada(expressao: Chamada): Promise<string>;
visitarExpressaoDefinirValor(expressao: DefinirValor): Promise<any> | void;
visitarExpressaoFuncaoConstruto(expressao: FuncaoConstruto): Promise<string>;
visitarExpressaoDeVariavel(expressao: Variavel | Constante): Promise<string>;
visitarExpressaoDicionario(expressao: Dicionario): Promise<string>;
visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise<RegExp> | void;
visitarExpressaoFalhar(expressao: Falhar): Promise<any> | void;
visitarExpressaoFimPara(declaracao: FimPara): Promise<any> | void;
visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita): Promise<any> | void;
visitarExpressaoIsto(expressao: Isto): Promise<string>;
visitarExpressaoLeia(expressao: Leia): Promise<string>;
visitarExpressaoLiteral(expressao: Literal): Promise<string>;
visitarExpressaoLogica(expressao: Logico): Promise<string>;
visitarExpressaoReferenciaFuncao(expressao: ReferenciaFuncao): Promise<any> | void;
visitarExpressaoRetornar(expressao: Retorna): Promise<string>;
visitarExpressaoSeparador(expressao: Separador): Promise<any> | void;
visitarExpressaoSuper(expressao: Super): Promise<any> | void;
visitarExpressaoSustar(declaracao?: Sustar): SustarQuebra | void;
visitarExpressaoTupla(expressao: Tupla): Promise<string>;
visitarExpressaoTuplaN(expressao: TuplaN): Promise<string>;
visitarExpressaoTipoDe(expressao: TipoDe): Promise<any> | void;
visitarExpressaoUnaria(expressao: Unario): Promise<string>;
visitarExpressaoVetor(expressao: Vetor): Promise<string>;
}
//# sourceMappingURL=tradutor-elixir.d.ts.map