Ejemplo 320
Enunciado
Supóngase el siguiente programa en un lenguaje ficticio:
read ancho;
alto = 20 + <int>(ancho + 2.5);
while (password != 100) {
read password;
}
El lenguaje tiene las siguientes características adicionales:
- Un programa debe tener al menos una sentencia.
- No hay asignación múltiple (a = b = 0).
- Los únicos operadores del lenguaje son ‘+’ y ‘!=’.
- En los cast, como puede verse en el fragmento
<int>(ancho + 2.5)
, son obligatorios los ‘<’, ‘>’ y los paréntesis. - El while lleva paréntesis y llaves obligatorias.
Crear su especificación sintáctica usando la herramienta ANTLR.
Solución
La solución seria:
grammar Grammar;
import Lexicon;
start : sentencia+ EOF;
sentencia
: 'read' IDENT ';'
| IDENT '=' expr ';'
| 'while' '(' expr ')' '{' sentencia+ '}';
expr
: INT_CONSTANT
| REAL_CONSTANT
| IDENT
| expr '+' expr
| expr '!=' expr
| '<' tipo '>' '(' expr ')';