import { Construto, FuncaoConstruto, Leia } from '../../construtos';
import { Bloco, Declaracao, Enquanto, Escolha, Escreva, EscrevaMesmaLinha, Fazer, FuncaoDeclaracao, Para, Retorna, Se, Var } from '../../declaracoes';
import { RetornoLexador, SimboloInterface, RetornoAvaliadorSintatico } from '../../interfaces';
import { AvaliadorSintaticoBase } from '../avaliador-sintatico-base';
import { PilhaEscopos } from '../pilha-escopos';
export declare class AvaliadorSintaticoCalango extends AvaliadorSintaticoBase {
    pilhaEscopos: PilhaEscopos;
    /** Flag ativa quando se está a parsear a condição de um `se`, `enquanto` ou `faca/enquanto`.
     * Permite que `=` seja tratado como igualdade (não atribuição) nesses contextos. */
    private emContextoCondicao;
    constructor();
    protected atribuir(): Promise<Construto>;
    protected blocoEscopo(): Promise<Declaracao[]>;
    protected chamar(): Promise<Construto>;
    protected declaracaoEnquanto(): Promise<Enquanto>;
    protected declaracaoEscolha(): Promise<Escolha>;
    protected declaracaoEscreva(): Promise<Escreva>;
    /**
     * Em Calango, este é o método `escreva()`.
     * @returns {EscrevaMesmaLinha} Uma declaracao de escrita na mesma linha.
     */
    protected declaracaoEscrevaMesmaLinha(): Promise<EscrevaMesmaLinha>;
    private declaracaoVariaveis;
    protected declaracaoInteiros(): Var[];
    protected declaracaoReais(): Var[];
    protected declaracaoLogicos(): Var[];
    protected declaracaoCaracteres(): Var[];
    protected declaracaoTextos(): Var[];
    protected declaracaoFazer(): Promise<Fazer>;
    protected declaracaoPara(): Promise<Para>;
    /**
     * Em Calango, `=` é usado tanto para atribuição (em comandos) quanto para igualdade (em condições).
     * Este override só trata `IGUAL_ATRIBUICAO` como igualdade quando `emContextoCondicao` estiver ativo,
     * evitando que `i = i + 1` dentro de blocos seja erroneamente interpretado como comparação.
     */
    protected comparacaoIgualdade(): Promise<Construto>;
    protected resolverBloco(simbolosParada: string[]): Promise<Bloco>;
    protected declaracaoSe(): Promise<Se>;
    protected expressaoLeia(): Promise<Leia>;
    protected primario(): Promise<Construto>;
    resolverDeclaracaoForaDeBloco(): Promise<Declaracao | Declaracao[] | Construto | Construto[] | any>;
    protected corpoDaFuncao(_tipo: string): Promise<FuncaoConstruto>;
    /** Mapeia um tipo de token Calango para a string de tipo da Delégua. */
    private mapearTipo;
    private analisarParametrosCalango;
    protected declaracaoFuncao(): Promise<FuncaoDeclaracao>;
    protected declaracaoProcedimento(): Promise<FuncaoDeclaracao>;
    protected declaracaoRetorna(): Promise<Retorna>;
    private validarSegmentoAlgoritmo;
    private validarSegmentoPrincipal;
    analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): Promise<RetornoAvaliadorSintatico<Declaracao>>;
}
//# sourceMappingURL=avaliador-sintatico-calango.d.ts.map