Skip to content

Commit

Permalink
Expressões Regulares
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelrvg committed Jan 19, 2024
1 parent c4394bb commit a50a6a0
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
17 changes: 13 additions & 4 deletions fontes/formatadores/delegua.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
AcessoMetodoOuPropriedade,
Agrupamento,
Atribuir,
Binario,
Expand Down Expand Up @@ -287,8 +288,10 @@ export class FormatadorDelegua implements VisitanteComumInterface {
throw new Error('Método não implementado.');
}

visitarExpressaoAcessoMetodo(expressao: any) {
throw new Error('Método não implementado.');
visitarExpressaoAcessoMetodo(expressao: AcessoMetodoOuPropriedade) {
this.formatarDeclaracaoOuConstruto(expressao.objeto);
this.codigoFormatado += '.';
this.codigoFormatado += expressao.simbolo.lexema;
}

visitarExpressaoAgrupamento(expressao: Agrupamento): Promise<any> {
Expand Down Expand Up @@ -392,8 +395,8 @@ export class FormatadorDelegua implements VisitanteComumInterface {
visitarExpressaoDicionario(expressao: any) {
throw new Error('Método não implementado.');
}
visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise<RegExp> {
throw new Error('Método não implementado.');
visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): any {
this.codigoFormatado += `||${expressao.valor}||`
}

visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha) {
Expand Down Expand Up @@ -512,6 +515,9 @@ export class FormatadorDelegua implements VisitanteComumInterface {

formatarDeclaracaoOuConstruto(declaracaoOuConstruto: Declaracao | Construto): void {
switch (declaracaoOuConstruto.constructor.name) {
case 'AcessoMetodoOuPropriedade':
this.visitarExpressaoAcessoMetodo(declaracaoOuConstruto as AcessoMetodoOuPropriedade);
break;
case 'Agrupamento':
this.visitarExpressaoAgrupamento(declaracaoOuConstruto as Agrupamento);
break;
Expand Down Expand Up @@ -539,6 +545,9 @@ export class FormatadorDelegua implements VisitanteComumInterface {
case 'Expressao':
this.visitarDeclaracaoDeExpressao(declaracaoOuConstruto as Expressao);
break;
case 'ExpressaoRegular':
this.visitarExpressaoExpressaoRegular(declaracaoOuConstruto as ExpressaoRegular);
break;
case 'Fazer':
this.visitarDeclaracaoFazer(declaracaoOuConstruto as Fazer);
break;
Expand Down
18 changes: 18 additions & 0 deletions testes/formatadores/formatador-delegua.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,24 @@ describe('Formatadores > Delégua', () => {
expect(linhasResultado).toHaveLength(5);
});

it('Expressões Regulares', () => {
const resultadoLexador = lexador.mapear(
[
"var str = \"olá mundo, olá universo\";",
"var novaStr = str.substituir(||/olá/g||, \"oi\");",
"escreva(novaStr);",
],
-1
);

const resultadoAvaliacaoSintatica = avaliadorSintatico.analisar(resultadoLexador, -1);
const resultado = formatador.formatar(resultadoAvaliacaoSintatica.declaracoes);
const linhasResultado = resultado.split(sistemaOperacional.EOL);

console.log(resultado);
expect(linhasResultado).toHaveLength(4);
});

it('Para', () => {
const resultadoLexador = lexador.mapear(
["para var a = 1; a < 10; a++ { se a %2==0 { continua } escreva(a) }"],
Expand Down

0 comments on commit a50a6a0

Please sign in to comment.