@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
90 lines • 4.57 kB
TypeScript
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