import { AcessoIntervaloVariavel, AcessoMetodo, AcessoPropriedade, Agrupamento, ArgumentoReferenciaFuncao, Atribuir, ComentarioComoConstruto, Construto, ExpressaoRegular, FimPara, FormatacaoEscrita, Leia, Literal, ReferenciaFuncao, Separador, Super, TipoDe, Tupla, TuplaN, Variavel } from '../../../construtos';
import { Bloco, CabecalhoPrograma, Classe, Comentario, Const, ConstMultiplo, Continua, Declaracao, Enquanto, Escolha, Escreva, EscrevaMesmaLinha, Expressao, Fazer, FuncaoDeclaracao, Importar, Para, ParaCada, Retorna, Se, Sustar, TendoComo, Tente, TextoDocumentacao, Var, VarMultiplo } from '../../../declaracoes';
import { EspacoMemoria } from '../../espaco-memoria';
import { InterpretadorInterface, ResultadoParcialInterpretadorInterface, SimboloInterface, VariavelInterface } from '../../../interfaces';
import { ErroInterpretador } from '../../../interfaces/erros/erro-interpretador';
import { PilhaEscoposExecucaoInterface } from '../../../interfaces/pilha-escopos-execucao-interface';
import { RetornoInterpretadorInterface } from '../../../interfaces/retornos';
import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from '../../../quebras';
import { InicioAlgoritmo } from '../../../declaracoes/inicio-algoritmo';
export declare class InterpretadorPortugolIpt implements InterpretadorInterface {
    diretorioBase: any;
    funcaoDeRetorno: Function;
    funcaoDeRetornoMesmaLinha: Function;
    pilhaEscoposExecucao: PilhaEscoposExecucaoInterface;
    interfaceEntradaSaida: any;
    declaracoes: Declaracao[];
    erros: ErroInterpretador[];
    hashArquivoDeclaracaoAtual: number;
    linhaDeclaracaoAtual: number;
    resultadoInterpretador: ResultadoParcialInterpretadorInterface[];
    constructor(diretorioBase: string, funcaoDeRetorno?: Function, funcaoDeRetornoMesmaLinha?: Function);
    visitarExpressaoTuplaN(expressao: TuplaN): Promise<any> | void;
    visitarExpressaoAcessoIntervaloVariavel(expressao: AcessoIntervaloVariavel): Promise<any> | void;
    visitarDeclaracaoTextoDocumentacao(declaracao: TextoDocumentacao): Promise<any> | void;
    visitarExpressaoSeparador(expressao: Separador): Promise<any> | void;
    visitarExpressaoComentario(expressao: ComentarioComoConstruto): Promise<any> | void;
    resolverValor(objeto: any): any;
    visitarExpressaoArgumentoReferenciaFuncao(expressao: ArgumentoReferenciaFuncao): Promise<any> | void;
    visitarExpressaoReferenciaFuncao(expressao: ReferenciaFuncao): Promise<any> | void;
    visitarExpressaoAcessoMetodo(expressao: AcessoMetodo): Promise<any> | void;
    visitarExpressaoAcessoPropriedade(expressao: AcessoPropriedade): Promise<any> | void;
    visitarDeclaracaoComentario(declaracao: Comentario): Promise<any>;
    visitarDeclaracaoTendoComo(declaracao: TendoComo): Promise<any>;
    visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise<any>;
    visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise<any>;
    visitarExpressaoTupla(expressao: Tupla): Promise<any>;
    visitarExpressaoAcessoElementoMatriz(expressao: any): never;
    visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: any): Promise<any>;
    visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise<any>;
    visitarExpressaoTipoDe(expressao: TipoDe): Promise<any>;
    visitarExpressaoFalhar(expressao: any): Promise<any>;
    visitarDeclaracaoParaCada(declaracao: ParaCada): Promise<any>;
    visitarExpressaoLiteral(expressao: Literal): Promise<any>;
    avaliar(expressao: Construto | Declaracao): Promise<any>;
    visitarExpressaoAgrupamento(expressao: Agrupamento): Promise<any>;
    visitarExpressaoUnaria(expressao: any): never;
    /**
     * Verifica se operandos são números, que podem ser tanto variáveis puras do JavaScript
     * (neste caso, `number`), ou podem ser variáveis de Delégua com inferência (`VariavelInterface`).
     * @param operador O símbolo do operador.
     * @param direita O operando direito.
     * @param esquerda O operando esquerdo.
     * @returns Se ambos os operandos são números ou não.
     */
    protected verificarOperandosNumeros(operador: SimboloInterface, direita: VariavelInterface | any, esquerda: VariavelInterface | any): void;
    protected eIgual(esquerda: VariavelInterface | any, direita: VariavelInterface | any): boolean;
    visitarExpressaoBinaria(expressao: any): Promise<any>;
    visitarExpressaoDeChamada(expressao: any): never;
    visitarExpressaoDeAtribuicao(expressao: Atribuir): never;
    protected procurarVariavel(simbolo: SimboloInterface): any;
    visitarExpressaoDeVariavel(expressao: Variavel): any;
    visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
    /**
     * Execução da leitura de valores da entrada configurada no
     * início da aplicação.
     * @param expressao Expressão do tipo Leia
     * @returns Promise com o resultado da leitura.
     */
    visitarExpressaoLeia(expressao: Leia): Promise<any>;
    visitarExpressaoLogica(expressao: any): never;
    eVerdadeiro(objeto: any): boolean;
    /**
     * Executa uma expressão Se, que tem uma condição, pode ter um bloco
     * Senão, e múltiplos blocos Senão-se.
     * @param declaracao A declaração Se.
     * @returns O resultado da avaliação do bloco cuja condição é verdadeira.
     */
    visitarDeclaracaoSe(declaracao: Se): Promise<any>;
    visitarDeclaracaoPara(declaracao: Para): Promise<never>;
    visitarExpressaoFimPara(declaracao: FimPara): never;
    visitarDeclaracaoFazer(declaracao: Fazer): never;
    visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita): Promise<string>;
    visitarDeclaracaoEscolha(declaracao: Escolha): never;
    visitarDeclaracaoTente(declaracao: Tente): never;
    visitarDeclaracaoEnquanto(declaracao: Enquanto): never;
    visitarDeclaracaoImportar(declaracao: Importar): never;
    protected avaliarArgumentosEscreva(argumentos: Construto[]): Promise<string>;
    /**
     * Execução de uma escrita na saída configurada, que pode ser `console` (padrão) ou
     * alguma função para escrever numa página Web.
     * @param declaracao A declaração.
     * @returns Sempre nulo, por convenção de visita.
     */
    visitarDeclaracaoEscreva(declaracao: Escreva): Promise<any>;
    visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha): Promise<any>;
    executarBloco(declaracoes: Declaracao[], ambiente?: EspacoMemoria): Promise<any>;
    visitarExpressaoBloco(declaracao: Bloco): Promise<any>;
    protected avaliacaoDeclaracaoVar(declaracao: Var): Promise<any>;
    /**
     * Executa expressão de definição de variável.
     * @param declaracao A declaração Var
     * @returns Sempre retorna nulo.
     */
    visitarDeclaracaoVar(declaracao: Var): Promise<any>;
    visitarDeclaracaoVarMultiplo(declaracao: VarMultiplo): Promise<any>;
    visitarDeclaracaoConst(declaracao: Const): Promise<any>;
    visitarDeclaracaoConstMultiplo(declaracao: ConstMultiplo): Promise<any>;
    visitarExpressaoContinua(declaracao?: Continua): ContinuarQuebra;
    visitarExpressaoSustar(declaracao?: Sustar): SustarQuebra;
    visitarExpressaoRetornar(declaracao: Retorna): Promise<RetornoQuebra>;
    visitarExpressaoFuncaoConstruto(expressao: any): never;
    visitarExpressaoAtribuicaoPorIndice(expressao: any): Promise<any>;
    visitarExpressaoAcessoIndiceVariavel(expressao: any): never;
    visitarExpressaoDefinirValor(expressao: any): never;
    visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): never;
    visitarDeclaracaoClasse(declaracao: Classe): never;
    visitarExpressaoAcessoMetodoOuPropriedade(expressao: any): never;
    visitarExpressaoIsto(expressao: any): never;
    visitarExpressaoDicionario(expressao: any): never;
    visitarExpressaoVetor(expressao: any): never;
    visitarExpressaoSuper(expressao: Super): never;
    paraTexto(objeto: any): any;
    /**
     * Efetivamente executa uma declaração.
     * @param declaracao A declaração a ser executada.
     * @param mostrarResultado Se resultado deve ser mostrado ou não. Normalmente usado
     *                         pelo modo LAIR.
     */
    executar(declaracao: Declaracao, mostrarResultado?: boolean): Promise<any>;
    /**
     * Executa o último escopo empilhado no topo na pilha de escopos do interpretador.
     * Esse método pega exceções, mas apenas as devolve.
     *
     * O tratamento das exceções é feito de acordo com o bloco chamador.
     * Por exemplo, em `tente ... pegue ... finalmente`, a exceção é capturada e tratada.
     * Em outros blocos, pode ser desejável ter o erro em tela.
     * @param manterAmbiente Se verdadeiro, ambiente do topo da pilha de escopo é copiado para o ambiente imediatamente abaixo.
     * @returns O resultado da execução do escopo, se houver.
     */
    executarUltimoEscopo(manterAmbiente?: boolean): Promise<any>;
    interpretar(declaracoes: Declaracao[], manterAmbiente?: boolean): Promise<RetornoInterpretadorInterface>;
}
//# sourceMappingURL=interpretador-portugol-ipt.d.ts.map