import { AcessoIndiceVariavel, AcessoMetodo, AcessoMetodoOuPropriedade, AcessoPropriedade, Agrupamento, ArgumentoReferenciaFuncao, AtribuicaoPorIndice, Atribuir, Binario, Chamada, DefinirValor, Dicionario, Leia, Literal, Logico, ReferenciaFuncao, Separador, SeTernario, Unario, Variavel, Vetor } from '../construtos';
import { Bloco, Classe, Comentario, Const, Declaracao, Enquanto, Escreva, Expressao, FuncaoDeclaracao, Para, ParaCada, Retorna, Se, Tente, Var } from '../declaracoes';
import { ConstrutoInterface, SimboloInterface, TradutorInterface } from '../interfaces';
export declare class TradutorPython implements TradutorInterface<Declaracao> {
    indentacao: number;
    classesConhecidas: string[];
    protected traduzirSimboloOperador(operador: SimboloInterface): string;
    protected traduzirFuncaoOuMetodo(nomeMetodo: string, objetoResolvido: string, argumentos: ConstrutoInterface[]): string;
    protected logicaComumBlocoEscopo(declaracoes: Declaracao[]): string;
    traduzirConstrutoAcessoIndiceVariavel(acessoIndiceVariavel: AcessoIndiceVariavel): string;
    /**
     * Traduz uma função anônima de Delégua para uma lambda do Python.
     * Em Delégua: funcao(x) { retorna x * 2 }
     * Em Python: lambda x: x * 2
     *
     * Limitação: Python lambdas suportam apenas uma expressão, então apenas funções
     * simples com um único retorno podem ser traduzidas adequadamente.
     * @param argumento O construto da função anônima
     * @returns String com a lambda do Python
     */
    traduzirFuncaoAnonimaParaLambda(argumento: ConstrutoInterface): string;
    traduzirAcessoMetodoVetor(objeto: ConstrutoInterface, nomeMetodo: string, argumentos: ConstrutoInterface[]): string;
    traduzirConstrutoAcessoMetodo(acessoMetodo: AcessoMetodo, argumentos: ConstrutoInterface[]): string;
    traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodo: AcessoMetodoOuPropriedade, argumentos: ConstrutoInterface[]): string;
    traduzirConstrutoAcessoPropriedade(acessoPropriedade: AcessoPropriedade, argumentos: ConstrutoInterface[]): string;
    traduzirConstrutoAgrupamento(agrupamento: Agrupamento): string;
    traduzirConstrutoArgumentoReferenciaFuncao(argumentoReferenciaFuncao: ArgumentoReferenciaFuncao, argumentos: ConstrutoInterface[]): string;
    traduzirConstrutoAtribuicaoPorIndice(atribuicaoPorIndice: AtribuicaoPorIndice): string;
    traduzirConstrutoAtribuir(atribuir: Atribuir): string;
    traduzirConstrutoBinario(binario: Binario): string;
    traduzirConstrutoChamada(chamada: Chamada): string;
    traduzirConstrutoComentario(comentario: Comentario): string;
    traduzirConstrutoDefinirValor(definirValor: DefinirValor): string;
    traduzirConstrutoDicionario(dicionario: Dicionario): string;
    traduzirConstrutoLiteral(literal: Literal): string;
    traduzirConstrutoLogico(logico: Logico): string;
    traduzirConstrutoReferenciaFuncao(referenciaFuncao: ReferenciaFuncao, argumentos: ConstrutoInterface[]): string;
    traduzirConstrutoSeparador(separador: Separador): string;
    traduzirConstrutoSeTernario(seTernario: SeTernario): string;
    traduzirConstrutoUnario(unario: Unario): string;
    traduzirConstrutoVariavel(variavel: Variavel, argumentos: ConstrutoInterface[]): string;
    traduzirConstrutoVetor(vetor: Vetor): string;
    protected logicaTraducaoMetodoClasse(metodoClasse: FuncaoDeclaracao): string;
    traduzirDeclaracaoBloco(declaracaoBloco: Bloco): string;
    traduzirDeclaracaoClasse(declaracaoClasse: Classe): string;
    traduzirDeclaracaoConst(declaracaoConst: Const): string;
    traduzirDeclaracaoEnquanto(declaracaoEnquanto: Enquanto): string;
    traduzirDeclaracaoEscreva(declaracaoEscreva: Escreva): string;
    traduzirDeclaracaoExpressao(declaracaoExpressao: Expressao): string;
    traduzirDeclaracaoFuncao(declaracaoFuncao: FuncaoDeclaracao): string;
    traduzirDeclaracaoLeia(declaracaoLeia: Leia): string;
    /**
     * Como não existe declaração `para` com variáveis de controle em Python, o
     * que tentamos aqui é criar a mesma coisa usando `while()`.
     * @param declaracaoPara A declaração `Para`.
     * @returns Um bloco equivalente ao que seria um bloco `for` com variáveis de controle em Python.
     */
    traduzirDeclaracaoPara(declaracaoPara: Para): string;
    traduzirDeclaracaoParaCada(declaracaoParaCada: ParaCada): string;
    traduzirDeclaracaoRetorna(declaracaoRetorna: Retorna): string;
    traduzirDeclaracaoSe(declaracaoSe: Se, iniciarComIf?: boolean): string;
    traduzirDeclaracaoTente(declaracaoTente: Tente): string;
    traduzirDeclaracaoVar(declaracaoVar: Var): string;
    dicionarioConstrutos: {
        AcessoMetodo: any;
        AcessoMetodoOuPropriedade: any;
        AcessoPropriedade: any;
        AcessoIndiceVariavel: any;
        Agrupamento: any;
        ArgumentoReferenciaFuncao: any;
        AtribuicaoPorIndice: any;
        Atribuir: any;
        Binario: any;
        Chamada: any;
        ComentarioComoConstruto: any;
        DefinirValor: any;
        Dicionario: any;
        FuncaoConstruto: any;
        Literal: any;
        Logico: any;
        ReferenciaFuncao: any;
        Separador: any;
        SeTernario: any;
        Unario: any;
        Variavel: any;
        Vetor: any;
    };
    dicionarioDeclaracoes: {
        Bloco: any;
        Classe: any;
        Comentario: any;
        Const: any;
        Continua: () => string;
        Enquanto: any;
        Escreva: any;
        Expressao: any;
        FuncaoDeclaracao: any;
        Leia: any;
        Para: any;
        ParaCada: any;
        Retorna: any;
        Se: any;
        Sustar: () => string;
        Tente: any;
        Var: any;
    };
    traduzir(declaracoes: Declaracao[]): string;
}
//# sourceMappingURL=tradutor-python.d.ts.map