Ejemplo 520
Enunciado
Crear la gramática abstracta para el lenguaje del siguiente ejemplo:
double a;
if (a > 2) then
print a;
else
print g(5, a) + 8.3;
endif
print f(a * 2);
Aclaraciones:
- Hay sólo dos tipos: int y double.
- Las condiciones del if son de tipo entero (no hay tipo booleano).
- Las definiciones de las variables tienen que estar antes de todas las sentencias.
- Puede haber varias sentencias en cada rama del if.
Solución
programa ⟶ defVariable* sentencia*
defVariable ⟶ nombre:string tipo
intType:tipo ⟶ ε
realType:tipo ⟶ ε
escritura:sentencia ⟶ expresion
if:sentencia ⟶ condicion:expresión cierto:sentencia* falso:sentencia*
exprBinaria:expresion ⟶ left:expresión operator:string right:expresion
invocacion:expresion ⟶ nombre:string args:expresion*
variable:expresion ⟶ lexema:string
literalInt:expresion ⟶ lexema:string
literalReal:expresion ⟶ lexema:string