Skip to content

Commit

Permalink
Método global para limpar tela (#504)
Browse files Browse the repository at this point in the history
* Método global para limpar tela
* renomeando titulo algoritmo para limpatela
* Ajustes método `limpatela`
* limpatela ajustes
  • Loading branch information
samuelrvg authored Sep 21, 2023
1 parent 5163ae0 commit e2c800b
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,10 @@ export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase {
return this.atual === this.simbolos.length;
}

eLimpaTela(): Boolean {
return this.simboloAnterior().lexema === 'limpatela';
}

metodoBibliotecaGlobal(): Construto {
const simboloAnterior = this.simbolos[this.atual - 1];

Expand Down Expand Up @@ -394,10 +398,34 @@ export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase {
return declaracoes;
}

finalizarChamada(entidadeChamada: Construto): Construto {
const argumentos: Array<Construto> = [];

if(this.eLimpaTela()) {
return new Chamada(this.hashArquivo, entidadeChamada, null, argumentos);
}

if (!this.verificarTipoSimboloAtual(tiposDeSimbolos.PARENTESE_DIREITO)) {
do {
if (argumentos.length >= 255) {
throw this.erro(this.simbolos[this.atual], 'Não pode haver mais de 255 argumentos.');
}
argumentos.push(this.expressao());
} while (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.VIRGULA));
}

const parenteseDireito = this.consumir(tiposDeSimbolos.PARENTESE_DIREITO, "Esperado ')' após os argumentos.");

return new Chamada(this.hashArquivo, entidadeChamada, parenteseDireito, argumentos);
}

chamar(): Construto {
let expressao = this.primario();

while (true) {
if(this.eLimpaTela()) {
expressao = this.finalizarChamada(expressao);
}
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.PARENTESE_ESQUERDO)) {
expressao = this.finalizarChamada(expressao);
} else if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.COLCHETE_ESQUERDO)) {
Expand Down
5 changes: 5 additions & 0 deletions fontes/bibliotecas/dialetos/visualg/caracteres.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ export function registrarBibliotecaCaracteresVisuAlg(
})
);

pilhaEscoposExecucao.definirVariavel(
'limpatela',
new FuncaoPadrao(0, console.clear)
);

pilhaEscoposExecucao.definirVariavel(
'maiusc',
new FuncaoPadrao(1, function(valor: any) {
Expand Down
1 change: 1 addition & 0 deletions fontes/lexador/dialetos/palavras-reservadas/visualg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export const palavrasReservadas = {
inteiro: tiposDeSimbolos.INTEIRO,
interrompa: tiposDeSimbolos.INTERROMPA,
leia: tiposDeSimbolos.LEIA,
limpatela: tiposDeSimbolos.METODO_BIBLIOTECA_GLOBAL,
log: tiposDeSimbolos.METODO_BIBLIOTECA_GLOBAL,
logn: tiposDeSimbolos.METODO_BIBLIOTECA_GLOBAL,
logico: tiposDeSimbolos.LOGICO,
Expand Down
5 changes: 5 additions & 0 deletions testes/visualg/biblioteca-global.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,11 @@ describe('Biblioteca de caracteres', () => {
expect(funcaoCopia('Uma cadeia de caracteres', 4, 6)).toBe('cadeia');
});

it('limpatela', () => {
const limpaTela = funcoes['limpatela'].funcao;
expect(limpaTela()).toBe(undefined);
});

it('maiusc', () => {
const funcaoMaiusc = funcoes['maiusc'].funcao;
expect(funcaoMaiusc('a')).toBe('A');
Expand Down
21 changes: 21 additions & 0 deletions testes/visualg/interpretador.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,27 @@ describe('Interpretador', () => {
expect(retornoInterpretador.erros).toHaveLength(0);
});

it('Sucesso - limpatela', async () => {

const retornoLexador = lexador.mapear([
'Algoritmo "limpatela"',
'Var',
'Inicio',
' escreval("Teste 1")',
' limpatela',
' escreval("Teste 2")',
' limpatela',
' escreval("Teste 3")',
'Fimalgoritmo'
], -1);

const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);

const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);

expect(retornoInterpretador.erros).toHaveLength(0);
});

it('Sucesso - Leia', async () => {
// Aqui vamos simular a resposta para cinco variáveis de `leia()`.
const respostas = [1, 2, 3, 4, 5];
Expand Down

0 comments on commit e2c800b

Please sign in to comment.