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 ')';