UNPKG

@designliquido/delegua

Version:

Linguagem de programação simples e moderna usando português estruturado.

141 lines 8.35 kB
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