next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: El Método YYName y Sup: Análisis Sintáctico con Parse::Eyapp Ant: Práctica: Traductor de Términos Err: Si hallas una errata ...

Práctica: Gramática Simple en Parse::Eyapp

Escriba usando Parse::Eyapp un analizador sintáctico PL::Simple para la siguiente gramática:



0 p $ \rightarrow$ ds ss
1 p $ \rightarrow$ ss
2 ds $ \rightarrow$ d ';' ds
3 ds $ \rightarrow$ d ';'
4 d $ \rightarrow$ INT il
5 d $ \rightarrow$ STRING il
6 ss $ \rightarrow$ s ';' ss
7 ss $ \rightarrow$ s
8 s $ \rightarrow$ ID '=' e
9 s $ \rightarrow$ PRINT nel
10 s $ \rightarrow \epsilon$
11 e $ \rightarrow$ e '+' t
12 e $ \rightarrow$ e '-' t
13 e $ \rightarrow$ t
14 t $ \rightarrow$ t '*' f
15 t $ \rightarrow$ t '/' f
16 t $ \rightarrow$ f
17 f $ \rightarrow$ '(' e ')'
18 f $ \rightarrow$ ID
19 f $ \rightarrow$ NUM
20 f $ \rightarrow$ STR
21 f $ \rightarrow$ FUNCTIONID '(' el ')'
22 il $ \rightarrow$ ID ',' il
23 il $ \rightarrow$ ID
24 el $ \rightarrow$ nel
25 el $ \rightarrow$ $ \epsilon$
26 nel $ \rightarrow$ e ',' nel
27 nel $ \rightarrow$ e


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 NUM
declara los terminales pero no les da prioridad.


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: El Método YYName y Sup: Análisis Sintáctico con Parse::Eyapp Ant: Práctica: Traductor de Términos Err: Si hallas una errata ...
Casiano Rodríguez León
2012-05-22