Skip to content

Commit

Permalink
Limpatela ajustes (#505)
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelrvg authored Sep 22, 2023
1 parent e2c800b commit e29b8af
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -263,10 +263,6 @@ 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 @@ -299,7 +295,11 @@ export class AvaliadorSintaticoVisuAlg extends AvaliadorSintaticoBase {
return new Literal(this.hashArquivo, Number(simboloAtual.linha), false);
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.VERDADEIRO))
return new Literal(this.hashArquivo, Number(simboloAtual.linha), true);

if(simboloAtual.lexema === 'limpatela'){
const variavel = new Variavel(this.hashArquivo, simboloAtual);
this.avancarEDevolverAnterior();
return new Chamada(this.hashArquivo, variavel, null, []);
}
if (
this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.IDENTIFICADOR, tiposDeSimbolos.METODO_BIBLIOTECA_GLOBAL)
) {
Expand Down Expand Up @@ -398,34 +398,10 @@ 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
3 changes: 3 additions & 0 deletions testes/visualg/interpretador.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,9 @@ describe('Interpretador', () => {
' escreval("Teste 2")',
' limpatela',
' escreval("Teste 3")',
' escreval("Teste 4")',
' limpatela',
' escreval("Teste 5")',
'Fimalgoritmo'
], -1);

Expand Down

0 comments on commit e29b8af

Please sign in to comment.