import { Chamada, Construto, FuncaoConstruto } from '../construtos';
import { Classe, Continua, Declaracao, Enquanto, Escolha, Escreva, Expressao, Fazer, FuncaoDeclaracao, Importar, Leia, 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 regredirEDevolverAtual(): 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 declaracaoEscolha(): Escolha;
    protected abstract declaracaoEscreva(): Escreva;
    protected abstract declaracaoFazer(): Fazer;
    protected abstract declaracaoLeia(): Leia;
    protected abstract declaracaoPara(): Para | ParaCada;
    protected abstract declaracaoSe(): Se;
    protected abstract primario(): Construto;
    protected abstract resolverDeclaracaoForaDeBloco(): 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`.
     */
    abstract analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): RetornoAvaliadorSintatico<Declaracao>;
}
//# sourceMappingURL=avaliador-sintatico-base.d.ts.map