Depuración en yapp

Es posible añadir un parámetro en la llamada a YYParse con nombre yydebug y valor el nivel de depuración requerido. Ello nos permite observar la conducta del analizador. Los posibles valores de depuración son:



Bit Información de Depuración
0x01 Lectura de los terminales
0x02 Información sobre los estados
0x04 Acciones (shifts, reduces, accept ...)
0x08 Volcado de la pila
0x10 Recuperación de errores


Veamos un ejemplo de salida para la gramática que se describe en la página [*] cuando se llama con:

$self->YYParse( yylex => \&_Lexer, yyerror => \&_Error, yydebug => 0x1F )

 1  $ ./use_aSb.pl
 2  ----------------------------------------
 3  In state 0:
 4  Stack:[0]
 5  ab  # el usuario ha escrito esto
 6  Need token. Got >a<
 7  Shift and go to state 2.
 8  ----------------------------------------
 9  In state 2:
10  Stack:[0,2]
11  Need token. Got >b<
12  Reduce using rule 1 (S,0): S -> epsilon
13  Back to state 2, then go to state 4.
14  ----------------------------------------
15  In state 4:
16  Stack:[0,2,4]
17  Shift and go to state 5.
18  ----------------------------------------
19  In state 5:
20  Stack:[0,2,4,5]
21  Don't need token.
22  Reduce using rule 2 (S,3): S -> a S b
23  Back to state 0, then go to state 1.
24  ----------------------------------------
25  In state 1:
26  Stack:[0,1]
27  Need token. Got ><
28  Shift and go to state 3.
29  ----------------------------------------
30  In state 3:
31  Stack:[0,1,3]
32  Don't need token.
33  Accept.

Casiano Rodríguez León
2013-04-23