import { ArgumentoReferenciaFuncao, Atribuir, Chamada, Construto, FuncaoConstruto, ReferenciaFuncao, TipoDe, Variavel } from '../construtos';
import { Const, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, FuncaoDeclaracao, Retorna, Var } from '../declaracoes';
import { ParametroInterface, SimboloInterface } from '../interfaces';
import { DiagnosticoAnalisadorSemantico } from '../interfaces/erros';
import { RetornoAnalisadorSemantico } from '../interfaces/retornos/retorno-analisador-semantico';
import { RetornoQuebra } from '../quebras';
import { AnalisadorSemanticoBase } from './analisador-semantico-base';
import { PilhaVariaveis } from './pilha-variaveis';
interface VariavelHipoteticaInterface {
    tipo: string;
    subtipo?: 'texto' | 'número' | 'inteiro' | 'longo' | 'lógico';
    imutavel: boolean;
    valor?: any;
}
interface FuncaoHipoteticaInterface {
    valor: FuncaoConstruto;
}
export declare class AnalisadorSemantico extends AnalisadorSemanticoBase {
    pilhaVariaveis: PilhaVariaveis;
    variaveis: {
        [nomeVariavel: string]: VariavelHipoteticaInterface;
    };
    funcoes: {
        [nomeFuncao: string]: FuncaoHipoteticaInterface;
    };
    atual: number;
    diagnosticos: DiagnosticoAnalisadorSemantico[];
    constructor();
    erro(simbolo: SimboloInterface, mensagem: string): void;
    aviso(simbolo: SimboloInterface, mensagem: string): void;
    verificarTipoAtribuido(declaracao: Var | Const): void;
    visitarExpressaoTipoDe(expressao: TipoDe): Promise<any>;
    private verificarTipoDe;
    visitarExpressaoFalhar(expressao: Falhar): Promise<any>;
    private verificarFalhar;
    comparacaoArgumentosContraParametrosFuncao(simboloFuncao: SimboloInterface, parametros: ParametroInterface[], argumentos: Construto[]): void;
    visitarChamadaPorArgumentoReferenciaFuncao(argumentoReferenciaFuncao: ArgumentoReferenciaFuncao, argumentos: Construto[]): void;
    visitarChamadaPorReferenciaFuncao(referenciaFuncao: ReferenciaFuncao, argumentos: Construto[]): void;
    visitarChamadaPorVariavel(entidadeChamadaVariavel: Variavel, argumentos: Construto[]): Promise<void>;
    visitarExpressaoDeChamada(expressao: Chamada): Promise<void>;
    visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<void>;
    visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
    visitarDeclaracaoEscolha(declaracao: Escolha): Promise<void>;
    visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<void>;
    private verificarCondicao;
    private verificarVariavelBinaria;
    private verificarVariavel;
    private verificarBinario;
    private verificarOperadorBinario;
    private verificarLadoBinario;
    private verificarLogico;
    private verificarChamada;
    private verificarLadoLogico;
    visitarDeclaracaoEscreva(declaracao: Escreva): Promise<void>;
    visitarDeclaracaoConst(declaracao: Const): Promise<any>;
    virificarTipoDeclaracaoConst(declaracao: Const): Promise<any>;
    visitarDeclaracaoVar(declaracao: Var): Promise<any>;
    visitarExpressaoRetornar(declaracao: Retorna): Promise<RetornoQuebra>;
    visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): Promise<void>;
    analisar(declaracoes: Declaracao[]): RetornoAnalisadorSemantico;
}
export {};
//# sourceMappingURL=analisador-semantico.d.ts.map