# Construcción de un Repeat Evaluate Print Loop
En la práctica egg-interpreter deberá hacer que el ejecutable egg
funcione como un bucle REPL cuando no se le proporciona un fichero de entrada.
[~/ull-pl1718-campus-virtual/tema3-analisis-sintactico/src/egg/crguezl-egg(private)]$ bin/egg.js
> def(x, array(1,2,array(3,4))) # x = [1,2,[3,4]]
[ 1, 2, [ 3, 4 ] ]
> <-(x,2) # 3d element
[ 3, 4 ]
> <-(x,0) # 1st element
1
> +(2, # No completamos la expresión: espera
> ..*(3, # Sigue incompleta
> ....4)
> ..) # cerramos: evalúa
14
> # Pulsamos CTRL-D
> goodbye!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
En este Vídeo Programando un bucle REPL para el lenguaje Egg (opens new window) explicamos como hacerlo
The function parBalance(line)
that we introduce in the parse.js
main file checks for parenthesis balance in line
. The parameter line
contains a (potentially incomplete)
egg expression:
'use strict';
const { SPACE } = require("./tokens.js");
const fs = require('fs');
const nearley = require("nearley");
const grammar = require("./grammar.js");
const lex = require('./lex-pl.js');
function parBalance(line) {
let stack = 0;
lex.reset(line);
let tokens = lex.tokens;
// Increment stack each time you see an LP token, decrement it if you see a RP
/* ... fill the code ... */
return stack;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Fell free to add and export in file parse.js
any convenience parser-related functions you feel you neeed in the egg-interpreter
module.
See also the docs for readline.createInterface
: