import { AcessoElementoMatriz, AcessoIndiceVariavel, AcessoIntervaloVariavel, AcessoMetodo, AcessoMetodoOuPropriedade, AcessoPropriedade, Agrupamento, ArgumentoReferenciaFuncao, AtribuicaoPorIndice, AtribuicaoPorIndicesMatriz, Atribuir, Binario, Chamada, ComentarioComoConstruto, Constante, DefinirValor, Dicionario, ExpressaoRegular, FimPara, FormatacaoEscrita, FuncaoConstruto, Isto, Leia, Literal, Logico, ReferenciaFuncao, Separador, Super, TipoDe, Tupla, TuplaN, Unario, Variavel, Vetor } from '../construtos';
import { Bloco, CabecalhoPrograma, Classe, Comentario, Const, ConstMultiplo, Continua, Declaracao, Enquanto, Escolha, Escreva, EscrevaMesmaLinha, Expressao, Falhar, Fazer, FuncaoDeclaracao, InicioAlgoritmo, Para, ParaCada, Retorna, Se, Sustar, TendoComo, Tente, TextoDocumentacao, Var, VarMultiplo } from '../declaracoes';
import { CaminhoEscolha, TradutorInterface, VisitanteComumInterface } from '../interfaces';
import { ArestaFluxograma, SubgrafoClasse, SubgrafoFuncao, VerticeFluxograma } from './mermaid';
/**
 * [MermaidJs](https://mermaid.js.org/) é uma especificação que nos permite
 * criar fluxogramas através de uma notação por texto.
 *
 * Este tradutor converte estruturas da avaliação sintática em um fluxograma
 * compatível com o MermaidJs.
 *
 * Diferentemente de outros tradutores, este não trabalha diretamente com `string`s.
 * Construtos sim devolvem `string`s, mas declarações devolvem um vetor de
 * `VerticeFluxograma`.
 * @see VerticeFluxograma
 */
export declare class TradutorMermaidJs implements TradutorInterface<Declaracao>, VisitanteComumInterface {
    anteriores: ArestaFluxograma[];
    vertices: VerticeFluxograma[];
    ultimaDicaVertice: string | undefined;
    declaracoesFuncoes: {
        [nome: string]: SubgrafoFuncao;
    };
    declaracoesClasses: {
        [nome: string]: SubgrafoClasse;
    };
    indentacaoAtual: number;
    visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise<any> | void;
    visitarDeclaracaoClasse(declaracao: Classe): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoComentario(declaracao: Comentario): Promise<string>;
    visitarDeclaracaoConst(declaracao: Const): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoConstMultiplo(declaracao: ConstMultiplo): Promise<any> | void;
    visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoEscolha(declaracao: Escolha): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoEscreva(declaracao: Escreva): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha): Promise<any> | void;
    visitarDeclaracaoFazer(declaracao: Fazer): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise<any> | void;
    visitarDeclaracaoParaCada(declaracao: ParaCada): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoPara(declaracao: Para): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoSe(declaracao: Se): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoTendoComo(declaracao: TendoComo): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoTente(declaracao: Tente): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoTextoDocumentacao(declaracao: TextoDocumentacao): Promise<any> | void;
    visitarDeclaracaoVar(declaracao: Var): Promise<VerticeFluxograma[]>;
    visitarDeclaracaoVarMultiplo(declaracao: VarMultiplo): Promise<any> | void;
    visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<string>;
    visitarExpressaoAcessoIndiceVariavel(expressao: AcessoIndiceVariavel): Promise<string>;
    visitarExpressaoAcessoIntervaloVariavel(expressao: AcessoIntervaloVariavel): Promise<any> | void;
    visitarExpressaoAcessoElementoMatriz(expressao: AcessoElementoMatriz): Promise<any> | void;
    visitarExpressaoAcessoMetodo(expressao: AcessoMetodo): Promise<string>;
    visitarExpressaoAcessoMetodoOuPropriedade(expressao: AcessoMetodoOuPropriedade): Promise<string>;
    visitarExpressaoAcessoPropriedade(expressao: AcessoPropriedade): Promise<string>;
    visitarExpressaoAgrupamento(expressao: Agrupamento): Promise<string>;
    visitarExpressaoArgumentoReferenciaFuncao(expressao: ArgumentoReferenciaFuncao): Promise<string>;
    visitarExpressaoAtribuicaoPorIndice(expressao: AtribuicaoPorIndice): Promise<string>;
    visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: AtribuicaoPorIndicesMatriz): Promise<any> | void;
    visitarExpressaoBinaria(expressao: Binario): Promise<string>;
    visitarExpressaoBloco(bloco: Bloco): Promise<VerticeFluxograma[]>;
    visitarExpressaoComentario(expressao: ComentarioComoConstruto): Promise<string>;
    visitarExpressaoContinua(declaracao?: Continua): Promise<VerticeFluxograma[]>;
    visitarExpressaoDeChamada(expressao: Chamada): Promise<string>;
    visitarExpressaoDefinirValor(expressao: DefinirValor): Promise<string>;
    visitarExpressaoFuncaoConstruto(expressao: FuncaoConstruto): Promise<string>;
    visitarExpressaoDeVariavel(expressao: Variavel | Constante): Promise<string>;
    visitarExpressaoDicionario(expressao: Dicionario): Promise<string>;
    visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise<string>;
    visitarExpressaoFalhar(expressao: Falhar): Promise<VerticeFluxograma[]>;
    visitarExpressaoFimPara(declaracao: FimPara): Promise<any> | void;
    visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita): Promise<string>;
    visitarExpressaoIsto(expressao: Isto): Promise<string>;
    visitarExpressaoLeia(expressao: Leia): Promise<string>;
    visitarExpressaoLiteral(expressao: Literal): Promise<string>;
    visitarExpressaoLogica(expressao: Logico): Promise<string>;
    visitarExpressaoReferenciaFuncao(expressao: ReferenciaFuncao): Promise<string>;
    visitarExpressaoRetornar(expressao: Retorna): Promise<VerticeFluxograma[]>;
    visitarExpressaoSeparador(expressao: Separador): Promise<string>;
    visitarExpressaoSuper(expressao: Super): Promise<string>;
    visitarExpressaoSustar(declaracao?: Sustar): Promise<VerticeFluxograma[]>;
    visitarExpressaoTupla(expressao: Tupla): Promise<string>;
    visitarExpressaoTuplaN(expressao: TuplaN): Promise<string>;
    visitarExpressaoTipoDe(expressao: TipoDe): Promise<any> | void;
    visitarExpressaoUnaria(expressao: Unario): Promise<string>;
    visitarExpressaoVetor(expressao: Vetor): Promise<string>;
    /**
     * Traduz uma declaração de Expressao que contém uma chamada de função,
     * criando os vértices necessários para conectar ao subgrafo da função.
     */
    traduzirChamadaFuncao(declaracaoExpressao: Expressao, chamada: Chamada): Promise<VerticeFluxograma[]>;
    protected logicaComumConexaoArestas(aresta: ArestaFluxograma): VerticeFluxograma[];
    protected logicaComumCaminhoEscolha(declaracaoEscolha: Escolha, caminhoEscolha: CaminhoEscolha, linha: number, textoIdentificadorOuLiteral: string, caminhoPadrao: boolean): Promise<{
        caminho: ArestaFluxograma;
        declaracoesCaminho: VerticeFluxograma[];
    }>;
    protected logicaComumTraducaoVarEConst(declaracaoVarOuConst: Var | Const, textoInicial: string): Promise<string>;
    /**
     * Ponto de entrada para a tradução de declarações em um fluxograma
     * no formato MermaidJs.
     * @param {Declaracao[]} declaracoes As declarações a serem traduzidas.
     * @returns {string} Texto no formato MermaidJs representando o fluxograma.
     */
    traduzir(declaracoes: Declaracao[]): Promise<string>;
}
//# sourceMappingURL=tradutor-mermaidjs.d.ts.map