ing sistemas
import java.io.*;
%}
// lista de tokens por orden de prioridad
%token CONSTANTE // constante (entero o flotante)
%token ABR_PARENT // abrir paréntesis
%token CER_PARENT// cerrar paréntesis
%token ASIG // simbolo usado para la asignación
%token IDENTIFICADOR
%token PYC // punto y coma
%left OP_MAS_MENOS // operadores binarios demenos prioridad (o unarios)
%left OP_MULT_DIV // operadores binarios de mas prioridad
%%
lista_sent
: lista_sent sentencia
|
;
sentencia
: exprPYC
{ System.out.println($1.obj.toString());
}
| IDENTIFICADOR ASIG expr PYC
{ Acc.Asignacion($1.obj,$3.obj) ;
}| error PYC
;
expr
: CONSTANTE
{ $$.obj = $1.obj ;
}
| IDENTIFICADOR
{ $$.obj =Acc.LeerValorVariable($1.obj) ;
}
| expr OP_MAS_MENOS expr
{ $$.obj = Acc.Operador($2.obj,$1.obj,$3.obj);
}
| expr OP_MULT_DIV expr{ $$.obj = Acc.Operador($2.obj,$1.obj,$3.obj);
}
| OP_MAS_MENOS expr
{ $$.obj = Acc.Operador($1.obj,$2.obj);
}| ABR_PARENT expr CER_PARENT
{ $$.obj = $2.obj ;
}
;
%%
// referencia al analizador léxico
//
private Yylex analex ;
//constructor: crea el analizador sintactico
// invoca la creación dela analizador lexico (lexer)
//
public Parser(Reader r)
{
analex = new Yylex(r, this) ;
}
// esta función seinvoca por el analizador cuando necesita el
// siguiente token del analizador léxico
//
private int yylex ()
{
int yyl_return = -1;
try
{ yylval = new ParserVal(0);...
Regístrate para leer el documento completo.