Actividad: Sigue las derivaciones de P para construir la asignación. P -->??
¿Los elementos F son conmutables entre sí? si/no ¿por qué?
¿Cuáles son los usos que se le da a la cadena vacía?
Para lograr la codificación en javascript de la instrucción if ¿se necesitan generar más cadenas vacías? si/no ¿por qué?
Debido a que es una gramática recursiva, las variables en memoria se reutilizan ¿Qué variables y en qué momentos deben imprimirse para obtener la codificación completa?
¿Qué mejoras le puedes hacer a esta gramática?
Escribe una gramática que sirva para traducir el siguiente segmento de código en tres instrucciones de javascript, una para declarar las variables, otra para asignar expresiones matemáticas y otra para el si entonces. (5 puntos).
<metodo nombre=”evaluador”>
<variable> <nombre>aprobado</nombre><tipo>logico</tipo></variable> <instruccion>
<si> <condicion> <operador>calif</operador> <opndo>’>=’</opndo>
<operador>6</operador> <opndo>’fin’</opndo>
</condicion>
<verdadero> <instruccion>
<asignacion><operador>aprobado</operador>
<operador>si</operador> </asignacion>
</instruccion> </verdadero>
</si> </instruccion> </metodo>
Se inicia desde el axioma y se van generando elementos no terminales que representen las estructuras que se van a traducir.
S --> A B
A --> <metodo nombre='evaluador'>
Se crea una estructura recursiva para declaración de variables y se genera un no terminal con la traducción, en este caso: E1
B --> <variable><nombre>C</nombre><tipo>D</tipo></variable>B | F
C --> aprobado
D --> lógico E1
E1--> var C as boolean;
Actividad: Ajusta la gramática para generar E2 y E3 con la declaración de los tipos texto y número. ¿Los elementos B son conmutables entre sí? si/no ¿por qué?
Se crea una estructura recursiva para la generación de instrucciones y los elementos no terminales necesarios para la traducción de la primera instrucción, en este caso E4 y E5 para codificar la instrucción Si.
F --> <instruccion>G</instruccion>F |</metodo>
<instruccion> --> ϵ / / (cadena vacía)
</instruccion> --> ;
G --><si> H |<asignacion>P</asignacion>
H --><condicion>E4
E4-->if (I) {M};E5
E5-->else {O}; | ϵ
I --><operador>K</operador><opndo>L</opndo>I
| </condicion> <verdadero>M</verdadero>N
K -->aprobado | 6
L -->>= | ϵ
M -->F
N --></si>|<falso>O</falso></si>
O -->F