import { Construto, FuncaoConstruto, Leia, ListaCompreensao, ImportarComoConstruto } from '../../construtos';
import { Escreva, Se, Enquanto, Continua, Retorna, Escolha, Tente, Fazer, Var, FuncaoDeclaracao, Classe, Declaracao, Expressao, Sustar, Falhar, ParaCada, Comentario, TextoDocumentacao } from '../../declaracoes';
import { AvaliadorSintaticoInterface, ParametroInterface, SimboloInterface } from '../../interfaces';
import { Localizacao } from '../../lexador/dialetos/localizacao';
import { RetornoLexador } from '../../interfaces/retornos/retorno-lexador';
import { ErroAvaliadorSintatico } from '../erro-avaliador-sintatico';
import { RetornoAvaliadorSintatico } from '../../interfaces/retornos/retorno-avaliador-sintatico';
import { PilhaEscopos } from '../pilha-escopos';
import { InformacaoElementoSintatico } from '../../informacao-elemento-sintatico';
/**
 * O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
 * Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
 * Há dois grupos de estruturas de alto nível: Construtos e Declarações.
 *
 * A grande diferença entre este avaliador e os demais é a forma como são entendidos os blocos de escopo.
 * Este avaliador espera uma estrutura de pragmas, que explica quantos espaços há na frente de cada linha.
 */
export declare class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInterface<SimboloInterface, Declaracao> {
    simbolos: SimboloInterface[];
    erros: ErroAvaliadorSintatico[];
    localizacoes: {
        [linha: number]: Localizacao;
    };
    tiposDefinidosEmCodigo: {
        [nomeTipo: string]: Declaracao;
    };
    pilhaEscopos: PilhaEscopos;
    primitivasConhecidas: {
        [nomeModuloOuClasse: string]: {
            [nomePrimitiva: string]: InformacaoElementoSintatico;
        };
    };
    hashArquivo: number;
    atual: number;
    blocos: number;
    escopos: number[];
    performance: boolean;
    superclasseAtual: string | undefined;
    constructor(performance?: boolean);
    protected logicaComumInferenciaTiposVariaveisEConstantes(inicializador: Construto, tipoPrevio: string): string;
    expressaoLeia(): Promise<Leia>;
    declaracaoDeVariavel(): Var;
    private variavelJaDeclarada;
    private declaracaoImplicitaVariaveis;
    private temPadraoMultiplaAtribuicao;
    private temPadraoVarComoPalavraChave;
    private consumirIdentificadores;
    private consumirInicializadores;
    private construirValidacaoDesempacotamento;
    declaracaoDeVariaveis(): Promise<any>;
    sincronizar(): void;
    erro(simbolo: SimboloInterface, mensagemDeErro: string): ErroAvaliadorSintatico;
    consumir(tipo: string, mensagemDeErro: string): SimboloInterface<string>;
    verificarTipoSimboloAtual(tipo: string): boolean;
    verificarTipoProximoSimbolo(tipo: string): boolean;
    simboloAtual(): SimboloInterface;
    simboloAnterior(): SimboloInterface;
    simboloNaPosicao(posicao: number): SimboloInterface;
    estaNoFinal(): boolean;
    avancarEDevolverAnterior(): SimboloInterface<string>;
    verificarSeSimboloAtualEIgualA(...argumentos: string[]): boolean;
    primario(): Promise<Construto>;
    finalizarChamada(entidadeChamada: Construto): Promise<Construto>;
    chamar(): Promise<Construto>;
    unario(): Promise<Construto>;
    exponenciacao(): Promise<Construto>;
    multiplicar(): Promise<Construto>;
    adicaoOuSubtracao(): Promise<Construto>;
    bitShift(): Promise<Construto>;
    bitE(): Promise<Construto>;
    bitOu(): Promise<Construto>;
    comparar(): Promise<Construto>;
    comparacaoIgualdade(): Promise<Construto>;
    em(): Promise<Construto>;
    e(): Promise<Construto>;
    ou(): Promise<Construto>;
    protected seTernario(): Promise<Construto>;
    tupla(): Promise<Construto>;
    atribuir(): Promise<Construto>;
    expressao(): Promise<Construto>;
    declaracaoEscreva(simboloEscreva: SimboloInterface): Promise<Escreva>;
    declaracaoExpressao(): Promise<Expressao>;
    blocoEscopo(): Promise<any[]>;
    declaracaoEnquanto(): Promise<Enquanto>;
    declaracaoEscolha(): Promise<Escolha>;
    protected declaracaoParaCada(simboloPara: SimboloInterface): Promise<ParaCada>;
    declaracaoPara(): Promise<ParaCada>;
    declaracaoSe(): Promise<Se>;
    declaracaoSustar(): Sustar;
    declaracaoComentario(): Comentario;
    declaracaoContinua(): Continua;
    declaracaoRetorna(): Promise<Retorna>;
    construtoImportar(): Promise<ImportarComoConstruto>;
    declaracaoTente(): Promise<Tente>;
    declaracaoFazer(): Promise<Fazer>;
    funcao(tipo: string, construtor?: boolean): Promise<FuncaoDeclaracao>;
    logicaComumParametros(): Promise<Array<Partial<ParametroInterface>>>;
    /**
     * Resolve uma lista de compreensão.
     * @returns {ListaCompreensao} A lista de compreensão resolvida.
     */
    protected resolverCompreensaoDeLista(): Promise<ListaCompreensao>;
    protected verificarDefinicaoTipoAtual(): string;
    declaracaoTextoDeDocumentacao(): TextoDocumentacao | undefined;
    corpoDaFuncao(tipo: string): Promise<FuncaoConstruto>;
    declaracaoDeClasse(): Promise<Classe>;
    declaracaoFalhar(): Falhar;
    /**
     * Verifica se há pontos e vírgula no final de sentenças.
     * Em Pituguês, ; só é permitido para separar múltiplos comandos na mesma linha,
     * mas não no final de uma sentença/linha.
     */
    private verificarPontosEVirgulasInvalidos;
    /**
     * Encontra o próximo símbolo que não seja comentário.
     * Isso é importante porque comentários não afetam a validade do ponto e vírgula.
     */
    private encontrarProximoSimboloNaoComentario;
    /**
     * Consome o símbolo atual, verificando se é uma declaração de função, variável, classe
     * ou uma expressão.
     * @returns Objeto do tipo `Declaracao`.
     */
    resolverDeclaracaoForaDeBloco(): Promise<Declaracao | Declaracao[]>;
    resolverDeclaracao(): Promise<Declaracao | Declaracao[]>;
    /**
     * Inicializa o primeiro nível da pilha de escopos, normalmente com ítens da biblioteca global.
     * É separada da inicialização do avaliador sintático, pois é necessário manipular essa
     * inicialização de outra forma em `delegua-node`.
     */
    protected inicializarPilhaEscopos(): void;
    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): Promise<RetornoAvaliadorSintatico<Declaracao>>;
}
//# sourceMappingURL=avaliador-sintatico-pitugues.d.ts.map