Atributos heredados: ubicación de la instrucción break

Anuncio
Enunciado: Especificar un reconocedor que use atributos heredados para
determinar si la instrucción break de java está ubicada, o no, dentro de algún
bucle while. Por ejemplo en el siguiente ejemplo la respuesta sería no:
if (a) {
break;
}
mientras que para el siguiente la respuesta sería sí:
while(a) {
if (a) {
break;
}
}
Solución:
///////////////////////////////
// Analizador sintáctico
///////////////////////////////
class Anasint extends Parser;
instrucciones [int nbw] : (instruccion [nbw])+
;
instruccion [int nbw]:
asignacion
| bucle [nbw]
| condicional [nbw]
| ruptura [nbw]
;
asignacion : IDENT "=" expr ";" ;
bucle [int nbw]: WHILE "(" expr ")" bloque[nbw+1] ;
condicional [int nbw]: IF "(" expr ")" bloque[nbw] ;
ruptura [int nbw]: b:BREAK ";"
{if (nbw==0)
System.out.println("break mal ubicado"+b);}
;
bloque [int nbw]: instruccion [nbw]
| "{" instrucciones[nbw] "}"
;
expr : expr_suma
(("<"|"<="|">"|">="|"=="|"!=") expr_suma)?
;
expr_suma : exp_mult (("+"|"-") exp_mult)* ;
exp_mult : exp_base (("*"|"/") exp_base)* ;
exp_base : NUMERO
| IDENT
| "(" expr ")"
;
Descargar