import { AcessoIntervaloVariavel, ArgumentoReferenciaFuncao, Atribuir, Binario, Chamada, Construto, FormatacaoEscrita, Literal, ReferenciaFuncao, TipoDe, Variavel, TuplaN } from '../../construtos';
import { Const, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, FuncaoDeclaracao, Retorna, Var } from '../../declaracoes';
import { DiagnosticoAnalisadorSemantico } from '../../interfaces/erros';
import { RetornoAnalisadorSemantico } from '../../interfaces/retornos/retorno-analisador-semantico';
import { RetornoQuebra } from '../../quebras';
import { AnalisadorSemanticoBase } from '../analisador-semantico-base';
import { FuncaoHipoteticaInterface } from '../funcao-hipotetica-interface';
import { PilhaVariaveis } from '../pilha-variaveis';
/**
 * O Analisador Semântico de Pituguês.
 */
export declare class AnalisadorSemanticoPitugues extends AnalisadorSemanticoBase {
    pilhaVariaveis: PilhaVariaveis;
    funcoes: {
        [nomeFuncao: string]: FuncaoHipoteticaInterface;
    };
    atual: number;
    diagnosticos: DiagnosticoAnalisadorSemantico[];
    constructor();
    /**
     * Marca as variáveis usadas em uma expressão.
     * Versão estendida da classe base com tratamento adicional de construtos Pituguês.
     */
    protected marcarVariaveisUsadasEmExpressao(expressao: Construto): void;
    verificarTipoAtribuido(declaracao: Var | Const): void;
    visitarExpressaoTipoDe(expressao: TipoDe): Promise<any>;
    private verificarTipoDe;
    visitarExpressaoFalhar(expressao: Falhar): Promise<any>;
    private verificarFalhar;
    visitarChamadaPorArgumentoReferenciaFuncao(argumentoReferenciaFuncao: ArgumentoReferenciaFuncao, argumentos: Construto[]): void;
    visitarChamadaPorReferenciaFuncao(referenciaFuncao: ReferenciaFuncao, argumentos: Construto[]): void;
    visitarChamadaPorVariavel(entidadeChamadaVariavel: Variavel, argumentos: Construto[]): Promise<void>;
    visitarExpressaoDeChamada(expressao: Chamada): Promise<void>;
    private resolverSimboloAlvoAtribuicao;
    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 verificarExpressao;
    private verificarBinario;
    private verificarOperadorBinario;
    /**
     * Verifica se os tipos dos operandos são compatíveis
     */
    private verificarTiposOperandos;
    /**
     * Verifica divisão por zero recursivamente
     */
    private verificarDivisaoPorZero;
    /**
     * Tenta avaliar uma expressão em tempo de compilação para detectar valores constantes
     * Retorna o valor se puder ser determinado, ou null caso contrário
     */
    private avaliarExpressaoConstante;
    /**
     * Calcula o resultado de uma operação binária em tempo de compilação
     */
    private calcularOperacaoBinaria;
    /**
     * Obtém o tipo de uma expressão (pode ser Literal, Variavel, ou Binario)
     */
    obterTipoExpressao(expressao: Construto): string | null;
    /**
     * Infere o tipo de resultado de uma operação binária
     */
    protected inferirTipoBinario(binario: Binario): string | null;
    private verificarExistenciaConstruto;
    private verificarLogico;
    private verificarChamada;
    private verificarLadoLogico;
    /**
     * Verifica interpolações de texto e marca variáveis como usadas
     */
    protected verificarInterpolacaoTexto(texto: string, literal: Literal): void;
    visitarDeclaracaoEscreva(declaracao: Escreva): Promise<void>;
    visitarDeclaracaoConst(declaracao: Const): Promise<any>;
    visitarDeclaracaoVar(declaracao: Var): Promise<any>;
    visitarExpressaoFormatacaoEscrita(expressao: FormatacaoEscrita): Promise<any>;
    private verificarBinarioEmExpressao;
    visitarExpressaoRetornar(declaracao: Retorna): Promise<RetornoQuebra>;
    visitarExpressaoDeVariavel(expressao: Variavel | Construto): Promise<any>;
    visitarExpressaoAcessoIntervaloVariavel(expressao: AcessoIntervaloVariavel): Promise<any>;
    visitarExpressaoTuplaN(expressao: TuplaN): Promise<any>;
    visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): Promise<any>;
    verificarVariaveisNaoUsadas(): void;
    analisar(declaracoes: Declaracao[]): Promise<RetornoAnalisadorSemantico>;
}
//# sourceMappingURL=analisador-semantico-pitugues.d.ts.map