diff --git a/fontes/analisador-semantico/analisador-semantico.ts b/fontes/analisador-semantico/analisador-semantico.ts index d47129aa..05482cb1 100644 --- a/fontes/analisador-semantico/analisador-semantico.ts +++ b/fontes/analisador-semantico/analisador-semantico.ts @@ -28,6 +28,7 @@ import { Var, VarMultiplo, } from '../declaracoes'; +import { InicioAlgoritmo } from '../declaracoes/inicio-algoritmo'; import { SimboloInterface } from '../interfaces'; import { AnalisadorSemanticoInterface } from '../interfaces/analisador-semantico-interface'; import { DiagnosticoAnalisadorSemantico, DiagnosticoSeveridade } from '../interfaces/erros'; @@ -77,13 +78,19 @@ export class AnalisadorSemantico implements AnalisadorSemanticoInterface { visitarExpressaoAcessoElementoMatriz(expressao: any) { return Promise.resolve(); } + visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: any): Promise { return Promise.resolve(); } + visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise { return Promise.resolve(); } + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise { + return Promise.resolve(); + } + erro(simbolo: SimboloInterface, mensagem: string): void { this.diagnosticos.push({ simbolo: simbolo, diff --git a/fontes/analisador-semantico/dialetos/analisador-semantico-birl.ts b/fontes/analisador-semantico/dialetos/analisador-semantico-birl.ts index b309a125..13d74976 100644 --- a/fontes/analisador-semantico/dialetos/analisador-semantico-birl.ts +++ b/fontes/analisador-semantico/dialetos/analisador-semantico-birl.ts @@ -27,6 +27,7 @@ import { Var, VarMultiplo, } from '../../declaracoes'; +import { InicioAlgoritmo } from '../../declaracoes/inicio-algoritmo'; import { AnalisadorSemanticoInterface } from '../../interfaces/analisador-semantico-interface'; import { DiagnosticoAnalisadorSemantico, DiagnosticoSeveridade } from '../../interfaces/erros'; import { RetornoAnalisadorSemantico } from '../../interfaces/retornos/retorno-analisador-semantico'; @@ -62,6 +63,10 @@ export class AnalisadorSemanticoBirl implements AnalisadorSemanticoInterface { this.atual = 0; this.diagnosticos = []; } + + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise { + return Promise.resolve(); + } visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { return Promise.resolve(); diff --git a/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.ts b/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.ts index e2dfbb28..17b393ed 100644 --- a/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.ts +++ b/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.ts @@ -28,6 +28,7 @@ import { Var, VarMultiplo, } from '../../declaracoes'; +import { InicioAlgoritmo } from '../../declaracoes/inicio-algoritmo'; import { SimboloInterface } from '../../interfaces'; import { AnalisadorSemanticoInterface } from '../../interfaces/analisador-semantico-interface'; import { DiagnosticoAnalisadorSemantico, DiagnosticoSeveridade } from '../../interfaces/erros'; @@ -51,6 +52,10 @@ export class AnalisadorSemanticoMapler implements AnalisadorSemanticoInterface { this.atual = 0; this.diagnosticos = []; } + + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise { + return Promise.resolve(); + } visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { return Promise.resolve(); diff --git a/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.ts b/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.ts index 73d7e50d..4c2191e3 100644 --- a/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.ts +++ b/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.ts @@ -27,6 +27,7 @@ import { Var, VarMultiplo } from "../../declaracoes"; +import { InicioAlgoritmo } from "../../declaracoes/inicio-algoritmo"; import { SimboloInterface } from "../../interfaces"; import { AnalisadorSemanticoInterface } from "../../interfaces/analisador-semantico-interface"; import { DiagnosticoAnalisadorSemantico, DiagnosticoSeveridade } from "../../interfaces/erros"; @@ -51,6 +52,10 @@ export class AnalisadorSemanticoVisuAlg implements AnalisadorSemanticoInterface this.atual = 0; this.diagnosticos = []; } + + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise { + return Promise.resolve(); + } visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { return Promise.resolve(); diff --git a/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.ts b/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.ts index c0a8107e..9394cc55 100644 --- a/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.ts +++ b/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.ts @@ -44,6 +44,7 @@ import tiposDeSimbolos from '../../../tipos-de-simbolos/visualg'; import { ParametroVisuAlg } from './parametro-visualg'; import { TiposDadosInterface } from '../../../interfaces/tipos-dados-interface'; import { ErroAvaliadorSintatico } from '../../erro-avaliador-sintatico'; +import { InicioAlgoritmo } from '../../../declaracoes/inicio-algoritmo'; export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase { blocoPrincipalIniciado: boolean; @@ -276,11 +277,12 @@ export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase { return inicializacoes; } - private validarSegmentoInicio(algoritmoOuFuncao: string): void { - this.consumir( + private validarSegmentoInicio(algoritmoOuFuncao: string): SimboloInterface { + const simboloInicio = this.consumir( tiposDeSimbolos.INICIO, `Esperada expressão 'inicio' para marcar escopo de ${algoritmoOuFuncao}.` ); + return simboloInicio; } estaNoFinal(): boolean { @@ -1182,8 +1184,8 @@ export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase { case tiposDeSimbolos.FUNCAO: return this.funcao('funcao'); case tiposDeSimbolos.INICIO: - this.validarSegmentoInicio('algoritmo'); - return null; + const simboloInicio = this.validarSegmentoInicio('algoritmo'); + return new InicioAlgoritmo(simboloInicio.linha, simboloInicio.hashArquivo); case tiposDeSimbolos.INTERROMPA: return this.declaracaoInterrompa(); case tiposDeSimbolos.LEIA: diff --git a/fontes/declaracoes/index.ts b/fontes/declaracoes/index.ts index a4c062c3..b92510d8 100644 --- a/fontes/declaracoes/index.ts +++ b/fontes/declaracoes/index.ts @@ -14,6 +14,7 @@ export * from './falhar'; export * from './fazer'; export * from './funcao'; export * from './importar'; +export * from './inicio-algoritmo'; export * from './leia'; export * from './leia-multiplo'; export * from './para'; diff --git a/fontes/declaracoes/inicio-algoritmo.ts b/fontes/declaracoes/inicio-algoritmo.ts new file mode 100644 index 00000000..d620d333 --- /dev/null +++ b/fontes/declaracoes/inicio-algoritmo.ts @@ -0,0 +1,13 @@ +import { VisitanteComumInterface } from "../interfaces"; +import { Declaracao } from "./declaracao"; + +export class InicioAlgoritmo extends Declaracao { + + constructor(linha: number, hashArquivo: number) { + super(linha, hashArquivo); + } + + async aceitar(visitante: VisitanteComumInterface): Promise { + return visitante.visitarDeclaracaoInicioAlgoritmo(this); + } +} diff --git a/fontes/formatadores/formatador-delegua.ts b/fontes/formatadores/formatador-delegua.ts index 56867ca1..d9b49777 100644 --- a/fontes/formatadores/formatador-delegua.ts +++ b/fontes/formatadores/formatador-delegua.ts @@ -52,6 +52,7 @@ import { Aleatorio, CabecalhoPrograma, } from '../declaracoes'; +import { InicioAlgoritmo } from '../declaracoes/inicio-algoritmo'; import { VisitanteComumInterface } from '../interfaces'; import tiposDeSimbolos from '../tipos-de-simbolos/delegua'; @@ -78,6 +79,10 @@ export class FormatadorDelegua implements VisitanteComumInterface { this.deveIndentar = true; } + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise { + throw new Error('Método não implementado.'); + } + visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { throw new Error('Método não implementado.'); } diff --git a/fontes/formatadores/formatador-portugol-studio.ts b/fontes/formatadores/formatador-portugol-studio.ts index 1121a3b8..b54b77dc 100644 --- a/fontes/formatadores/formatador-portugol-studio.ts +++ b/fontes/formatadores/formatador-portugol-studio.ts @@ -1,5 +1,6 @@ import { AcessoIndiceVariavel, AcessoMetodoOuPropriedade, Agrupamento, AtribuicaoPorIndice, Atribuir, Binario, Chamada, Construto, DefinirValor, Dicionario, ExpressaoRegular, FimPara, FormatacaoEscrita, FuncaoConstruto, Isto, Literal, Logico, Super, TipoDe, Tupla, Unario, Variavel, Vetor } from "../construtos"; import { Classe, Const, ConstMultiplo, Expressao, FuncaoDeclaracao, Enquanto, Escolha, Escreva, Fazer, Importar, Para, ParaCada, Se, Tente, Var, VarMultiplo, Bloco, Continua, EscrevaMesmaLinha, Leia, LeiaMultiplo, Retorna, Sustar, Declaracao, Falhar, Aleatorio, CabecalhoPrograma } from "../declaracoes"; +import { InicioAlgoritmo } from "../declaracoes/inicio-algoritmo"; import { VisitanteComumInterface } from "../interfaces"; import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from "../quebras"; @@ -21,6 +22,10 @@ export class FormatadorPortugolStudio implements VisitanteComumInterface { this.deveIndentar = true; } + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise { + throw new Error("Método não implementado."); + } + visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { throw new Error("Método não implementado."); } diff --git a/fontes/formatadores/formatador-visualg.ts b/fontes/formatadores/formatador-visualg.ts index 2d553dde..0ac1dbae 100644 --- a/fontes/formatadores/formatador-visualg.ts +++ b/fontes/formatadores/formatador-visualg.ts @@ -52,6 +52,7 @@ import { Falhar, CabecalhoPrograma, } from '../declaracoes'; +import { InicioAlgoritmo } from '../declaracoes/inicio-algoritmo'; import { SimboloInterface, VisitanteComumInterface } from '../interfaces'; import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from '../quebras'; import tiposDeSimbolos from '../tipos-de-simbolos/visualg'; @@ -64,7 +65,6 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { devePularLinha: boolean; deveIndentar: boolean; contadorDeclaracaoVar: number; - deveAdicionarInicio: boolean; retornoFuncaoAtual: SimboloInterface; constructor(quebraLinha: string, tamanhoIndentacao: number = 4) { @@ -76,10 +76,13 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.devePularLinha = false; this.deveIndentar = true; this.contadorDeclaracaoVar = 0; - this.deveAdicionarInicio = true; this.retornoFuncaoAtual = undefined; } + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): any { + this.codigoFormatado += `inicio${this.quebraLinha}`; + } + visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): any { this.codigoFormatado += `algoritmo "${declaracao.nomeProgramaAlgoritmo}"${this.quebraLinha}`; } @@ -93,15 +96,19 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { } this.formatarDeclaracaoOuConstruto(declaracao.corpo); } + visitarDeclaracaoClasse(declaracao: Classe) { throw new Error('Método não implementado.'); } + visitarDeclaracaoConst(declaracao: Const): any { throw new Error('Método não implementado.'); } + visitarDeclaracaoConstMultiplo(declaracao: ConstMultiplo): any { throw new Error('Método não implementado.'); } + visitarExpressaoDeAtribuicao(expressao: Atribuir) { this.codigoFormatado += `${expressao.simbolo.lexema} <- `; this.formatarDeclaracaoOuConstruto(expressao.valor); @@ -110,10 +117,12 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.codigoFormatado += `${this.quebraLinha}`; } } + visitarDeclaracaoDeExpressao(declaracao: Expressao) { this.codigoFormatado += ' '.repeat(this.indentacaoAtual); this.formatarDeclaracaoOuConstruto(declaracao.expressao); } + visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao) { this.retornoFuncaoAtual = declaracao.tipoRetorno; this.contadorDeclaracaoVar = 2; @@ -148,6 +157,7 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.formatarDeclaracaoOuConstruto(declaracao.funcao); this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}fimfuncao${this.quebraLinha}`; } + visitarDeclaracaoEnquanto(declaracao: Enquanto) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}enquanto(`; this.formatarDeclaracaoOuConstruto(declaracao.condicao); @@ -157,6 +167,7 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.formatarDeclaracaoOuConstruto(declaracao.corpo); this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}fimenquanto`; } + visitarDeclaracaoEscolha(declaracao: Escolha) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}escolha (`; this.formatarDeclaracaoOuConstruto(declaracao.identificadorOuLiteral); @@ -185,6 +196,7 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.indentacaoAtual -= this.tamanhoIndentacao; this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}fimescolha${this.quebraLinha}`; } + visitarDeclaracaoEscreva(declaracao: Escreva) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}escreva(`; for (let argumento of declaracao.argumentos) { @@ -196,15 +208,18 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { } this.codigoFormatado += `)${this.quebraLinha}`; } + visitarDeclaracaoFazer(declaracao: Fazer) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}repita${this.quebraLinha}`; this.formatarDeclaracaoOuConstruto(declaracao.caminhoFazer); this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}ate `; this.formatarDeclaracaoOuConstruto(declaracao.condicaoEnquanto); } + visitarDeclaracaoImportar(declaracao: Importar) { throw new Error('Método não implementado.'); } + visitarDeclaracaoPara(declaracao: Para): any { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}para `; this.devePularLinha = false; @@ -230,9 +245,11 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}fimpara${this.quebraLinha}`; } + visitarDeclaracaoParaCada(declaracao: ParaCada): any { throw new Error('Método não implementado.'); } + visitarDeclaracaoSe(declaracao: Se) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}se ( `; this.formatarDeclaracaoOuConstruto(declaracao.condicao); @@ -251,9 +268,11 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}fimse${this.quebraLinha}`; } } + visitarDeclaracaoTente(declaracao: Tente) { throw new Error('Método não implementado.'); } + visitarDeclaracaoVar(declaracao: Var): any { switch (this.contadorDeclaracaoVar) { case 0: @@ -290,26 +309,36 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { visitarDeclaracaoVarMultiplo(declaracao: VarMultiplo): any { throw new Error('Método não implementado.'); } - visitarExpressaoAcessoIndiceVariavel(expressao: any) { - throw new Error('Método não implementado.'); + + visitarExpressaoAcessoIndiceVariavel(expressao: AcessoIndiceVariavel) { + this.formatarDeclaracaoOuConstruto(expressao.entidadeChamada); + this.codigoFormatado += `[`; + this.formatarDeclaracaoOuConstruto(expressao.indice); + this.codigoFormatado += `]`; } + visitarExpressaoAcessoElementoMatriz(expressao: any) { throw new Error('Método não implementado.'); } + visitarExpressaoAcessoMetodo(expressao: any) { throw new Error('Método não implementado.'); } + visitarExpressaoAgrupamento(expressao: any): any { this.codigoFormatado += '('; this.formatarDeclaracaoOuConstruto(expressao.expressao); this.codigoFormatado += ')'; } + visitarExpressaoAtribuicaoPorIndice(expressao: any): any { throw new Error('Método não implementado.'); } + visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: any): any { throw new Error('Método não implementado.'); } + visitarExpressaoBinaria(expressao: Binario) { this.formatarDeclaracaoOuConstruto(expressao.esquerda); switch (expressao.operador.tipo) { @@ -364,9 +393,11 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { visitarExpressaoBloco(declaracao: Bloco): any { this.formatarBlocoOuVetorDeclaracoes(declaracao.declaracoes); } + visitarExpressaoContinua(declaracao?: Continua): ContinuarQuebra { throw new Error('Método não implementado.'); } + visitarExpressaoDeChamada(expressao: any) { this.formatarDeclaracaoOuConstruto(expressao.entidadeChamada); this.codigoFormatado += '('; @@ -381,21 +412,27 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.codigoFormatado += ')'; } + visitarExpressaoDefinirValor(expressao: any) { throw new Error('Método não implementado.'); } + visitarExpressaoDeleguaFuncao(expressao: any) { throw new Error('Método não implementado.'); } + visitarExpressaoDeVariavel(expressao: Variavel) { this.codigoFormatado += expressao.simbolo.lexema; } + visitarExpressaoDicionario(expressao: any) { throw new Error('Método não implementado.'); } + visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise { throw new Error('Método não implementado.'); } + visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha) { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}escreva(`; for (let argumento of declaracao.argumentos) { @@ -408,18 +445,23 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { } this.codigoFormatado += `)${this.quebraLinha}`; } + visitarExpressaoFalhar(expressao: any): any { throw new Error('Método não implementado.'); } + visitarExpressaoFimPara(declaracao: FimPara) { throw new Error('Método não implementado.'); } + visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita) { this.formatarDeclaracaoOuConstruto(declaracao.expressao); } + visitarExpressaoIsto(expressao: any) { throw new Error('Método não implementado.'); } + visitarExpressaoLeia(expressao: Leia): any { this.codigoFormatado += `${' '.repeat(this.tamanhoIndentacao)}leia(`; for (let argumento of expressao.argumentos) { @@ -433,9 +475,11 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.codigoFormatado += `)${this.quebraLinha}`; } + visitarExpressaoLeiaMultiplo(expressao: LeiaMultiplo): any { return Promise.resolve(); } + visitarExpressaoLiteral(expressao: any): any { if (typeof expressao.valor === 'string') { this.codigoFormatado += `"${expressao.valor}"`; @@ -455,6 +499,7 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.codigoFormatado += expressao.valor; } + visitarExpressaoLogica(expressao: any) { this.formatarDeclaracaoOuConstruto(expressao.esquerda); @@ -475,6 +520,7 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.formatarDeclaracaoOuConstruto(expressao.direita); } + visitarExpressaoRetornar(declaracao: Retorna): any { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}retorne`; if (declaracao.valor) { @@ -484,12 +530,15 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.codigoFormatado += `${this.quebraLinha}`; } + visitarExpressaoSuper(expressao: Super) { throw new Error('Método não implementado.'); } + visitarExpressaoSustar(declaracao?: Sustar): any { this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}interrompa${this.quebraLinha}`; } + visitarExpressaoTipoDe(expressao: TipoDe): any { throw new Error('Método não implementado.'); } @@ -526,6 +575,22 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.codigoFormatado += this.quebraLinha; } } + + visitarExpressaoFuncaoConstruto(expressao: FuncaoConstruto) { + if (expressao.parametros.length > 0) { + this.codigoFormatado += `(`; + for (let argumento of expressao.parametros) { + this.codigoFormatado += `${argumento.nome.lexema}${ + argumento.tipoDado && argumento.tipoDado.tipo ? `: ${argumento.tipoDado.tipo}, ` : ', ' + }`; + } + this.codigoFormatado = this.codigoFormatado.slice(0, -2); + this.codigoFormatado += `) `; + } + this.codigoFormatado += ` : ${this.retornoFuncaoAtual}${this.quebraLinha}`; + this.formatarBlocoOuVetorDeclaracoes(expressao.corpo); + } + visitarExpressaoVetor(expressao: any) { throw new Error('Método não implementado.'); } @@ -613,6 +678,9 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { case 'Importar': this.visitarDeclaracaoImportar(declaracaoOuConstruto as Importar); break; + case 'InicioAlgoritmo': + this.visitarDeclaracaoInicioAlgoritmo(declaracaoOuConstruto as InicioAlgoritmo); + break; case 'Isto': this.visitarExpressaoIsto(declaracaoOuConstruto as Isto); break; @@ -669,20 +737,6 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { break; } } - visitarExpressaoFuncaoConstruto(expressao: FuncaoConstruto) { - if (expressao.parametros.length > 0) { - this.codigoFormatado += `(`; - for (let argumento of expressao.parametros) { - this.codigoFormatado += `${argumento.nome.lexema}${ - argumento.tipoDado && argumento.tipoDado.tipo ? `: ${argumento.tipoDado.tipo}, ` : ', ' - }`; - } - this.codigoFormatado = this.codigoFormatado.slice(0, -2); - this.codigoFormatado += `) `; - } - this.codigoFormatado += ` : ${this.retornoFuncaoAtual}${this.quebraLinha}`; - this.formatarBlocoOuVetorDeclaracoes(expressao.corpo); - } formatar(declaracoes: Declaracao[]): string { this.indentacaoAtual = 0; @@ -692,11 +746,6 @@ export class FormatadorVisuAlg implements VisitanteComumInterface { this.indentacaoAtual += this.tamanhoIndentacao; for (let declaracao of declaracoes) { - if (!(declaracao instanceof Var) && this.deveAdicionarInicio) { - this.codigoFormatado += `${this.quebraLinha}inicio${this.quebraLinha}`; - this.deveAdicionarInicio = false; - } else if (declaracao instanceof Var) this.deveAdicionarInicio = true; - this.formatarDeclaracaoOuConstruto(declaracao); } diff --git a/fontes/interfaces/visitante-comum-interface.ts b/fontes/interfaces/visitante-comum-interface.ts index 52bbbe58..2ddd2f6d 100644 --- a/fontes/interfaces/visitante-comum-interface.ts +++ b/fontes/interfaces/visitante-comum-interface.ts @@ -29,8 +29,10 @@ import { FormatacaoEscrita } from '../construtos/formatacao-escrita'; import { LeiaMultiplo } from '../declaracoes/leia-multiplo'; import { ConstMultiplo } from '../declaracoes/const-multiplo'; import { VarMultiplo } from '../declaracoes/var-multiplo'; +import { InicioAlgoritmo } from '../declaracoes/inicio-algoritmo'; export interface VisitanteComumInterface { + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise; visitarDeclaracaoAleatorio(declaracao: Aleatorio): Promise; visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise; visitarDeclaracaoClasse(declaracao: Classe): any; diff --git a/fontes/interpretador/dialetos/birl/interpretador-birl-com-depuracao.ts b/fontes/interpretador/dialetos/birl/interpretador-birl-com-depuracao.ts index 115b7204..24e4a44a 100644 --- a/fontes/interpretador/dialetos/birl/interpretador-birl-com-depuracao.ts +++ b/fontes/interpretador/dialetos/birl/interpretador-birl-com-depuracao.ts @@ -22,9 +22,11 @@ export class InterpretadorBirlComDepuracao extends InterpretadorComDepuracao imp async resolveQuantidadeDeInterpolacoes(expressao: Literal): Promise { return comum.resolveQuantidadeDeInterpolacoes(expressao); } + async verificaTipoDaInterpolação(dados: { tipo: string; valor: any }): Promise { return comum.verificaTipoDaInterpolação(dados); } + async substituirValor(stringOriginal: string, novoValor: any, simboloTipo: string): Promise { return comum.substituirValor(stringOriginal, novoValor, simboloTipo); } diff --git a/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.ts b/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.ts index 710f73b1..c74fa13f 100644 --- a/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.ts +++ b/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.ts @@ -59,6 +59,7 @@ import tiposDeSimbolos from '../../../tipos-de-simbolos/egua-classico'; import carregarBibliotecaGlobal from '../../../bibliotecas/dialetos/egua-classico/biblioteca-global'; import { ResolvedorEguaClassico } from './resolvedor/resolvedor'; import { ArgumentoInterface } from '../../argumento-interface'; +import { InicioAlgoritmo } from '../../../declaracoes/inicio-algoritmo'; /** * O Interpretador visita todos os elementos complexos gerados pelo analisador sintático (Parser) @@ -100,20 +101,27 @@ export class InterpretadorEguaClassico implements InterpretadorInterface { carregarBibliotecaGlobal(this, this.pilhaEscoposExecucao); } + + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise { + throw new Error('Método não implementado.'); + } - async visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { + visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { throw new Error('Método não implementado.'); } visitarExpressaoTupla(expressao: Tupla): Promise { throw new Error('Método não implementado.'); } + visitarExpressaoAcessoElementoMatriz(expressao: any) { throw new Error('Método não implementado.'); } + visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: any): Promise { throw new Error('Método não implementado.'); } + visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise { throw new Error('Método não implementado.'); } diff --git a/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.ts b/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.ts index 1e449230..c7d31bf4 100644 --- a/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.ts +++ b/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.ts @@ -15,6 +15,7 @@ import { Var, VarMultiplo, } from '../../../../declaracoes'; +import { InicioAlgoritmo } from '../../../../declaracoes/inicio-algoritmo'; import { EspacoVariaveis } from '../../../../espaco-variaveis'; import { InterpretadorInterface, SimboloInterface } from '../../../../interfaces'; import { PilhaEscoposExecucaoInterface } from '../../../../interfaces/pilha-escopos-execucao-interface'; @@ -78,6 +79,10 @@ export class ResolvedorEguaClassico implements ResolvedorInterface, Interpretado this.cicloAtual = TipoClasse.NENHUM; } + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise { + throw new Error('Método não implementado.'); + } + visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { throw new Error('Método não implementado.'); } @@ -85,9 +90,11 @@ export class ResolvedorEguaClassico implements ResolvedorInterface, Interpretado visitarExpressaoTupla(expressao: Tupla): Promise { throw new Error('Método não implementado.'); } + visitarExpressaoAcessoElementoMatriz(expressao: any) { throw new Error('Método não implementado.'); } + visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: any): Promise { throw new Error('Método não implementado.'); } diff --git a/fontes/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.ts b/fontes/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.ts index ed68cb9a..89bb0b5a 100644 --- a/fontes/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.ts +++ b/fontes/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.ts @@ -40,6 +40,7 @@ import { PilhaEscoposExecucao } from '../../pilha-escopos-execucao'; import tiposDeSimbolos from '../../../tipos-de-simbolos/portugol-ipt'; import { inferirTipoVariavel } from '../../inferenciador'; +import { InicioAlgoritmo } from '../../../declaracoes/inicio-algoritmo'; export class InterpretadorPortugolIpt implements InterpretadorInterface { diretorioBase: any; @@ -76,6 +77,10 @@ export class InterpretadorPortugolIpt implements InterpretadorInterface { this.pilhaEscoposExecucao.empilhar(escopoExecucao); } + visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise { + throw new Error('Método não implementado.'); + } + visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { throw new Error('Método não implementado.'); } @@ -83,12 +88,15 @@ export class InterpretadorPortugolIpt implements InterpretadorInterface { visitarExpressaoTupla(expressao: Tupla): Promise { throw new Error('Método não implementado.'); } + visitarExpressaoAcessoElementoMatriz(expressao: any) { throw new Error('Método não implementado.'); } + visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: any): Promise { throw new Error('Método não implementado.'); } + visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise { throw new Error('Método não implementado.'); } diff --git a/fontes/interpretador/dialetos/visualg/comum.ts b/fontes/interpretador/dialetos/visualg/comum.ts index 35a4096e..26bba708 100644 --- a/fontes/interpretador/dialetos/visualg/comum.ts +++ b/fontes/interpretador/dialetos/visualg/comum.ts @@ -18,11 +18,16 @@ import { inferirTipoVariavel } from '../../inferenciador'; import tiposDeSimbolos from '../../../tipos-de-simbolos/visualg'; import { ErroEmTempoDeExecucao } from '../../../excecoes'; import { InterpretadorBase } from '../../interpretador-base'; +import { InicioAlgoritmo } from '../../../declaracoes/inicio-algoritmo'; export async function visitarDeclaracaoCabecalhoPrograma(interpretador: InterpretadorBase, declaracao: CabecalhoPrograma): Promise { return Promise.resolve(); } +export async function visitarDeclaracaoInicioAlgoritmo(interpretador: InterpretadorBase, declaracao: InicioAlgoritmo): Promise { + return Promise.resolve(); +} + export async function atribuirVariavel( interpretador: InterpretadorBase, expressao: Construto, diff --git a/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.ts b/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.ts index 7f06c3fa..e61b45d0 100644 --- a/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.ts +++ b/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.ts @@ -24,6 +24,10 @@ export class InterpretadorVisuAlgComDepuracao extends InterpretadorComDepuracao registrarBibliotecaCaracteresVisuAlg(this, this.pilhaEscoposExecucao); } + async visitarDeclaracaoInicioAlgoritmo(declaracao: CabecalhoPrograma): Promise { + return comum.visitarDeclaracaoInicioAlgoritmo(this, declaracao); + } + async visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { return comum.visitarDeclaracaoCabecalhoPrograma(this, declaracao); } diff --git a/fontes/interpretador/dialetos/visualg/interpretador-visualg.ts b/fontes/interpretador/dialetos/visualg/interpretador-visualg.ts index 0f98d1ac..9db42b09 100644 --- a/fontes/interpretador/dialetos/visualg/interpretador-visualg.ts +++ b/fontes/interpretador/dialetos/visualg/interpretador-visualg.ts @@ -28,6 +28,10 @@ export class InterpretadorVisuAlg extends InterpretadorBase { registrarBibliotecaCaracteresVisuAlg(this, this.pilhaEscoposExecucao); } + async visitarDeclaracaoInicioAlgoritmo(declaracao: CabecalhoPrograma): Promise { + return comum.visitarDeclaracaoInicioAlgoritmo(this, declaracao); + } + async visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { return comum.visitarDeclaracaoCabecalhoPrograma(this, declaracao); } diff --git a/fontes/interpretador/interpretador-base.ts b/fontes/interpretador/interpretador-base.ts index 003ea0cd..de516fb4 100644 --- a/fontes/interpretador/interpretador-base.ts +++ b/fontes/interpretador/interpretador-base.ts @@ -84,6 +84,7 @@ import primitivasVetor from '../bibliotecas/primitivas-vetor'; import tiposDeSimbolos from '../tipos-de-simbolos/delegua'; import tipoDeDadosPrimitivos from '../tipos-de-dados/primitivos'; import tipoDeDadosDelegua from '../tipos-de-dados/delegua'; +import { InicioAlgoritmo } from '../declaracoes/inicio-algoritmo'; /** * O Interpretador visita todos os elementos complexos gerados pelo avaliador sintático (_parser_), @@ -168,6 +169,10 @@ export class InterpretadorBase implements InterpretadorInterface { carregarBibliotecasGlobais(this, this.pilhaEscoposExecucao); } + async visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise { + throw new Error('Método não implementado.'); + } + async visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise { throw new Error('Método não implementado.'); } diff --git a/fontes/tradutores/tradutor-reverso-visualg.ts b/fontes/tradutores/tradutor-reverso-visualg.ts index 3d630d26..9a6e4fde 100644 --- a/fontes/tradutores/tradutor-reverso-visualg.ts +++ b/fontes/tradutores/tradutor-reverso-visualg.ts @@ -288,6 +288,7 @@ export class TradutorReversoVisuAlg { Escreva: this.traduzirDeclaracaoEscreva.bind(this), Expressao: this.traduzirDeclaracaoExpressao.bind(this), FimPara: this.traduzirDeclaracaoFimPara.bind(this), + InicioAlgoritmo: () => "", Leia: this.traduzirDeclaracaoLeia.bind(this), Para: this.traduzirDeclaracaoPara.bind(this), Se: this.traduzirDeclaracaoSe.bind(this), diff --git a/package.json b/package.json index 9798f358..25485fa6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@designliquido/delegua", - "version": "0.32.1", + "version": "0.32.2", "description": "Linguagem de programação simples e moderna usando português estruturado, com suporte a múltiplos dialetos", "main": "index.js", "scripts": { diff --git a/recursos/imagens/badge-branches.svg b/recursos/imagens/badge-branches.svg index 5170e729..fdc8a03c 100644 --- a/recursos/imagens/badge-branches.svg +++ b/recursos/imagens/badge-branches.svg @@ -1 +1 @@ -Coverage:branches: 64.66%Coverage:branches64.66% \ No newline at end of file +Coverage:branches: 64.68%Coverage:branches64.68% \ No newline at end of file diff --git a/recursos/imagens/badge-functions.svg b/recursos/imagens/badge-functions.svg index cbfa2941..7f53783f 100644 --- a/recursos/imagens/badge-functions.svg +++ b/recursos/imagens/badge-functions.svg @@ -1 +1 @@ -Coverage:functions: 65.56%Coverage:functions65.56% \ No newline at end of file +Coverage:functions: 64.62%Coverage:functions64.62% \ No newline at end of file diff --git a/recursos/imagens/badge-lines.svg b/recursos/imagens/badge-lines.svg index 557636de..4c5a85c8 100644 --- a/recursos/imagens/badge-lines.svg +++ b/recursos/imagens/badge-lines.svg @@ -1 +1 @@ -Coverage:lines: 75.22%Coverage:lines75.22% \ No newline at end of file +Coverage:lines: 75%Coverage:lines75% \ No newline at end of file diff --git a/recursos/imagens/badge-statements.svg b/recursos/imagens/badge-statements.svg index b64905c3..d319a14a 100644 --- a/recursos/imagens/badge-statements.svg +++ b/recursos/imagens/badge-statements.svg @@ -1 +1 @@ -Coverage:statements: 74.94%Coverage:statements74.94% \ No newline at end of file +Coverage:statements: 74.74%Coverage:statements74.74% \ No newline at end of file diff --git a/testes/visualg/avaliador-sintatico.test.ts b/testes/visualg/avaliador-sintatico.test.ts index 435d84c7..5af78f3c 100644 --- a/testes/visualg/avaliador-sintatico.test.ts +++ b/testes/visualg/avaliador-sintatico.test.ts @@ -20,7 +20,7 @@ describe('Avaliador sintático (VisuAlg)', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(2); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(3); }); it('Sucesso - Atribuição', () => { @@ -42,7 +42,7 @@ describe('Avaliador sintático (VisuAlg)', () => { expect(retornoAvaliadorSintatico).toBeTruthy(); expect(retornoAvaliadorSintatico.erros).toHaveLength(0); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(7); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(8); }); it('Sucesso - Enquanto', () => { @@ -63,7 +63,7 @@ describe('Avaliador sintático (VisuAlg)', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(5); }); it('Sucesso - Escolha', () => { @@ -117,7 +117,7 @@ describe('Avaliador sintático (VisuAlg)', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(9); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(10); }); it('Sucesso - Interrompa', () => { @@ -141,7 +141,7 @@ describe('Avaliador sintático (VisuAlg)', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(5); }); it('Sucesso - Leia', () => { @@ -180,7 +180,7 @@ describe('Avaliador sintático (VisuAlg)', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(3); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); }); it('Sucesso - Para (usando seta de ateribuiÇão)', () => { @@ -199,7 +199,7 @@ describe('Avaliador sintático (VisuAlg)', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(3); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); }); it('Sucesso - Procedimento', () => { @@ -228,7 +228,7 @@ describe('Avaliador sintático (VisuAlg)', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(7); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(8); }); it('Sucesso - Repita', () => { @@ -249,7 +249,7 @@ describe('Avaliador sintático (VisuAlg)', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(5); }); it('Sucesso - Xou', () => { @@ -282,7 +282,7 @@ describe('Avaliador sintático (VisuAlg)', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(23); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(24); }); it('Sucesso - Aleatorio - Números', () => { @@ -302,7 +302,7 @@ describe('Avaliador sintático (VisuAlg)', () => { const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(3); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); }); }); diff --git a/testes/visualg/formatador-visualg.test.ts b/testes/visualg/formatador-visualg.test.ts index a15671a0..f1f19c72 100644 --- a/testes/visualg/formatador-visualg.test.ts +++ b/testes/visualg/formatador-visualg.test.ts @@ -22,7 +22,7 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(6) + expect(linhasResultado).toHaveLength(5) }) it('Lendo variaveis', () => { @@ -45,7 +45,7 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(13) + expect(linhasResultado).toHaveLength(12) }) it('Atribuição', () => { @@ -68,7 +68,7 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(11) + expect(linhasResultado).toHaveLength(10) }) it('Enquanto', () => { @@ -91,7 +91,7 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(10) + expect(linhasResultado).toHaveLength(9) }) it('Escolha', () => { @@ -118,7 +118,7 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(16) + expect(linhasResultado).toHaveLength(15) }); it('Função', () => { @@ -149,7 +149,7 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes); const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(22) + expect(linhasResultado).toHaveLength(21) }); it('Interrompa', () => { @@ -174,9 +174,9 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(13) + expect(linhasResultado).toHaveLength(12) expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(5); }); it('Leia', () => { @@ -203,7 +203,7 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(12) + expect(linhasResultado).toHaveLength(11) expect(retornoAvaliadorSintatico).toBeTruthy(); expect(retornoAvaliadorSintatico.declaracoes.length).toBeGreaterThan(0); @@ -226,9 +226,9 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(9) + expect(linhasResultado).toHaveLength(8) expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(3); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); }); /* it('Procedimento', () => { @@ -282,9 +282,9 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(10); + expect(linhasResultado).toHaveLength(9); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(5); }); it('XOU', () => { @@ -317,9 +317,9 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(29); + expect(linhasResultado).toHaveLength(28); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(23); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(24); }); it('Sucesso - Aleatorio - Números', () => { @@ -342,8 +342,8 @@ describe('Formatadores > VisualG', () => { const resultado = formatadorVisuAlg.formatar(retornoAvaliadorSintatico.declaracoes) const linhasResultado = resultado.split(sistemaOperacional.EOL) - expect(linhasResultado).toHaveLength(8); + expect(linhasResultado).toHaveLength(7); expect(retornoAvaliadorSintatico).toBeTruthy(); - expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(3); + expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(4); }); }); \ No newline at end of file