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