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