Skip to content

Commit

Permalink
Mudança de lógica em método paraTexto.
Browse files Browse the repository at this point in the history
  • Loading branch information
leonelsanchesdasilva committed Feb 15, 2024
1 parent 382e34c commit 4e86bb3
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 8 deletions.
2 changes: 1 addition & 1 deletion fontes/construtos/unario.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export class Unario<TTipoSimbolo extends string = string> implements Construto {
hashArquivo: number;

operador: SimboloInterface<TTipoSimbolo>;
operando: Construto;
operando: any;
incidenciaOperador: 'ANTES' | 'DEPOIS';

constructor(
Expand Down
21 changes: 20 additions & 1 deletion fontes/interpretador/interpretador-base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1610,9 +1610,28 @@ export class InterpretadorBase implements InterpretadorInterface {
return formato.format(objeto);
}

if (Array.isArray(objeto)) return objeto;
if (Array.isArray(objeto)) {
let retornoVetor: string = '[';
for (let elemento of objeto) {
retornoVetor += this.paraTexto(elemento);
}
retornoVetor += ']';
return retornoVetor;
}

if (objeto.valor instanceof ObjetoPadrao) return objeto.valor.paraTexto();
if (objeto instanceof ObjetoDeleguaClasse || objeto instanceof DeleguaFuncao) return objeto.paraTexto();
switch (objeto.constructor.name) {
case 'Object':
if ('tipo' in objeto) {
switch (objeto.tipo) {
case 'dicionário':
return JSON.stringify(objeto.valor);
default:
return objeto.valor.paraTexto();
}
}
}
if (typeof objeto === tipoDeDadosPrimitivos.OBJETO) return JSON.stringify(objeto);

return objeto.toString();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { AvaliadorSintatico } from "../fontes/avaliador-sintatico";
import { InterpretadorComDepuracao } from "../fontes/interpretador";
import { Lexador } from "../fontes/lexador";
import { AvaliadorSintatico } from "../../fontes/avaliador-sintatico";
import { InterpretadorComDepuracao } from "../../fontes/interpretador";
import { Lexador } from "../../fontes/lexador";

describe('Interpretador com Depuração', () => {
let lexador: Lexador;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { AvaliadorSintatico } from '../fontes/avaliador-sintatico';
import { InterpretadorBase } from '../fontes/interpretador';
import { Lexador } from '../fontes/lexador';
import { AvaliadorSintatico } from '../../fontes/avaliador-sintatico';
import { InterpretadorBase } from '../../fontes/interpretador';
import { Lexador } from '../../fontes/lexador';

describe('Interpretador', () => {
describe('interpretar()', () => {
Expand Down Expand Up @@ -271,6 +271,28 @@ describe('Interpretador', () => {

expect(_saida).toBe('<função retorneAlgo>');
});

it('Escrita de vetor com outros objetos dentro', async () => {
let saidas: string[] = [];
const retornoLexador = lexador.mapear([
`funcao retorne() {`,
` retorna ''`,
`}`,
`const dic = {`,
` "chave": 10`,
`}`,
`escreva([dic])`,
`escreva([retorne])"`,
], -1);
const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);

interpretador.funcaoDeRetorno = (saida: any) => {
saidas.push(saida);
};

await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
expect(saidas).toBeTruthy();
});
});

describe('Escolha - Caso', () => {
Expand Down

0 comments on commit 4e86bb3

Please sign in to comment.