@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
123 lines • 7.92 kB
TypeScript
import { EspacoMemoria } from '../../espaco-memoria';
import { DeleguaFuncao } from '../../estruturas/delegua-funcao';
import { AcessoIndiceVariavel, AcessoMetodo, AcessoPropriedade, ArgumentoReferenciaFuncao, Atribuir, Construto, ExpressaoRegular, FimPara, FormatacaoEscrita, Isto, Leia, Literal, ReferenciaFuncao, Super, TipoDe, Tupla, Variavel } from '../../../construtos';
import { Aleatorio, CabecalhoPrograma, Classe, Comentario, Const, ConstMultiplo, Declaracao, Enquanto, Escolha, Escreva, EscrevaMesmaLinha, Expressao, Fazer, FuncaoDeclaracao, Importar, Para, ParaCada, Se, TendoComo, Tente, Var, VarMultiplo } from '../../../declaracoes';
import { InterpretadorInterface, ResolvedorInterface, SimboloInterface, VariavelInterface } from '../../../interfaces';
import { ErroInterpretador } from '../../../interfaces/erros/erro-interpretador';
import { RetornoInterpretador } from '../../../interfaces/retornos/retorno-interpretador';
import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from '../../../quebras';
import { PilhaEscoposExecucao } from '../../pilha-escopos-execucao';
import { InicioAlgoritmo } from '../../../declaracoes/inicio-algoritmo';
/**
* O Interpretador visita todos os elementos complexos gerados pelo analisador sintático (_Parser_)
* e de fato executa a lógica de programação descrita no código.
*/
export declare class InterpretadorEguaClassico implements InterpretadorInterface {
resolvedor: ResolvedorInterface;
requerDeclaracaoPropriedades: boolean;
diretorioBase: any;
funcaoDeRetorno: Function;
locais: Map<Construto, number>;
erros: ErroInterpretador[];
pilhaEscoposExecucao: PilhaEscoposExecucao;
interfaceEntradaSaida: any;
constructor(diretorioBase: string);
protected resolverValor(objeto: any): any;
visitarExpressaoArgumentoReferenciaFuncao(expressao: ArgumentoReferenciaFuncao): Promise<any> | void;
visitarExpressaoReferenciaFuncao(expressao: ReferenciaFuncao): Promise<any> | void;
visitarExpressaoAcessoMetodo(expressao: AcessoMetodo): Promise<any> | void;
visitarExpressaoAcessoPropriedade(expressao: AcessoPropriedade): Promise<any> | void;
visitarDeclaracaoComentario(declaracao: Comentario): Promise<any>;
visitarDeclaracaoTendoComo(declaracao: TendoComo): Promise<any>;
visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise<any>;
visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise<any>;
visitarExpressaoTupla(expressao: Tupla): Promise<any>;
visitarExpressaoAcessoElementoMatriz(expressao: any): never;
visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: any): Promise<any>;
visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise<any>;
visitarExpressaoTipoDe(expressao: TipoDe): Promise<any>;
visitarExpressaoFalhar(expressao: any): Promise<any>;
visitarDeclaracaoParaCada(declaracao: ParaCada): Promise<any>;
visitarDeclaracaoConst(declaracao: Const): Promise<any>;
visitarDeclaracaoConstMultiplo(declaracao: ConstMultiplo): Promise<any>;
visitarExpressaoFimPara(declaracao: FimPara): never;
visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita): never;
visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha): never;
visitarExpressaoLeia(expressao: Leia): Promise<any>;
visitarExpressaoLiteral(expressao: Literal): any;
avaliar(expressao: Construto | Declaracao): VariavelInterface | any;
visitarExpressaoAgrupamento(expressao: any): any;
visitarDeclaracaoAleatorio(declaracao: Aleatorio): Promise<any>;
eVerdadeiro(objeto: any): boolean;
verificarOperandoNumero(operador: SimboloInterface, operando: any): void;
visitarExpressaoUnaria(expr: any): Promise<number | boolean>;
eIgual(esquerda: VariavelInterface | any, direita: VariavelInterface | any): boolean;
verificarOperandosNumeros(operador: SimboloInterface, direita: VariavelInterface | any, esquerda: VariavelInterface | any): void;
visitarExpressaoBinaria(expressao: any): Promise<any>;
visitarExpressaoDeChamada(expressao: any): Promise<any>;
visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<any>;
procurarVariavel(simbolo: SimboloInterface, expressao: any): VariavelInterface;
visitarExpressaoDeVariavel(expressao: Variavel): Promise<VariavelInterface>;
visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
visitarExpressaoLogica(expressao: any): Promise<any>;
visitarDeclaracaoSe(declaracao: Se): Promise<any>;
visitarDeclaracaoPara(declaracao: Para): Promise<any>;
visitarDeclaracaoFazer(declaracao: Fazer): Promise<any>;
visitarDeclaracaoEscolha(declaracao: Escolha): Promise<void>;
visitarDeclaracaoTente(declaracao: Tente): Promise<any>;
visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<any>;
visitarDeclaracaoImportar(declaracao: Importar): Promise<void>;
visitarDeclaracaoEscreva(declaracao: Escreva): Promise<any>;
/**
* Empilha declarações na pilha de escopos de execução, cria um novo ambiente e
* executa as declarações empilhadas.
*
* Se o retorno do último bloco foi uma exceção (normalmente um erro em tempo de execução),
* atira a exceção daqui.
* Isso é usado, por exemplo, em blocos `tente ... pegue ... finalmente`.
* @param declaracoes Um vetor de declaracoes a ser executado.
* @param ambiente O ambiente de execução quando houver, como parâmetros, argumentos, etc.
*/
executarBloco(declaracoes: Declaracao[], ambiente?: EspacoMemoria): Promise<any>;
visitarExpressaoBloco(declaracao: any): Promise<any>;
/**
* Executa expressão de definição de variável.
* @param declaracao A declaração Var
* @returns Sempre retorna nulo.
*/
visitarDeclaracaoVar(declaracao: Var): Promise<any>;
visitarDeclaracaoVarMultiplo(declaracao: VarMultiplo): Promise<void>;
visitarExpressaoContinua(declaracao?: any): ContinuarQuebra;
visitarExpressaoSustar(declaracao?: any): SustarQuebra;
visitarExpressaoRetornar(declaracao: any): Promise<RetornoQuebra>;
visitarExpressaoFuncaoConstruto(expressao: any): Promise<DeleguaFuncao>;
visitarExpressaoAtribuicaoPorIndice(expressao: any): Promise<void>;
visitarExpressaoAcessoIndiceVariavel(expressao: AcessoIndiceVariavel | any): Promise<any>;
visitarExpressaoDefinirValor(expressao: any): Promise<any>;
visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): void;
visitarDeclaracaoClasse(declaracao: Classe): Promise<any>;
visitarExpressaoAcessoMetodoOuPropriedade(expressao: any): Promise<any>;
visitarExpressaoIsto(expressao: Isto): Promise<any>;
visitarExpressaoDicionario(expressao: any): Promise<{}>;
visitarExpressaoVetor(expressao: any): Promise<any[]>;
visitarExpressaoSuper(expressao: Super): any;
paraTexto(objeto: any): any;
executar(declaracao: Declaracao, mostrarResultado?: boolean): Promise<any>;
/**
* Executa o último escopo empilhado no topo na pilha de escopos do Interpretador.
* Originalmente, Égua não trabalha com uma pilha de escopos.
*
* O tratamento das exceções é feito de acordo com o bloco chamador.
* Por exemplo, em `tente ... pegue ... finalmente`, a exceção é capturada e tratada.
* Em outros blocos, pode ser desejável ter o erro em tela.
*
* Essa implementação é derivada do Interpretador de Delégua, mas simulando todos os
* comportamos do interpretador Égua original.
* Interpretador Égua: https://github.com/eguatech/egua/blob/master/src/interpreter.js
* @returns O resultado da execução do escopo, se houver.
*/
executarUltimoEscopo(): Promise<any>;
interpretar(declaracoes: Declaracao[]): Promise<RetornoInterpretador>;
finalizacao(): void;
}
//# sourceMappingURL=interpretador-egua-classico.d.ts.map