Ejercicio: Factores Comunes

En el programa 2.6.1 el reconocimiento de las categorías gramáticales statements, expression y term (líneas 19-27) difiere del resto. Observe las reglas:



statements $ \rightarrow$ statement ';' statements $ \vert$ statement
expression $ \rightarrow$ term '+' expression $ \vert$ term
term $ \rightarrow$ factor '*' term $ \vert$ factor


¿Son disjuntos los conjuntos $ FIRST(\gamma_i)$ para las partes derechas de las reglas de statements? ¿Son disjuntos los conjuntos $ FIRST(\gamma_i)$ para las partes derechas de las reglas de expression? ¿Son disjuntos los conjuntos $ FIRST(\gamma_i)$ para las partes derechas de las reglas de term?

Si se tiene una variable con producciones:

$ A \rightarrow \alpha \beta \mid \alpha \gamma$

Las dos producciones tienen un máximo factor común en la izquierda de su parte derecha $ \alpha$. Asumimos que $ FIRST(\beta) \cap FIRST(\gamma) = \emptyset$.

  1. ¿Cómo puede modificarse la gramática para obtener una nueva gramática que cumpla la condición de que las partes derechas tienen conjuntos $ FIRST(\gamma_i)$ disjuntos?
  2. ¿Puede modificarse la técnica APDR para que funcione sobre gramáticas con este tipo de producciones?. Observe el código asociado con statements, expression y term. ¿Cómo sería el esquema general?

Casiano Rodríguez León
2009-12-09