UNPKG

@designliquido/delegua

Version:

Linguagem de programação simples e moderna usando português estruturado.

702 lines 30.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FormatadorDelegua = void 0; const construtos_1 = require("../construtos"); const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua")); /** * O formatador de código Delégua. * Normalmente usado por IDEs, mas pode ser usado por linha de comando ou programaticamente. */ class FormatadorDelegua { constructor(quebraLinha, tamanhoIndentacao = 4) { this.quebraLinha = quebraLinha; this.tamanhoIndentacao = tamanhoIndentacao; this.indentacaoAtual = 0; this.codigoFormatado = ''; this.devePularLinha = true; this.deveIndentar = true; } visitarExpressaoArgumentoReferenciaFuncao(expressao) { this.codigoFormatado += expressao.simboloFuncao.lexema; } visitarExpressaoReferenciaFuncao(expressao) { this.codigoFormatado += expressao.simboloFuncao.lexema; } visitarExpressaoAcessoMetodo(expressao) { this.formatarDeclaracaoOuConstruto(expressao.objeto); this.codigoFormatado += '.'; this.codigoFormatado += expressao.nomeMetodo; } visitarExpressaoAcessoPropriedade(expressao) { this.formatarDeclaracaoOuConstruto(expressao.objeto); this.codigoFormatado += '.'; this.codigoFormatado += expressao.nomePropriedade; } visitarDeclaracaoComentario(declaracao) { if (declaracao.multilinha) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}/* `; for (let linhaConteudo of declaracao.conteudo) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)} ${linhaConteudo.replace(/\s+/g, ' ')}${this.quebraLinha}`; } this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)} */${this.quebraLinha}`; } else { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}// `; this.codigoFormatado += declaracao.conteudo.replace(/\s+/g, ' '); this.codigoFormatado += `${this.quebraLinha}`; } } visitarDeclaracaoTendoComo(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}tendo `; this.formatarDeclaracaoOuConstruto(declaracao.inicializacaoVariavel); this.codigoFormatado += ` como ${declaracao.simboloVariavel.lexema} `; this.formatarDeclaracaoOuConstruto(declaracao.corpo); } visitarDeclaracaoInicioAlgoritmo(declaracao) { throw new Error('Método não implementado.'); } visitarDeclaracaoCabecalhoPrograma(declaracao) { throw new Error('Método não implementado.'); } visitarExpressaoTupla(expressao) { return ''; } visitarDeclaracaoClasse(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}classe ${declaracao.simbolo.lexema} {${this.quebraLinha}`; this.indentacaoAtual += this.tamanhoIndentacao; for (let propriedade of declaracao.propriedades) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}${propriedade.nome.lexema}: ${propriedade.tipo || 'qualquer'}${this.quebraLinha}`; } this.codigoFormatado += `${this.quebraLinha}`; for (let metodo of declaracao.metodos) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}${metodo.simbolo.lexema}`; this.visitarExpressaoFuncaoConstruto(metodo.funcao); } this.indentacaoAtual -= this.tamanhoIndentacao; this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`; } visitarDeclaracaoConst(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}constante ${declaracao.simbolo.lexema}`; if (declaracao.inicializador) { this.codigoFormatado += ` = `; this.formatarDeclaracaoOuConstruto(declaracao.inicializador); } if (this.devePularLinha) { this.codigoFormatado += this.quebraLinha; } } visitarDeclaracaoConstMultiplo(declaracao) { // TODO: Até então o código nunca passa por aqui, porque o avaliador sintático // converte `ConstMultiplo` em várias declarações `const`. // Talvez mudar a avaliação sintática para não fazer mais isso. console.log(declaracao); } visitarExpressaoDeAtribuicao(expressao) { if (expressao.valor instanceof construtos_1.Binario && [ delegua_1.default.MAIS_IGUAL, delegua_1.default.MENOS_IGUAL, delegua_1.default.MULTIPLICACAO_IGUAL, delegua_1.default.DIVISAO_IGUAL, delegua_1.default.DIVISAO_INTEIRA_IGUAL, delegua_1.default.MODULO_IGUAL, ].includes(expressao.valor.operador.tipo)) { this.visitarExpressaoBinaria(expressao.valor); } else { this.codigoFormatado += `${this.formatarDeclaracaoOuConstruto(expressao.alvo)} = `; this.formatarDeclaracaoOuConstruto(expressao.valor); } this.codigoFormatado += `${this.quebraLinha}`; } visitarDeclaracaoDeExpressao(declaracao) { this.codigoFormatado += ' '.repeat(this.indentacaoAtual); this.formatarDeclaracaoOuConstruto(declaracao.expressao); } visitarDeclaracaoDefinicaoFuncao(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}função `; if (declaracao.simbolo) { this.codigoFormatado += `${declaracao.simbolo.lexema}`; } this.formatarDeclaracaoOuConstruto(declaracao.funcao); } visitarDeclaracaoEnquanto(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}enquanto `; this.formatarDeclaracaoOuConstruto(declaracao.condicao); this.formatarDeclaracaoOuConstruto(declaracao.corpo); } visitarDeclaracaoEscolha(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}escolha `; this.formatarDeclaracaoOuConstruto(declaracao.identificadorOuLiteral); this.codigoFormatado += ` {${this.quebraLinha}`; this.indentacaoAtual += this.tamanhoIndentacao; for (let caminho of declaracao.caminhos) { for (let declaracoes of caminho.condicoes) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}caso `; this.formatarDeclaracaoOuConstruto(declaracoes); this.codigoFormatado += ':'; this.codigoFormatado += this.quebraLinha; } for (let declaracoes of caminho.declaracoes) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}`; this.formatarDeclaracaoOuConstruto(declaracoes); } } for (let padrao of declaracao.caminhoPadrao.declaracoes) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}padrao:`; this.codigoFormatado += this.quebraLinha; this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}`; this.formatarDeclaracaoOuConstruto(padrao); } this.indentacaoAtual -= this.tamanhoIndentacao; this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`; } visitarDeclaracaoEscreva(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}escreva(`; for (let argumento of declaracao.argumentos) { this.formatarDeclaracaoOuConstruto(argumento); } this.codigoFormatado += `)${this.quebraLinha}`; } visitarDeclaracaoFazer(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}fazer {${this.quebraLinha}`; this.indentacaoAtual += this.tamanhoIndentacao; for (let declaracaoBloco of declaracao.caminhoFazer.declaracoes) { this.formatarDeclaracaoOuConstruto(declaracaoBloco); } this.indentacaoAtual -= this.tamanhoIndentacao; this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}} enquanto `; this.formatarDeclaracaoOuConstruto(declaracao.condicaoEnquanto); this.codigoFormatado += `${this.quebraLinha}`; } visitarDeclaracaoImportar(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}importar(`; this.formatarDeclaracaoOuConstruto(declaracao.caminho); this.codigoFormatado += `)`; } visitarDeclaracaoPara(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}para `; this.devePularLinha = false; if (declaracao.inicializador) { if (Array.isArray(declaracao.inicializador)) { this.deveIndentar = false; for (let declaracaoInicializador of declaracao.inicializador) { this.formatarDeclaracaoOuConstruto(declaracaoInicializador); } this.deveIndentar = true; } else { this.formatarDeclaracaoOuConstruto(declaracao.inicializador); } } this.codigoFormatado += `; `; this.formatarDeclaracaoOuConstruto(declaracao.condicao); this.codigoFormatado += `; `; this.formatarDeclaracaoOuConstruto(declaracao.incrementar); this.devePularLinha = true; this.codigoFormatado += ` {${this.quebraLinha}`; this.indentacaoAtual += this.tamanhoIndentacao; for (let declaracaoBloco of declaracao.corpo.declaracoes) { this.formatarDeclaracaoOuConstruto(declaracaoBloco); } this.indentacaoAtual -= this.tamanhoIndentacao; this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`; } visitarDeclaracaoParaCada(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}para cada ${declaracao.nomeVariavelIteracao} de `; this.formatarDeclaracaoOuConstruto(declaracao.vetor); this.visitarExpressaoBloco(declaracao.corpo); } visitarDeclaracaoSe(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}se `; this.formatarDeclaracaoOuConstruto(declaracao.condicao); this.codigoFormatado += ` {${this.quebraLinha}`; this.indentacaoAtual += this.tamanhoIndentacao; for (let declaracaoBloco of declaracao.caminhoEntao.declaracoes) { this.formatarDeclaracaoOuConstruto(declaracaoBloco); } this.indentacaoAtual -= this.tamanhoIndentacao; if (declaracao.caminhoSenao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}} senão `; this.formatarDeclaracaoOuConstruto(declaracao.caminhoSenao); } else { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`; } } visitarDeclaracaoTente(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}tente {${this.quebraLinha}`; this.indentacaoAtual += this.tamanhoIndentacao; for (let declaracaoBloco of declaracao.caminhoTente) { this.formatarDeclaracaoOuConstruto(declaracaoBloco); } this.indentacaoAtual -= this.tamanhoIndentacao; if (declaracao.caminhoPegue) { this.codigoFormatado += `} pegue {${this.quebraLinha}`; if (declaracao.caminhoPegue instanceof construtos_1.FuncaoConstruto) { // Se tem um parâmetro de erro. } else { // Se não tem um parâmetro de erro. this.indentacaoAtual += this.tamanhoIndentacao; for (let declaracaoBloco of declaracao.caminhoPegue) { this.formatarDeclaracaoOuConstruto(declaracaoBloco); } } } this.indentacaoAtual -= this.tamanhoIndentacao; if (declaracao.caminhoFinalmente) { this.codigoFormatado += `} finalmente {${this.quebraLinha}`; this.indentacaoAtual += this.tamanhoIndentacao; for (let declaracaoBloco of declaracao.caminhoFinalmente) { this.formatarDeclaracaoOuConstruto(declaracaoBloco); } } this.indentacaoAtual -= this.tamanhoIndentacao; this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`; } visitarDeclaracaoVar(declaracao) { if (this.deveIndentar) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}`; } this.codigoFormatado += `var ${declaracao.simbolo.lexema}`; if (declaracao.inicializador) { this.codigoFormatado += ` = `; this.formatarDeclaracaoOuConstruto(declaracao.inicializador); } if (this.devePularLinha) { this.codigoFormatado += this.quebraLinha; } } visitarDeclaracaoVarMultiplo(declaracao) { // TODO: Até então o código nunca passa por aqui, porque o avaliador sintático // converte `VarMultiplo` em várias declarações `var`. // Talvez mudar a avaliação sintática para não fazer mais isso. console.log(declaracao); } visitarExpressaoAcessoIndiceVariavel(expressao) { this.formatarDeclaracaoOuConstruto(expressao.entidadeChamada); this.codigoFormatado += `[`; this.formatarDeclaracaoOuConstruto(expressao.indice); this.codigoFormatado += `]`; } visitarExpressaoAcessoMetodoOuPropriedade(expressao) { this.formatarDeclaracaoOuConstruto(expressao.objeto); this.codigoFormatado += '.'; this.codigoFormatado += expressao.simbolo.lexema; } visitarExpressaoAgrupamento(expressao) { this.codigoFormatado += '('; this.formatarDeclaracaoOuConstruto(expressao.expressao); this.codigoFormatado += ')'; } visitarExpressaoAtribuicaoPorIndice(expressao) { this.formatarDeclaracaoOuConstruto(expressao.objeto); this.codigoFormatado += '['; this.formatarDeclaracaoOuConstruto(expressao.indice); this.codigoFormatado += '] = '; this.formatarDeclaracaoOuConstruto(expressao.valor); this.codigoFormatado += this.quebraLinha; } visitarExpressaoAtribuicaoPorIndicesMatriz(expressao) { // Implementar somente para VisuAlg que tem atribuição diferente de Delégua - matriz[1, 2] = 1 throw new Error('Método não implementado.'); } visitarExpressaoAcessoElementoMatriz(expressao) { // Implementar somente para VisuAlg que tem acesso ao elemento da matriz diferente de Delégua - var valor = matriz[1, 2] throw new Error('Método não implementado.'); } visitarExpressaoBinaria(expressao) { this.formatarDeclaracaoOuConstruto(expressao.esquerda); switch (expressao.operador.tipo) { case delegua_1.default.ADICAO: this.codigoFormatado += ` + `; break; case delegua_1.default.DIFERENTE: this.codigoFormatado += ` != `; break; case delegua_1.default.DIVISAO: this.codigoFormatado += ` / `; break; case delegua_1.default.DIVISAO_IGUAL: this.codigoFormatado += ` /= `; break; case delegua_1.default.DIVISAO_INTEIRA: this.codigoFormatado += ` \\ `; break; case delegua_1.default.DIVISAO_INTEIRA_IGUAL: this.codigoFormatado += ` \\= `; break; case delegua_1.default.EXPONENCIACAO: this.codigoFormatado += ` ** `; break; case delegua_1.default.IGUAL_IGUAL: this.codigoFormatado += ` == `; break; case delegua_1.default.MAIOR: this.codigoFormatado += ` > `; break; case delegua_1.default.MAIOR_IGUAL: this.codigoFormatado += ` >= `; break; case delegua_1.default.MAIS_IGUAL: this.codigoFormatado += ` += `; break; case delegua_1.default.MENOR: this.codigoFormatado += ` < `; break; case delegua_1.default.MENOR_IGUAL: this.codigoFormatado += ` <= `; break; case delegua_1.default.MENOS_IGUAL: this.codigoFormatado += ` -= `; break; case delegua_1.default.MODULO: this.codigoFormatado += ` % `; break; case delegua_1.default.MODULO_IGUAL: this.codigoFormatado += ` %= `; break; case delegua_1.default.MULTIPLICACAO: this.codigoFormatado += ` * `; break; case delegua_1.default.MULTIPLICACAO_IGUAL: this.codigoFormatado += ` * `; break; case delegua_1.default.SUBTRACAO: this.codigoFormatado += ` - `; break; } this.formatarDeclaracaoOuConstruto(expressao.direita); } formatarBlocoOuVetorDeclaracoes(declaracoes) { this.codigoFormatado += `{${this.quebraLinha}`; this.indentacaoAtual += this.tamanhoIndentacao; for (let declaracaoBloco of declaracoes) { this.formatarDeclaracaoOuConstruto(declaracaoBloco); } this.indentacaoAtual -= this.tamanhoIndentacao; this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`; } visitarExpressaoBloco(declaracao) { this.formatarBlocoOuVetorDeclaracoes(declaracao.declaracoes); } visitarExpressaoContinua(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}continua${this.quebraLinha}`; } visitarExpressaoDeChamada(expressao) { this.formatarDeclaracaoOuConstruto(expressao.entidadeChamada); this.codigoFormatado += '('; for (let argumento of expressao.argumentos) { this.formatarDeclaracaoOuConstruto(argumento); this.codigoFormatado += ', '; } if (expressao.argumentos.length > 0) { this.codigoFormatado = this.codigoFormatado.slice(0, -2); } this.codigoFormatado += ')'; } visitarDeclaracaoAleatorio(declaracao) { throw new Error('Método não implementado.'); } visitarExpressaoDefinirValor(expressao) { this.formatarDeclaracaoOuConstruto(expressao.objeto); this.codigoFormatado += `.${expressao.nome.lexema} = `; this.formatarDeclaracaoOuConstruto(expressao.valor); this.codigoFormatado += `${this.quebraLinha}`; } visitarExpressaoDeVariavel(expressao) { this.codigoFormatado += expressao.simbolo.lexema; } visitarExpressaoDicionario(expressao) { this.codigoFormatado += `{`; for (let i = 0; i < expressao.chaves.length; i++) { this.formatarDeclaracaoOuConstruto(expressao.chaves[i]); this.codigoFormatado += `: `; this.formatarDeclaracaoOuConstruto(expressao.valores[i]); this.codigoFormatado += `, `; } if (expressao.chaves.length > 0) { this.codigoFormatado = this.codigoFormatado.slice(0, -2); } this.codigoFormatado += `}`; } visitarExpressaoExpressaoRegular(expressao) { this.codigoFormatado += `||${expressao.valor}||`; } visitarDeclaracaoEscrevaMesmaLinha(declaracao) { throw new Error('Método não implementado.'); } visitarExpressaoFalhar(expressao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}falhar`; if (expressao.explicacao) { this.codigoFormatado += ` `; this.formatarDeclaracaoOuConstruto(expressao.explicacao); } this.codigoFormatado += `${this.quebraLinha}`; } visitarExpressaoFimPara(declaracao) { throw new Error('Método não implementado.'); } visitarExpressaoFormatacaoEscrita(declaracao) { throw new Error('Método não implementado.'); } visitarExpressaoFuncaoConstruto(expressao) { this.codigoFormatado += `(`; for (let argumento of expressao.parametros) { this.codigoFormatado += `${argumento.nome.lexema}: ${argumento.tipoDado || 'qualquer'}, `; } if (expressao.parametros.length > 0) { this.codigoFormatado = this.codigoFormatado.slice(0, -2); } this.codigoFormatado += `) `; this.formatarBlocoOuVetorDeclaracoes(expressao.corpo); } visitarExpressaoIsto(expressao) { this.codigoFormatado += `isto`; } visitarExpressaoLeia(expressao) { this.codigoFormatado += `leia(`; for (let argumento of expressao.argumentos) { this.formatarDeclaracaoOuConstruto(argumento); this.codigoFormatado += `, `; } if (expressao.argumentos.length > 0) { this.codigoFormatado = this.codigoFormatado.slice(0, -2); } this.codigoFormatado += `)`; } visitarExpressaoLiteral(expressao) { if (typeof expressao.valor === 'string') { this.codigoFormatado += `'${expressao.valor}'`; return; } if (['logico', 'lógico'].includes(expressao.tipo)) { this.codigoFormatado += `${expressao.valor ? 'verdadeiro' : 'falso'}`; return; } this.codigoFormatado += expressao.valor; } visitarExpressaoLogica(expressao) { this.formatarDeclaracaoOuConstruto(expressao.esquerda); switch (expressao.operador.tipo) { case delegua_1.default.E: this.codigoFormatado += ` e `; break; case delegua_1.default.EM: this.codigoFormatado += ` em `; break; case delegua_1.default.OU: this.codigoFormatado += ` ou `; break; } this.formatarDeclaracaoOuConstruto(expressao.direita); } visitarExpressaoRetornar(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}retorna`; if (declaracao.valor) { this.codigoFormatado += ` `; if (declaracao.valor.constructor.name === 'FuncaoConstruto') { this.codigoFormatado += `função`; } this.formatarDeclaracaoOuConstruto(declaracao.valor); } this.codigoFormatado += `${this.quebraLinha}`; } visitarExpressaoSuper(expressao) { this.codigoFormatado += `super`; } visitarExpressaoSustar(declaracao) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}sustar${this.quebraLinha}`; } visitarExpressaoTipoDe(expressao) { this.codigoFormatado += `tipo de `; this.formatarDeclaracaoOuConstruto(expressao.valor); } visitarExpressaoUnaria(expressao) { let operador; switch (expressao.operador.tipo) { case delegua_1.default.INCREMENTAR: operador = `++`; break; case delegua_1.default.DECREMENTAR: operador = `--`; break; } switch (expressao.incidenciaOperador) { case 'ANTES': this.codigoFormatado += operador; this.formatarDeclaracaoOuConstruto(expressao.operando); break; case 'DEPOIS': this.formatarDeclaracaoOuConstruto(expressao.operando); this.codigoFormatado += operador; break; } if (this.devePularLinha) { this.codigoFormatado += this.quebraLinha; } } visitarExpressaoVetor(expressao) { this.codigoFormatado += '['; for (let valor of expressao.valores) { this.formatarDeclaracaoOuConstruto(valor); this.codigoFormatado += ', '; } if (expressao.valores.length > 0) { this.codigoFormatado = this.codigoFormatado.slice(0, -2); } this.codigoFormatado += ']'; } formatarDeclaracaoOuConstruto(declaracaoOuConstruto) { switch (declaracaoOuConstruto.constructor.name) { case 'AcessoIndiceVariavel': this.visitarExpressaoAcessoIndiceVariavel(declaracaoOuConstruto); break; case 'AcessoMetodoOuPropriedade': this.visitarExpressaoAcessoMetodoOuPropriedade(declaracaoOuConstruto); break; case 'Agrupamento': this.visitarExpressaoAgrupamento(declaracaoOuConstruto); break; case 'ArgumentoReferenciaFuncao': this.visitarExpressaoArgumentoReferenciaFuncao(declaracaoOuConstruto); break; case 'AtribuicaoPorIndice': this.visitarExpressaoAtribuicaoPorIndice(declaracaoOuConstruto); break; case 'Atribuir': this.visitarExpressaoDeAtribuicao(declaracaoOuConstruto); break; case 'Binario': this.visitarExpressaoBinaria(declaracaoOuConstruto); break; case 'Bloco': this.visitarExpressaoBloco(declaracaoOuConstruto); break; case 'Chamada': this.visitarExpressaoDeChamada(declaracaoOuConstruto); break; case 'Classe': this.visitarDeclaracaoClasse(declaracaoOuConstruto); break; case 'Continua': this.visitarExpressaoContinua(declaracaoOuConstruto); break; case 'DefinirValor': this.visitarExpressaoDefinirValor(declaracaoOuConstruto); break; case 'Dicionario': this.visitarExpressaoDicionario(declaracaoOuConstruto); break; case 'Escolha': this.visitarDeclaracaoEscolha(declaracaoOuConstruto); break; case 'Enquanto': this.visitarDeclaracaoEnquanto(declaracaoOuConstruto); break; case 'Escreva': this.visitarDeclaracaoEscreva(declaracaoOuConstruto); break; case 'Expressao': this.visitarDeclaracaoDeExpressao(declaracaoOuConstruto); break; case 'ExpressaoRegular': this.visitarExpressaoExpressaoRegular(declaracaoOuConstruto); break; case 'Falhar': this.visitarExpressaoFalhar(declaracaoOuConstruto); break; case 'Fazer': this.visitarDeclaracaoFazer(declaracaoOuConstruto); break; case 'FuncaoConstruto': this.visitarExpressaoFuncaoConstruto(declaracaoOuConstruto); break; case 'FuncaoDeclaracao': this.visitarDeclaracaoDefinicaoFuncao(declaracaoOuConstruto); break; case 'Importar': this.visitarDeclaracaoImportar(declaracaoOuConstruto); break; case 'Isto': this.visitarExpressaoIsto(declaracaoOuConstruto); break; case 'Leia': this.visitarExpressaoLeia(declaracaoOuConstruto); break; case 'Literal': this.visitarExpressaoLiteral(declaracaoOuConstruto); break; case 'Logico': this.visitarExpressaoLogica(declaracaoOuConstruto); break; case 'Para': this.visitarDeclaracaoPara(declaracaoOuConstruto); break; case 'ParaCada': this.visitarDeclaracaoParaCada(declaracaoOuConstruto); break; case 'ReferenciaFuncao': this.visitarExpressaoReferenciaFuncao(declaracaoOuConstruto); break; case 'Retorna': this.visitarExpressaoRetornar(declaracaoOuConstruto); break; case 'Se': this.visitarDeclaracaoSe(declaracaoOuConstruto); break; case 'Super': this.visitarExpressaoSuper(declaracaoOuConstruto); break; case 'Sustar': this.visitarExpressaoSustar(declaracaoOuConstruto); break; case 'TendoComo': this.visitarDeclaracaoTendoComo(declaracaoOuConstruto); break; case 'Tente': this.visitarDeclaracaoTente(declaracaoOuConstruto); break; case 'TipoDe': this.visitarExpressaoTipoDe(declaracaoOuConstruto); break; case 'Unario': this.visitarExpressaoUnaria(declaracaoOuConstruto); break; case 'Const': this.visitarDeclaracaoConst(declaracaoOuConstruto); break; case 'Var': this.visitarDeclaracaoVar(declaracaoOuConstruto); break; case 'Variavel': this.visitarExpressaoDeVariavel(declaracaoOuConstruto); break; case 'Vetor': this.visitarExpressaoVetor(declaracaoOuConstruto); break; default: console.log(declaracaoOuConstruto.constructor.name); break; } } /** * Devolve código formatado de acordo com os símbolos encontrados. * @param {Declaracao[]} declaracoes Um vetor de declarações. * @returns Código Delégua formatado. */ formatar(declaracoes) { this.codigoFormatado = ''; this.indentacaoAtual = 0; for (let declaracao of declaracoes) { this.formatarDeclaracaoOuConstruto(declaracao); } return this.codigoFormatado; } } exports.FormatadorDelegua = FormatadorDelegua; //# sourceMappingURL=formatador-delegua.js.map