UNPKG

@designliquido/delegua

Version:

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

90 lines 4.57 kB
import { Chamada, Construto, FuncaoConstruto, Leia } from '../construtos'; import { Classe, Continua, Declaracao, Enquanto, Escreva, Expressao, FuncaoDeclaracao, Importar, Para, ParaCada, Retorna, Se, Sustar, Tente, Var } from '../declaracoes'; import { AvaliadorSintaticoInterface, ParametroInterface, SimboloInterface } from '../interfaces'; import { RetornoAvaliadorSintatico, RetornoLexador } from '../interfaces/retornos'; import { ErroAvaliadorSintatico } from './erro-avaliador-sintatico'; /** * O Avaliador Sintático Base é uma tentativa de mapear métodos em comum * entre todos os outros Avaliadores Sintáticos. Depende de um dicionário * de tipos de símbolos comuns entre todos os dialetos. */ export declare abstract class AvaliadorSintaticoBase implements AvaliadorSintaticoInterface<SimboloInterface, Declaracao> { simbolos: SimboloInterface[]; erros: ErroAvaliadorSintatico[]; hashArquivo: number; atual: number; blocos: number; protected consumir(tipo: string, mensagemDeErro: string): SimboloInterface; protected erro(simbolo: SimboloInterface, mensagemDeErro: string): ErroAvaliadorSintatico; protected simboloAnterior(): SimboloInterface; protected verificarTipoSimboloAtual(tipo: string): boolean; protected verificarTipoProximoSimbolo(tipo: string): boolean; protected estaNoFinal(): boolean; protected avancarEDevolverAnterior(): SimboloInterface; protected verificarSeSimboloAtualEIgualA(...argumentos: string[]): boolean; /** * Os métodos a seguir devem ser implementados nos seus respectivos * dialetos por diferentes razões: seja porque o dialeto correspondente * tem uma abordagem diferente sobre entrada e saída, seja porque a * funcionalidade sequer existe, mas é suprimida por outra. * * Esses métodos não precisam ser expostos. A recomendação geral é * implementá-los como `protected`. */ protected abstract atribuir(): Construto; protected abstract blocoEscopo(): Declaracao[]; protected abstract chamar(): Construto; protected abstract corpoDaFuncao(tipo: string): FuncaoConstruto; protected abstract declaracaoEnquanto(): Enquanto; protected abstract declaracaoEscreva(): Escreva; protected abstract declaracaoPara(): Para | ParaCada; protected abstract declaracaoSe(): Se; protected abstract expressaoLeia(): Leia; protected abstract primario(): Construto; protected abstract resolverDeclaracaoForaDeBloco(): Declaracao | Declaracao[]; protected finalizarChamada(entidadeChamada: Construto): Chamada; protected unario(): Construto; protected exponenciacao(): Construto; protected multiplicar(): Construto; protected adicaoOuSubtracao(): Construto; /** * Este método é usado por alguns dialetos de Portugol que possuem declarações * de múltiplas variáveis na mesma linha. */ protected declaracaoDeVariaveis(): Var[]; protected comparar(): Construto; protected comparacaoIgualdade(): Construto; protected e(): Construto; protected ou(): Construto; protected expressao(): Construto; protected funcao(tipo: string): FuncaoDeclaracao; protected logicaComumParametros(): ParametroInterface[]; /** * Os métodos a seguir só devem ser implementados se o dialeto * em questão realmente possui a funcionalidade, e devem levantar * erro em caso contrário. */ protected bitShift(): Construto; protected bitE(): Construto; protected bitOu(): Construto; protected declaracaoContinua(): Continua; protected declaracaoDeClasse(): Classe; protected declaracaoDeVariavel(): Var; protected declaracaoExpressao(simboloAnterior?: SimboloInterface): Expressao; protected declaracaoImportar(): Importar; protected declaracaoRetorna(): Retorna; protected declaracaoSustar(): Sustar; protected declaracaoTente(): Tente; protected em(): Construto; protected resolverDeclaracao(): void; /** * Este é o ponto de entrada de toda a avaliação sintática. É o * único método mencionado na interface do avaliador sintático, e cada * avaliador sintático deve implementar o seu método. * @param retornoLexador O retorno do Lexador. * @param hashArquivo O hash do arquivo, gerado pela função `cyrb53`. * @see cyrb53 */ abstract analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao>; } //# sourceMappingURL=avaliador-sintatico-base.d.ts.map