import { AcessoMetodoOuPropriedade, Chamada, Construto, Dicionario, FuncaoConstruto, Leia, Tupla } from '../../construtos';
import { ParametroInterface, SimboloInterface } from '../../interfaces';
import { ErroAvaliadorSintatico } from './../erro-avaliador-sintatico';
import { Comentario, Continua, Declaracao, Enquanto, Escreva, Expressao, FuncaoDeclaracao, Para, ParaCada, Retorna, Se, Sustar, Var } from '../../declaracoes';
import { RetornoAvaliadorSintatico } from '../../interfaces/retornos/retorno-avaliador-sintatico';
import { RetornoLexador } from '../../interfaces/retornos/retorno-lexador';
import { AvaliadorSintaticoBase } from '../avaliador-sintatico-base';
import { PilhaEscopos } from './../pilha-escopos';
import { InformacaoElementoSintatico } from '../../informacao-elemento-sintatico';
/**
 * Este avaliador sintático emite todos os símbolos de Tenda. No entanto, nem todo
 * símbolo emitido aqui pode ser interpretado por este núcleo, já que Tenda tem
 * Rust como base, e várias de suas funções requerem interface com um sistema operacional.
 * Outros pacotes do ecossistema de Delégua, como `delegua-node` poderão lidar com
 * todas as funcionalidades de Tenda.
 */
export declare class AvaliadorSintaticoTenda extends AvaliadorSintaticoBase {
    simbolos: SimboloInterface[];
    erros: ErroAvaliadorSintatico[];
    tiposDefinidosEmCodigo: {
        [key: string]: Declaracao;
    };
    pilhaEscopos: PilhaEscopos;
    tiposDeFerramentasExternas: {
        [key: string]: {
            [key: string]: string;
        };
    };
    primitivasConhecidas: {
        [key: string]: InformacaoElementoSintatico;
    };
    hashArquivo: number;
    atual: number;
    blocos: number;
    performance: boolean;
    superclasseAtual: string | undefined;
    constructor(performance?: boolean);
    protected verificarDefinicaoTipoAtual(): string;
    protected obterChaveDicionario(): Promise<Construto>;
    protected construtoDicionario(simboloChaveEsquerda: SimboloInterface): Promise<Dicionario>;
    protected construtoTupla(): Promise<Tupla>;
    primario(): Promise<Construto>;
    chamar(): Promise<Construto>;
    /**
     * `AcessoMetodoOuPropriedade` é um construto intermediário em Delégua, e deve ser resolvido como outro
     * construto antes de qualquer outra próxima etapa. Algumas validações adicionais também ocorrem aqui.
     * @param {AcessoMetodoOuPropriedade} entidadeChamadaResolvida O construto original.
     * @returns {Construto} O construto resolvido como um tipo mais específico.
     * @see finalizarChamada
     */
    protected resolverEntidadeChamadaAcessoMetodoOuPropriedade(entidadeChamadaResolvida: AcessoMetodoOuPropriedade): Construto;
    protected validarArgumentosEntidadeChamada(argumentosEntidadeChamada: InformacaoElementoSintatico[], argumentosUtilizados: Construto[]): string[];
    /**
     * Diversas verificações de resolução de entidade chamada, como resolver chamada da pilha ou usar referência, argumentos, etc.
     * @param entidadeChamada O construto da entidade chamada.
     * @param argumentos Os argumentos utilizados na chamada.
     * @param tipoPrimitiva Se for uma primitiva, o tipo dela. Senão, `undefined`.
     * @returns A entidade chamada resolvida, se as validações passarem.
     */
    protected resolverEntidadeChamada(entidadeChamada: Construto, argumentos: Construto[], tipoPrimitiva?: string | undefined): Construto;
    protected declaracaoDeFuncao(identificador: SimboloInterface<string>): Promise<FuncaoDeclaracao>;
    finalizarChamada(entidadeChamada: Construto, tipoPrimitiva?: string | undefined): Promise<Chamada>;
    unario(): Promise<Construto>;
    multiplicar(): Promise<Construto>;
    /**
     * Se símbolo de operação é `+`, `-`, `+=` ou `-=`, monta objeto `Binario` para
     * ser avaliado pelo Interpretador.
     * @returns Um Construto, normalmente um `Binario`, ou `Unario` se houver alguma operação unária para ser avaliada.
     */
    adicaoOuSubtracao(): Promise<Construto>;
    bitShift(): Promise<Construto>;
    bitE(): Promise<Construto>;
    bitOu(): Promise<Construto>;
    comparar(): Promise<Construto>;
    comparacaoIgualdade(): Promise<Construto>;
    em(): Promise<Construto>;
    e(): Promise<Construto>;
    /**
     * Método que resolve atribuições.
     * @returns Um construto do tipo `Atribuir`, `Conjunto` ou `AtribuicaoPorIndice`.
     */
    atribuir(): Promise<Construto>;
    /**
     * Declaração para comando `leia`, para ler dados de entrada do usuário.
     * @returns Um objeto da classe `Leia`.
     */
    expressaoLeia(): Promise<Leia>;
    expressao(): Promise<Construto>;
    blocoEscopo(tipo?: string): Promise<Array<Declaracao>>;
    protected declaracaoComentarioUmaLinha(): Comentario;
    declaracaoContinua(): Continua;
    declaracaoEnquanto(): Promise<Enquanto>;
    declaracaoEscreva(): Promise<Escreva>;
    protected declaracaoExpressao(): Promise<Expressao>;
    declaracaoPara(): Promise<Para | ParaCada>;
    protected declaracaoParaCada(simboloParaCada: SimboloInterface, simboloVariavelIteracao: SimboloInterface, literalOuVariavelIteravel: Construto): Promise<ParaCada>;
    protected declaracaoParaTradicional(simboloPara: SimboloInterface, simboloVariavelIteracao: SimboloInterface, literalOuVariavelInicio: Construto): Promise<Para>;
    declaracaoRetorna(): Promise<Retorna>;
    declaracaoSe(): Promise<Se>;
    declaracaoSustar(): Sustar;
    /**
     * Todas as resoluções triviais da linguagem, ou seja, todas as
     * resoluções que podem ocorrer dentro ou fora de um bloco.
     * @returns Normalmente uma `Declaracao`, mas há casos em que
     * outros objetos podem ser retornados.
     * @see resolverDeclaracaoForaDeBloco para as declarações que não podem
     * ocorrer em blocos de escopo elementares.
     */
    protected resolverDeclaracao(): Promise<Declaracao | Declaracao[]>;
    protected logicaComumInferenciaTiposVariaveis(inicializador: Construto): string;
    /**
     * Após palavra reservada `seja`, é esperado ou uma variável, ou uma função.
     * @returns Um Construto, ou do tipo `Var` para variável, ou do tipo `FuncaoDeclaracao` se for
     *          declaração de função.
     */
    protected declaracaoDeVariaveisOuFuncoes(): Promise<Var | FuncaoDeclaracao>;
    protected logicaComumParametros(): Promise<ParametroInterface[]>;
    corpoDaFuncao(tipo: 'função' | 'implícita'): Promise<FuncaoConstruto>;
    /**
     * Até então, Tenda não tem casos de declarações fora de blocos.
     * Isso pode mudar futuramente. Portanto, esta seção será mantida.
     * @returns Uma `Declaracao` ou várias, dependendo do retorno de `resolverDeclaracao`.
     * @see resolverDeclaracao
     */
    resolverDeclaracaoForaDeBloco(): Promise<Declaracao | Declaracao[]>;
    /**
     * Usado quando há erros na avaliação sintática.
     * Garante que o código não entre em loop infinito.
     * @returns Sempre retorna `void`.
     */
    protected sincronizar(): void;
    /**
     * Inicializa o primeiro nível da pilha de escopos, normalmente com ítens da biblioteca global.
     */
    protected inicializarPilhaEscopos(): void;
    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): Promise<RetornoAvaliadorSintatico<Declaracao>>;
}
//# sourceMappingURL=avaliador-sintatico-tenda.d.ts.map