Escriba usando Parse::Eyapp
un analizador sintáctico PL::Simple
para la siguiente gramática:
0 | p
![]() |
1 | p
![]() |
2 | ds
![]() |
3 | ds
![]() |
4 | d
![]() |
5 | d
![]() |
6 | ss
![]() |
7 | ss
![]() |
8 | s
![]() |
9 | s
![]() |
10 | s
![]() |
11 | e
![]() |
12 | e
![]() |
13 | e
![]() |
14 | t
![]() |
15 | t
![]() |
16 | t
![]() |
17 | f
![]() |
18 | f
![]() |
19 | f
![]() |
20 | f
![]() |
21 | f
![]() |
22 | il
![]() |
23 | il
![]() |
24 | el
![]() |
25 | el
![]() ![]() |
26 | nel
![]() |
27 | nel
![]() |
El terminal ID
corresponde a identificador y NUM
a un número entero sin signo.
El terminal STR
a cadenas de dobles comillas.
El terminal FUNCTIONID
viene dado por la expresión regular min|max|concat
.
Declare dichos terminales en la cabecera usando la directiva %token
(lea la documentación de
Parse::Eyapp
). Una directiva como:
%token ID FUNCTIONID NUMdeclara los terminales pero no les da prioridad.
C
.
a < b
, a == b
, etc.).
Observe que tales expresiones tiene menor prioridad que los operadores aditivos:
a = b < c + 2
es interpretada como a = b < (c + 2)
PL/Simple.pod
.
MANIFEST
. Ubiquelos en un directorio
de informes.