import { DeleguaFuncao } from '@designliquido/delegua/interpretador/estruturas';
import { FuncaoConstruto, Construto, Variavel, Binario, Literal, Chamada, AcessoMetodoOuPropriedade, AcessoIndiceVariavel } from '@designliquido/delegua/construtos';
import { ParametroInterface, SimboloInterface } from '@designliquido/delegua/interfaces';
import { Expressao, Retorna, Declaracao, Se, Bloco } from '@designliquido/delegua/declaracoes';
/**
 * O gerador de expressões é uma classe facilitadora para a criação de
 * objetos que normalmente são criados pelo Avaliador Sintático de
 * Delégua.
 */
export declare class GeradorExpressoes {
    gerarAcessoIndiceVariavel(variavel: string, indice: number | string): AcessoIndiceVariavel;
    gerarAcessoMetodoOuPropriedade(objeto: Variavel, metodoOuPropriedade: string): AcessoMetodoOuPropriedade;
    gerarBlocoEscopo(declaracoes: Declaracao[]): Bloco;
    gerarChamada(entidadeChamada: AcessoMetodoOuPropriedade, argumentos?: any[]): Chamada;
    gerarConstrutoBinario(ladoEsquerdo: Construto, operador: SimboloInterface, ladoDireito: Construto): Binario<string>;
    gerarConstrutoFuncao(parametros: ParametroInterface[], corpo: Declaracao[]): FuncaoConstruto;
    gerarDeclaracaoSe(condicao: Construto, caminhoEntao: Declaracao, caminhoSenao?: Declaracao): Se;
    gerarLiteral(valor: any): Literal;
    gerarMetodo(nomeMetodo: string, declaracao: FuncaoConstruto): DeleguaFuncao;
    gerarOperadorComparacao(tipo: 'maior' | 'menor' | 'maiorOuIgual' | 'menorOuIgual' | 'igual' | 'diferente'): SimboloInterface;
    gerarParametro(nome: string, tipo: string, abrangencia?: 'padrao' | 'multiplo'): ParametroInterface;
    gerarReferenciaVariavel(nomeVariavel: string): Variavel<string>;
    /**
     * Gera uma atribuição de valor em uma propriedade de classe.
     * Por exemplo, `isto.a = 1` seria algo como
     * `gerarAtribuicaoValorEmPropriedadeClasse('a', 1)`.
     */
    gerarAtribuicaoValorEmPropriedadeClasse(nomePropriedade: string, valor: Construto): Expressao;
    gerarRetornoDeFuncao(nomeVariavel: string): Retorna;
}
