diff --git a/; b/; new file mode 100644 index 0000000..d1af6f8 --- /dev/null +++ b/; @@ -0,0 +1,358 @@ +import java_cup.runtime.*; +import java.util.*; +parser code {: + + String errores = ""; + Boolean has_main = false; + Boolean first_time = true; + Boolean in_method = false; + + tabla ambito; + HashMap seen_types; + Tipo tmp_tipo; + + public int getline(Object info){ + if(info instanceof java_cup.runtime.Symbol) { + java_cup.runtime.Symbol s=((java_cup.runtime.Symbol)info); + return s.left; + } + return -1; + +} + + + public void report_error(String message, Object info) { + StringBuffer m = new StringBuffer("Error"); + if(info instanceof java_cup.runtime.Symbol) { + java_cup.runtime.Symbol s=((java_cup.runtime.Symbol)info); + if(s.left >= 0) { + m.append(" en linea "+(s.left+1)); + if (s.right >= 0) + m.append(", y columna "+(s.right+1)); + } + } + message = message.replaceAll("Syntax error","Error de sintaxis"); + m.append(" : "+message); + + errores += m; + errores += "\n"; + System.out.println(m); + } + + public void report_fatal_error(String message, Object info) { + message = message.replaceAll("Couldn't repair and continue parse","No se pudo recuperar"); + report_error(message, info); + + System.exit(1); + } + +:} + +terminal DO, PARDER, PARIZQ, TO, AS, DIM, SEPARADOR, FIN, REF, SUB, FUNCTION; +terminal IGUAL,LOOP,IF,THEN, ELSE, ELSEIF,END,FOR,NEXT,WHILE ,NUM,TRUE,FALSE; +terminal String NAME,OPREL,TIPO; +terminal WRITE,WRITELN,INPUT; +terminal POR,ENTRE,MAS,MENOS,ERROR; +terminal TYPE,EXIT, PUNTO,CADENA,NOT,SALTOCADENA; +non terminal String vars; +non terminal Tipo tipo; + +non terminal Object statement, metodo, programa,linea, declaracion,declar_var, statements, loop_for, do_loop, if_block; +non terminal Object schrodingerArgument,asignacion,if_inner,list_declar,list_expressions,argument, argumentlist, argumentlistHelper,bloque; +non terminal Object variables_declar2,list_declar2,declaracion2,cadena_s,salir_param,variables_declar; +non terminal Object retorno,salir_if,end_func,end_type,regresar,dectype,paramHelper,parametros,end_sub; +non terminal Object rango,salir_loop,escribe,lee,subfunc ,funcion; +non terminal Object fake_f; +non terminal Objeto termino, factor, expression, nombre,funcionCall; + + +// COSAS QUE FALTAN AHORITA +// manejo de errores + +programa ::= FIN statements | statements | FIN |; + + +statements ::= linea statements + |linea; + + +linea ::= declar_var FIN + | metodo + | dectype + | error FIN {: parser.report_error(" Se esperaba declaracion de variables, metodos o estructuras",sym.ERROR); :}; + + +variables_declar ::= declar_var FIN; + + +/*----declaracion de variables----*/ + +declar_var ::= DIM declaracion; + +declaracion ::= vars:n1 AS tipo:t SEPARADOR declaracion + {: if ( parser.first_time && !parser.in_method ){ boolean meter = parser.ambito.agregarATabla(n1,t ); + if(!meter ) parser.report_error("Ya existe man, osea chill" + n1,sym.SEPARADOR); + } :} + | vars:n1 AS tipo:t + {: if (parser.first_time && !parser.in_method ){boolean meter = parser.ambito.agregarATabla(n1,t ); + if(!meter) parser.report_error("Ya existe man,osea chill" + n1, sym.AS); + + }:} + + + | error {: parser.report_error("Declaracion de variables: Se esperaba ID",sym.ERROR); :} ; + +vars ::= NAME:n1 {: RESULT = n1.toLowerCase() ; :} + | NAME:n1 SEPARADOR vars:n2 + {: if ( parser.first_time && !parser.in_method ) + parser.ambito.agregarATabla(n1.toLowerCase(),parser.seen_types.get("variant") ); + RESULT = n2.toLowerCase(); :} + | NAME SEPARADOR error {: parser.report_error("Declaracion de variables: Se esperaba nombre",sym.NAME); :}; + +tipo ::= TIPO:n1 {: + if( parser.first_time){ + Tipo x = parser.seen_types.get(n1.toLowerCase()); + RESULT = x;} + :} + + | NAME:n1 {: + if(parser.first_time){ + Tipo x = parser.seen_types.get(n1.toLowerCase()); + if( x ==null) + { + x = new Tipo(n1.toLowerCase()); + } + RESULT = x;} :}; +/*--------------------------------*/ + +/*---Declaracion de metodos-------*/ +metodo ::= subfunc + | funcion; + +subfunc ::= SUB NAME:n1 argumentlist FIN end_sub FIN {: if (n1.toLowerCase().equals("main")) parser.has_main = true; :}; + +funcion ::= FUNCTION fake_f argumentlist retorno FIN end_func FIN {: parser.ambito = parser.ambito.parent; :} + |FUNCTION fake_f argumentlist retorno FIN error FIN {: parser.report_error("oh well",sym.ERROR); parser.ambito = parser.ambito.parent;:} + | FUNCTION error FIN {: parser.report_error("Se esperaba nombre de funcion",sym.ERROR); :} + | FUNCTION fake_f error PARIZQ retorno FIN end_func FIN {: parser.report_error("error de parametros",sym.ERROR); parser.ambito = parser.ambito.parent;:} + | FUNCTION fake_f error FIN end_func FIN {: parser.report_error("error de parametros",sym.ERROR); parser.ambito = parser.ambito.parent; :} + | FUNCTION fake_f error {: parser.report_error("Error en firma de funcion",sym.ERROR); parser.ambito = parser.ambito.parent; :}; + + +fake_f ::= NAME:n1 {: tabla nuevo_ambito = new tabla(parser.ambito,n1); parser.ambito.hijos.add(nuevo_ambito); + parser.ambito = nuevo_ambito; + parser.tmp_tipo = new Tipo(n1); + parser.tmp_tipo.setTipoFinal(1); + + :}; + +retorno ::= AS tipo:t1 {: parser.tmp_tipo.metodo_var.add(t1); + parser.seen_types.put( parser.tmp_tipo.getName(), parser.tmp_tipo); + :} + | error {: parser.report_error(" No existe tipo de retorno de funcion, se esperaba: As ",sym.AS); :}; + + +end_sub ::= bloque END SUB + | END SUB + | END error {: parser.report_error(" Se esperaba End Sub",sym.ERROR); :} ; + +end_func ::= bloque END FUNCTION + | END FUNCTION + | bloque END error {: parser.report_error(" Se esperaba End Function", sym.ERROR); :} ; + +end_type ::= END TYPE + | END error {: parser.report_error("Se esperaba End Type",sym.ERROR); :}; + +regresar ::= EXIT SUB FIN + | EXIT FUNCTION FIN + | EXIT error {: parser.report_error(" Salida de metodos: se esperaba Exit Sub o Exit Function",sym.ERROR); :}; + +/*--------------------------------*/ + + +bloque ::= list_expressions + | list_expressions regresar + | list_declar list_expressions + | list_declar list_expressions regresar + | list_declar + | list_declar regresar + | regresar ; + +list_declar ::= variables_declar list_declar + | variables_declar; + + +list_expressions ::= statement list_expressions | statement ; + +statement ::= if_block | loop_for | do_loop | asignacion + |funcionCall FIN + | escribe | lee + | NAME error {: parser.report_error(" Expresion no se esperaba.",sym.ERROR); :} ; + +escribe ::= WRITE cadena_s FIN + | WRITE nombre FIN + | WRITE error {: parser.report_error("Se esperaba cadena o variable",sym.WRITE);:} + | WRITELN nombre FIN + | WRITELN cadena_s FIN + | WRITELN error {: parser.report_error("Se esperaba cadena o variable",sym.WRITELN); :}; + +lee ::= INPUT nombre FIN + | INPUT error {: parser.report_error(" Se esperaba variable",sym.ERROR); :} ; + + +asignacion ::= nombre IGUAL expression FIN + | nombre IGUAL error FIN {: parser.report_error("No se puede asignar valor, error en expresion ",sym.ERROR); :}; + +nombre ::= NAME:n1 {: Tipo tmp = ambito.BuscarEnTabla(n1); + System.out.println(tmp.toString()); + :} + | NAME PUNTO NAME + | NAME PUNTO error {: parser.report_error(" Error de en asignacion ",sym.ERROR); :}; + + +expression ::= expression MAS termino + | expression MENOS termino + | termino + | expression IGUAL termino; + + +termino ::= factor POR termino + | factor ENTRE termino + | factor OPREL termino + | factor; + + +factor ::= PARDER expression PARIZQ + | NOT factor + | NUM + | nombre + | TRUE + | FALSE + | cadena_s + | funcionCall; + +cadena_s ::= CADENA SALTOCADENA FIN cadena_s + |CADENA + |CADENA SALTOCADENA error {: parser.report_error("Se esperaba nueva cadena",sym.ERROR); :}; + + +funcionCall ::= NAME PARDER parametros ; + +parametros ::= expression paramHelper + | salir_param; + +paramHelper ::= SEPARADOR expression paramHelper + | salir_param; + +salir_param ::= PARIZQ; // | error {: parser.report_error("Se esperaba )",sym.ERROR); :}; + + +/*---Declaracion de argumentos ---*/ + + + +argumentlist ::= PARDER schrodingerArgument; + + +schrodingerArgument ::= argument argumentlistHelper + | PARIZQ + | error {: parser.report_error("error de argumentos",sym.ERROR); :}; + + +argumentlistHelper ::= SEPARADOR argument argumentlistHelper + | PARIZQ + |error PARIZQ {: parser.report_error("error de argumentos",sym.ERROR); :}; + +argument ::= REF NAME:n1 AS tipo:t {: parser.ambito.agregarATabla(n1,t); + parser.tmp_tipo.metodo_var.add(t); + :} + | REF NAME AS error {: parser.report_error(" error en argumento, se esperaba un tipo de dato",sym.ERROR); :} + | REF NAME error {: parser.report_error(" error en argumento, se esperaba As ",sym.ERROR); :} + + | REF error AS tipo {: parser.report_error(" error en argumento, no existe nombre de argumento",sym.NAME); :} + | error NAME AS tipo{: parser.report_error("error en argumento, no existe tipo de referencia",sym.ERROR); :}; + + + + +/*---if-----*/ +//Ya revisado, bexpression es lo que hay que ver + +if_block ::= IF expression THEN FIN bloque if_inner + |IF expression FIN bloque if_inner + |IF expression THEN FIN if_inner + |IF expression FIN if_inner + |IF error FIN if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + |IF error THEN FIN if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + |IF error FIN bloque if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + |IF error THEN FIN bloque if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :}; + + + +if_inner ::= salir_if FIN + | ELSE FIN bloque salir_if FIN + | ELSE FIN salir_if FIN + | ELSE error {: parser.report_error("Error en expresion Else",sym.ERROR); :} + | ELSEIF expression FIN bloque if_inner + | ELSEIF expression THEN FIN bloque if_inner + | ELSEIF expression FIN if_inner + | ELSEIF expression THEN FIN if_inner + | ELSEIF error FIN if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + | ELSEIF error THEN FIN if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + | ELSEIF error FIN bloque if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + | ELSEIF error THEN FIN bloque if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + | ELSE FIN error salir_if FIN {: parser.report_error("Sentencia inesperada despues del Else",sym.ERROR); :} + | error salir_if{: parser.report_error("Error del bloque if, sentencia no esperada",sym.ERROR); :}; + +salir_if ::= END IF + | END error {:parser.report_error("Se esperaba End If",sym.ERROR); :}; + +/*--- do y for --*/ +do_loop ::= DO WHILE expression FIN bloque salir_loop + | DO WHILE expression FIN salir_loop + | DO error expression FIN bloque salir_loop {: parser.report_error("Se esperaba While ",sym.ERROR); :} + | DO error expression FIN salir_loop {: parser.report_error("Se esperaba While ",sym.ERROR); :} + | DO WHILE error FIN salir_loop {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + | DO WHILE error FIN bloque salir_loop {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :}; + + +salir_loop ::= LOOP FIN + |error {: parser.report_error("se esperaba salida de while",sym.ERROR); :}; + +loop_for ::= FOR rango FIN bloque NEXT FIN + | FOR rango FIN NEXT FIN + | FOR error FIN NEXT FIN {: parser.report_error("Error en rango",sym.ERROR); :} + | FOR error FIN bloque NEXT FIN {: parser.report_error("Error en rango",sym.ERROR); :} + | FOR rango FIN error {: parser.report_error("Se esperaba un Next",sym.NEXT); :} + | FOR rango FIN bloque error {: parser.report_error("Se esperaba un Next",sym.NEXT); :}; + +rango ::= NAME IGUAL expression TO expression + | NAME IGUAL TO error {: parser.report_error("Error de rangos, no existe valor inicial",sym.ERROR); :} + | NAME IGUAL error TO {: parser.report_error("Error de rangos, valor inicial y final",sym.ERROR); :} + | NAME IGUAL error {: parser.report_error("Error de rangos/asignacion",sym.ERROR); :} + | NAME IGUAL error TO error {: parser.report_error("Error de rangos",sym.ERROR); :} + | NAME IGUAL expression TO error {: parser.report_error("Se esperaba valor de final",sym.ERROR); :} + | NAME IGUAL error TO expression {: parser.report_error("Se esperaba valor de inicio",sym.ERROR); :} + +; + +/*---- estructuras ---*/ + + + +dectype ::= TYPE NAME:n1 FIN {: if(parser.first_time) {parser.tmp_tipo = new Tipo(n1); parser.tmp_tipo.setTipoFinal(3);} :} list_declar2 end_type FIN + {: if(parser.first_time) {parser.seen_types.put(n1,parser.tmp_tipo); + } :} + | TYPE NAME error end_type FIN {: parser.report_error(" estructura no puede estar vacia",sym.ERROR); :} ; + + +list_declar2 ::= variables_declar2 list_declar2 + | variables_declar2; + +variables_declar2 ::= declaracion2 FIN; + +declaracion2 ::= DIM NAME:n1 AS tipo:t1 {: if(parser.first_time) parser.tmp_tipo.agregar_atributos(n1,t1); :} + | NAME:n1 AS tipo:t1 {: if( parser.first_time) parser.tmp_tipo.agregar_atributos(n1,t1); :} + | error {: parser.report_error("Se esperaba As ",sym.ERROR); :}; + + diff --git a/Main.java b/Main.java index 9b41265..b1c9c08 100644 --- a/Main.java +++ b/Main.java @@ -19,18 +19,32 @@ static public void main(String[] args) throws java.io.IOException { parser_obj.seen_types = seen_types; System.out.println(mis); Symbol parse_tree = null; + + //Primera pasada try { if (do_debug_parse) parse_tree = parser_obj.debug_parse(); else parse_tree = parser_obj.parse(); if (!parser_obj.has_main) - System.out.println("No tiene main!!"); - for( Registro reg:parser_obj.ambito.filas){ - System.out.println(reg); - } - System.out.println(seen_types.get("prueba")); - - + System.out.println("No tiene main!!"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Horror"); + } + + //Segunda pasada + //System.out.println(Tabla_simbolos.toString()); + + parser parser_obj2 = new parser(new prueba(new FileReader(archivo))); + parser_obj2.first_time = false; + parser_obj2.ambito = Tabla_simbolos; + parser_obj2.seen_types = seen_types; + System.out.println(mis); + parse_tree = null; + try { + if (do_debug_parse) + parse_tree = parser_obj2.debug_parse(); + else parse_tree = parser_obj2.parse(); } catch (Exception e) { e.printStackTrace(); System.out.println("Horror"); @@ -44,13 +58,17 @@ static public void main(String[] args) throws java.io.IOException { public static void iniciarTipos(){ - seen_types = new HashMap(); + seen_types = new HashMap(); seen_types.put("string",new Tipo("string")); seen_types.put("char",new Tipo("char")); seen_types.put("boolean",new Tipo("boolean")); seen_types.put("integer",new Tipo("integer")); seen_types.put("variant",new Tipo("variant")); + seen_types.put("error", new Tipo("error")); } + + + static public String recovery_string(String path){ File file = new File(path); String writeTo = ""; diff --git a/Objeto.java b/Objeto.java new file mode 100644 index 0000000..3d3a17d --- /dev/null +++ b/Objeto.java @@ -0,0 +1,11 @@ + + +public class Objeto{ + + Tipo t; + int SizeChain; + public Objeto(Tipo enviado){ + t = enviado; + SizeChain = 0; + } +} diff --git a/Probando_declar.vb b/Probando_declar.vb index 8f65813..db73978 100644 --- a/Probando_declar.vb +++ b/Probando_declar.vb @@ -1,12 +1,35 @@ Dim a as integer Dim b as boolean Dim c,d,e as Boolean +Dim f as empleado -Sub main() + +function fx (Byval a as integer,ByRef c as boolean) as integer + +end function + +Sub main() + Dim a as boolean + Dim c, b as string + Dim g as char + Dim x as string + g = "h" + b = fx(3,true) End sub + Type prueba - Dim x as integer esto as boolean end type + +Dim y as prueba + +Type sup + aquello as boolean +end type + + +Type empleado + dim h as integer +end type diff --git a/Registro.java b/Registro.java index 002628c..7845974 100644 --- a/Registro.java +++ b/Registro.java @@ -2,14 +2,12 @@ class Registro{ String id; Tipo type; - int linea; - public Registro(String nombre, Tipo t,int line){ + public Registro(String nombre, Tipo t){ this.id = nombre; this.type = t; - int linea = line; } public String toString(){ - return id + " -- "+type.toString() + "-- "+ linea; + return id + " -- "+type.toString(); } } diff --git a/Tipo.java b/Tipo.java index b0cb670..b0d3cad 100644 --- a/Tipo.java +++ b/Tipo.java @@ -4,24 +4,55 @@ class Tipo{ private String name; - private int esFuncion; - //0 no es funcion ni sub - //1 es funcion - //2 es sub - + private int TipoFinal; + ArrayList metodo_var = new ArrayList(); HashMap atributos = new HashMap(); + // funciones va a estar definida de la siguiente forma // cada posicion en el arraylist son los tipos de parametro // excepto la ultima que sera el valor de retorno public Tipo(String nombre){ this.name = nombre; } + + public String getName(){ + return this.name; + } + public void setTipoFinal(int tipo){ + //0 no es funcion ni sub + //1 es funcion + //2 es sub + //3 es estructura + if (tipo > 3 || tipo < 0) + return; + this.TipoFinal = tipo; + } + + + public int getTipoFinal(){ + return TipoFinal; + } + + + public String toString(){ - if ( atributos.size() == 0) + if ( atributos.size() == 0 && this.TipoFinal == 0) return name; + else if( this.TipoFinal == 1){ + StringBuffer sb = new StringBuffer(); + sb.append(name + ":"); + for( int i = 0; i < this.metodo_var.size() - 1; i++){ + sb.append( this.metodo_var.get(i).toString()); + sb.append("x"); + } + String tmp = sb.toString(); + tmp = tmp.substring(0,tmp.length()-1); + tmp += "---->" + this.metodo_var.get( metodo_var.size() -1).toString() ; + return tmp; + } else{ String cad = name + ": record(" ; StringBuffer sb = new StringBuffer(); @@ -37,9 +68,14 @@ public String toString(){ } } - public void agregar_atributos(String s,Tipo t){ - atributos.put(s,t); - } + public boolean agregar_atributos(String s,Tipo t){ + boolean agregado = false; + if( atributos.get(s) == null) + agregado = true; + if(agregado) + atributos.put(s,t); + return agregado; + } } diff --git a/parser.java b/parser.java index 03bc535..ab7c62b 100644 --- a/parser.java +++ b/parser.java @@ -1,14 +1,14 @@ //---------------------------------------------------- // The following code was generated by CUP v0.10k -// Sun Apr 22 22:51:20 CST 2012 +// Fri May 04 02:05:39 CST 2012 //---------------------------------------------------- import java_cup.runtime.*; -import java.util.HashMap; +import java.util.*; /** CUP v0.10k generated parser. - * @version Sun Apr 22 22:51:20 CST 2012 + * @version Fri May 04 02:05:39 CST 2012 */ public class parser extends java_cup.runtime.lr_parser { @@ -21,58 +21,60 @@ public class parser extends java_cup.runtime.lr_parser { /** Production table. */ protected static final short _production_table[][] = unpackFromStrings(new String[] { - "\000\247\000\002\007\004\000\002\002\004\000\002\007" + - "\003\000\002\007\003\000\002\007\002\000\002\013\004" + - "\000\002\013\003\000\002\010\004\000\002\010\003\000" + - "\002\010\003\000\002\010\004\000\002\036\004\000\002" + - "\012\004\000\002\011\007\000\002\011\005\000\002\011" + + "\000\256\000\002\011\004\000\002\002\004\000\002\011" + + "\003\000\002\011\003\000\002\011\002\000\002\015\004" + + "\000\002\015\003\000\002\012\004\000\002\012\003\000" + + "\002\012\003\000\002\012\004\000\002\036\004\000\002" + + "\014\004\000\002\013\007\000\002\013\005\000\002\013" + "\003\000\002\003\003\000\002\003\005\000\002\003\005" + - "\000\002\004\003\000\002\004\003\000\002\006\003\000" + - "\002\006\003\000\002\060\010\000\002\061\011\000\002" + - "\061\011\000\002\061\005\000\002\061\012\000\002\061" + - "\010\000\002\061\005\000\002\037\004\000\002\037\003" + - "\000\002\053\005\000\002\053\004\000\002\053\004\000" + - "\002\042\005\000\002\042\004\000\002\042\005\000\002" + - "\043\004\000\002\043\004\000\002\044\005\000\002\044" + - "\005\000\002\044\004\000\002\030\003\000\002\030\004" + - "\000\002\030\004\000\002\030\005\000\002\030\003\000" + - "\002\030\004\000\002\030\003\000\002\022\004\000\002" + - "\022\003\000\002\023\004\000\002\023\003\000\002\005" + - "\003\000\002\005\003\000\002\005\003\000\002\005\003" + - "\000\002\005\004\000\002\005\003\000\002\005\003\000" + - "\002\005\004\000\002\056\005\000\002\056\005\000\002" + - "\056\004\000\002\056\005\000\002\056\005\000\002\056" + - "\004\000\002\057\005\000\002\057\004\000\002\020\006" + - "\000\002\020\006\000\002\041\003\000\002\041\005\000" + - "\002\041\005\000\002\024\005\000\002\024\005\000\002" + - "\024\003\000\002\024\005\000\002\050\005\000\002\050" + - "\005\000\002\050\005\000\002\050\003\000\002\051\005" + - "\000\002\051\004\000\002\051\003\000\002\051\003\000" + - "\002\051\005\000\002\051\003\000\002\051\003\000\002" + - "\051\003\000\002\051\003\000\002\034\006\000\002\034" + - "\003\000\002\034\005\000\002\052\005\000\002\047\004" + - "\000\002\047\003\000\002\046\005\000\002\046\003\000" + - "\002\035\003\000\002\026\004\000\002\017\004\000\002" + - "\017\003\000\002\017\003\000\002\027\005\000\002\027" + - "\003\000\002\027\004\000\002\025\006\000\002\025\006" + - "\000\002\025\005\000\002\025\006\000\002\025\006\000" + + "\000\002\005\003\000\002\005\003\000\002\010\003\000" + + "\002\010\003\000\002\052\010\000\002\053\011\000\002" + + "\053\011\000\002\053\005\000\002\053\012\000\002\053" + + "\010\000\002\053\005\000\002\054\003\000\002\055\003" + + "\000\002\037\004\000\002\037\003\000\002\037\004\000" + + "\002\047\005\000\002\047\004\000\002\047\004\000\002" + + "\041\005\000\002\041\004\000\002\041\005\000\002\042" + + "\004\000\002\042\004\000\002\043\005\000\002\043\005" + + "\000\002\043\004\000\002\031\003\000\002\031\004\000" + + "\002\031\004\000\002\031\005\000\002\031\003\000\002" + + "\031\004\000\002\031\003\000\002\024\004\000\002\024" + + "\003\000\002\025\004\000\002\025\003\000\002\007\003" + + "\000\002\007\003\000\002\007\003\000\002\007\003\000" + + "\002\007\004\000\002\007\003\000\002\007\003\000\002" + + "\007\004\000\002\061\005\000\002\061\005\000\002\061" + + "\004\000\002\061\005\000\002\061\005\000\002\061\004" + + "\000\002\060\005\000\002\060\004\000\002\022\006\000" + + "\002\022\006\000\002\065\003\000\002\065\005\000\002" + + "\065\005\000\002\064\005\000\002\064\005\000\002\064" + + "\003\000\002\064\005\000\002\062\005\000\002\062\005" + + "\000\002\062\005\000\002\062\003\000\002\063\005\000" + + "\002\063\004\000\002\063\003\000\002\063\003\000\002" + + "\063\003\000\002\063\003\000\002\063\003\000\002\063" + + "\003\000\002\004\006\000\002\004\003\000\002\004\005" + + "\000\002\066\002\000\002\006\006\000\002\067\002\000" + + "\002\046\005\000\002\046\003\000\002\070\002\000\002" + + "\045\006\000\002\045\003\000\002\035\003\000\002\027" + + "\004\000\002\021\004\000\002\021\003\000\002\021\003" + + "\000\002\030\005\000\002\030\003\000\002\030\004\000" + + "\002\026\006\000\002\026\006\000\002\026\005\000\002" + + "\026\006\000\002\026\006\000\002\020\010\000\002\020" + + "\007\000\002\020\007\000\002\020\006\000\002\020\006" + + "\000\002\020\007\000\002\020\007\000\002\020\010\000" + + "\002\023\004\000\002\023\007\000\002\023\006\000\002" + + "\023\004\000\002\023\007\000\002\023\010\000\002\023" + + "\006\000\002\023\007\000\002\023\006\000\002\023\007" + + "\000\002\023\007\000\002\023\010\000\002\023\007\000" + + "\002\023\004\000\002\040\004\000\002\040\004\000\002" + + "\056\003\000\002\057\003\000\002\017\010\000\002\017" + + "\007\000\002\017\010\000\002\017\007\000\002\017\007" + + "\000\002\017\010\000\002\051\004\000\002\051\003\000" + "\002\016\010\000\002\016\007\000\002\016\007\000\002" + - "\016\006\000\002\016\006\000\002\016\007\000\002\016" + - "\007\000\002\016\010\000\002\021\004\000\002\021\007" + - "\000\002\021\006\000\002\021\004\000\002\021\007\000" + - "\002\021\010\000\002\021\006\000\002\021\007\000\002" + - "\021\006\000\002\021\007\000\002\021\007\000\002\021" + - "\010\000\002\021\007\000\002\021\004\000\002\040\004" + - "\000\002\040\004\000\002\015\010\000\002\015\007\000" + - "\002\015\010\000\002\015\007\000\002\015\007\000\002" + - "\015\010\000\002\055\004\000\002\055\003\000\002\014" + - "\010\000\002\014\007\000\002\014\007\000\002\014\010" + - "\000\002\014\006\000\002\014\007\000\002\054\007\000" + - "\002\054\006\000\002\054\006\000\002\054\005\000\002" + - "\054\007\000\002\054\007\000\002\054\007\000\002\062" + - "\002\000\002\045\011\000\002\045\007\000\002\032\004" + - "\000\002\032\003\000\002\031\004\000\002\033\006\000" + - "\002\033\005\000\002\033\003" }); + "\016\010\000\002\016\006\000\002\016\007\000\002\050" + + "\007\000\002\050\006\000\002\050\006\000\002\050\005" + + "\000\002\050\007\000\002\050\007\000\002\050\007\000" + + "\002\071\002\000\002\044\011\000\002\044\007\000\002" + + "\033\004\000\002\033\003\000\002\032\004\000\002\034" + + "\006\000\002\034\005\000\002\034\003" }); /** Access to production table. */ public short[][] production_table() {return _production_table;} @@ -80,412 +82,419 @@ public class parser extends java_cup.runtime.lr_parser { /** Parse-action table. */ protected static final short[][] _action_table = unpackFromStrings(new String[] { - "\000\u0148\000\020\002\ufffd\003\016\011\004\013\011\015" + - "\014\016\020\047\013\001\002\000\006\003\u0140\034\u0143" + - "\001\002\000\004\002\u013f\001\002\000\016\002\uffec\003" + - "\uffec\011\uffec\015\uffec\016\uffec\047\uffec\001\002\000\016" + - "\002\uffeb\003\uffeb\011\uffeb\015\uffeb\016\uffeb\047\uffeb\001" + + "\000\u014f\000\020\002\ufffd\003\016\011\004\013\011\015" + + "\014\016\020\050\013\001\002\000\006\003\u0147\034\u014a" + + "\001\002\000\004\002\u0146\001\002\000\016\002\uffec\003" + + "\uffec\011\uffec\015\uffec\016\uffec\050\uffec\001\002\000\016" + + "\002\uffeb\003\uffeb\011\uffeb\015\uffeb\016\uffeb\050\uffeb\001" + "\002\000\016\002\ufff8\003\ufff8\011\ufff8\015\ufff8\016\ufff8" + - "\047\ufff8\001\002\000\016\002\ufffe\003\016\011\004\015" + - "\014\016\020\047\013\001\002\000\004\002\uffff\001\002" + - "\000\004\034\u0126\001\002\000\004\034\u011b\001\002\000" + - "\004\013\u011a\001\002\000\004\013\u0119\001\002\000\016" + - "\002\ufffb\003\016\011\004\015\014\016\020\047\013\001" + + "\050\ufff8\001\002\000\016\002\ufffe\003\016\011\004\015" + + "\014\016\020\050\013\001\002\000\004\002\uffff\001\002" + + "\000\004\034\u012d\001\002\000\004\034\u0122\001\002\000" + + "\004\013\u0120\001\002\000\004\013\u011f\001\002\000\016" + + "\002\ufffb\003\016\011\004\015\014\016\020\050\013\001" + "\002\000\006\003\022\034\023\001\002\000\016\002\ufff9" + - "\003\ufff9\011\ufff9\015\ufff9\016\ufff9\047\ufff9\001\002\000" + - "\004\013\u0117\001\002\000\006\003\024\005\025\001\002" + - "\000\022\002\uffe4\003\uffe4\006\u010f\011\uffe4\013\u0110\015" + - "\uffe4\016\uffe4\047\uffe4\001\002\000\010\003\371\006\372" + - "\014\370\001\002\000\006\003\030\010\027\001\002\000" + - "\006\034\365\036\366\001\002\000\004\013\uffe2\001\002" + - "\000\004\013\032\001\002\000\030\003\060\004\053\011" + - "\004\021\045\025\041\026\062\034\043\037\047\040\040" + - "\041\034\050\033\001\002\000\010\003\360\015\357\016" + - "\361\001\002\000\006\003\354\034\231\001\002\000\004" + - "\017\347\001\002\000\036\003\uffcc\004\053\020\uffcc\021" + - "\045\023\uffcc\024\uffcc\025\uffcc\026\062\027\uffcc\034\043" + - "\037\047\040\040\041\034\050\uffcc\001\002\000\036\003" + - "\uffc9\004\uffc9\020\uffc9\021\uffc9\023\uffc9\024\uffc9\025\uffc9" + - "\026\uffc9\027\uffc9\034\uffc9\037\uffc9\040\uffc9\041\uffc9\050" + - "\uffc9\001\002\000\010\003\342\034\231\052\071\001\002" + - "\000\004\016\340\001\002\000\020\003\uffd6\020\uffd6\023" + - "\uffd6\024\uffd6\025\uffd6\027\uffd6\050\033\001\002\000\012" + - "\003\336\005\110\017\uffb9\051\234\001\002\000\004\025" + - "\333\001\002\000\022\003\241\005\102\031\072\032\073" + - "\033\076\034\105\052\071\053\103\001\002\000\036\003" + - "\uffc8\004\uffc8\020\uffc8\021\uffc8\023\uffc8\024\uffc8\025\uffc8" + - "\026\uffc8\027\uffc8\034\uffc8\037\uffc8\040\uffc8\041\uffc8\050" + - "\uffc8\001\002\000\010\003\230\034\231\052\071\001\002" + - "\000\036\003\uffd2\004\053\020\uffd2\021\045\023\uffd2\024" + - "\uffd2\025\uffd2\026\062\027\uffd2\034\043\037\047\040\040" + - "\041\034\050\033\001\002\000\036\003\uffca\004\uffca\020" + - "\uffca\021\uffca\023\uffca\024\uffca\025\uffca\026\uffca\027\uffca" + - "\034\uffca\037\uffca\040\uffca\041\uffca\050\uffca\001\002\000" + - "\004\013\223\001\002\000\006\003\177\030\200\001\002" + - "\000\040\003\uffce\004\uffce\011\004\020\uffce\021\uffce\023" + - "\uffce\024\uffce\025\uffce\026\uffce\027\uffce\034\uffce\037\uffce" + - "\040\uffce\041\uffce\050\uffce\001\002\000\016\003\uffd0\020" + - "\uffd0\023\uffd0\024\uffd0\025\uffd0\027\uffd0\001\002\000\004" + - "\013\175\001\002\000\004\013\174\001\002\000\004\013" + - "\173\001\002\000\036\003\uffcb\004\uffcb\020\uffcb\021\uffcb" + - "\023\uffcb\024\uffcb\025\uffcb\026\uffcb\027\uffcb\034\uffcb\037" + - "\uffcb\040\uffcb\041\uffcb\050\uffcb\001\002\000\006\003\065" + - "\034\067\001\002\000\036\003\uffc6\004\uffc6\020\uffc6\021" + - "\uffc6\023\uffc6\024\uffc6\025\uffc6\026\uffc6\027\uffc6\034\uffc6" + - "\037\uffc6\040\uffc6\041\uffc6\050\uffc6\001\002\000\036\003" + - "\uffc5\004\uffc5\020\uffc5\021\uffc5\023\uffc5\024\uffc5\025\uffc5" + - "\026\uffc5\027\uffc5\034\uffc5\037\uffc5\040\uffc5\041\uffc5\050" + - "\uffc5\001\002\000\004\013\165\001\002\000\004\013\155" + - "\001\002\000\004\017\070\001\002\000\024\003\101\005" + - "\102\007\074\031\072\032\073\033\076\034\105\052\071" + - "\053\103\001\002\000\032\006\uffa4\007\uffa4\012\uffa4\013" + - "\uffa4\017\uffa4\022\uffa4\035\uffa4\042\uffa4\043\uffa4\044\uffa4" + - "\045\uffa4\054\151\001\002\000\030\006\uffac\007\uffac\012" + - "\uffac\013\uffac\017\uffac\022\uffac\035\uffac\042\uffac\043\uffac" + - "\044\uffac\045\uffac\001\002\000\030\006\uffa9\007\uffa9\012" + - "\uffa9\013\uffa9\017\uffa9\022\uffa9\035\uffa9\042\uffa9\043\uffa9" + - "\044\uffa9\045\uffa9\001\002\000\004\003\150\001\002\000" + - "\022\006\uffb4\007\uffb4\012\uffb4\013\uffb4\017\uffb4\022\uffb4" + - "\044\uffb4\045\uffb4\001\002\000\030\006\uffa8\007\uffa8\012" + - "\uffa8\013\uffa8\017\uffa8\022\uffa8\035\uffa8\042\uffa8\043\uffa8" + - "\044\uffa8\045\uffa8\001\002\000\012\007\145\017\120\044" + - "\116\045\122\001\002\000\030\006\uffaf\007\uffaf\012\uffaf" + - "\013\uffaf\017\uffaf\022\uffaf\035\137\042\141\043\140\044" + - "\uffaf\045\uffaf\001\002\000\006\007\134\013\uff67\001\002" + - "\000\020\005\102\031\072\032\073\033\076\034\105\052" + - "\071\053\103\001\002\000\020\005\102\031\072\032\073" + - "\033\076\034\105\052\071\053\103\001\002\000\030\006" + - "\uffa6\007\uffa6\012\uffa6\013\uffa6\017\uffa6\022\uffa6\035\uffa6" + - "\042\uffa6\043\uffa6\044\uffa6\045\uffa6\001\002\000\034\005" + - "\110\006\uffab\007\uffab\012\uffab\013\uffab\017\uffab\022\uffab" + - "\035\uffab\042\uffab\043\uffab\044\uffab\045\uffab\051\107\001" + - "\002\000\030\006\uffa7\007\uffa7\012\uffa7\013\uffa7\017\uffa7" + - "\022\uffa7\035\uffa7\042\uffa7\043\uffa7\044\uffa7\045\uffa7\001" + - "\002\000\004\034\130\001\002\000\022\005\102\006\111" + - "\031\072\032\073\033\076\034\105\052\071\053\103\001" + - "\002\000\030\006\uff9d\007\uff9d\012\uff9d\013\uff9d\017\uff9d" + - "\022\uff9d\035\uff9d\042\uff9d\043\uff9d\044\uff9d\045\uff9d\001" + - "\002\000\014\006\111\012\121\017\120\044\116\045\122" + - "\001\002\000\030\006\uffa2\007\uffa2\012\uffa2\013\uffa2\017" + - "\uffa2\022\uffa2\035\uffa2\042\uffa2\043\uffa2\044\uffa2\045\uffa2" + - "\001\002\000\030\006\uffa0\007\uffa0\012\uffa0\013\uffa0\017" + - "\uffa0\022\uffa0\035\uffa0\042\uffa0\043\uffa0\044\uffa0\045\uffa0" + - "\001\002\000\030\006\uffa1\007\uffa1\012\uffa1\013\uffa1\017" + - "\uffa1\022\uffa1\035\uffa1\042\uffa1\043\uffa1\044\uffa1\045\uffa1" + - "\001\002\000\020\005\102\031\072\032\073\033\076\034" + - "\105\052\071\053\103\001\002\000\030\006\uff9e\007\uff9e" + - "\012\uff9e\013\uff9e\017\uff9e\022\uff9e\035\uff9e\042\uff9e\043" + - "\uff9e\044\uff9e\045\uff9e\001\002\000\020\005\102\031\072" + - "\032\073\033\076\034\105\052\071\053\103\001\002\000" + - "\020\005\102\031\072\032\073\033\076\034\105\052\071" + - "\053\103\001\002\000\020\005\102\031\072\032\073\033" + - "\076\034\105\052\071\053\103\001\002\000\022\006\uffb5" + - "\007\uffb5\012\uffb5\013\uffb5\017\uffb5\022\uffb5\044\uffb5\045" + - "\uffb5\001\002\000\014\006\111\012\121\017\120\044\116" + - "\045\122\001\002\000\030\006\uff9f\007\uff9f\012\uff9f\013" + - "\uff9f\017\uff9f\022\uff9f\035\uff9f\042\uff9f\043\uff9f\044\uff9f" + - "\045\uff9f\001\002\000\022\006\uffb3\007\uffb3\012\uffb3\013" + - "\uffb3\017\uffb3\022\uffb3\044\uffb3\045\uffb3\001\002\000\022" + - "\006\uffb6\007\uffb6\012\uffb6\013\uffb6\017\uffb6\022\uffb6\044" + - "\uffb6\045\uffb6\001\002\000\030\006\uffaa\007\uffaa\012\uffaa" + - "\013\uffaa\017\uffaa\022\uffaa\035\uffaa\042\uffaa\043\uffaa\044" + - "\uffaa\045\uffaa\001\002\000\030\006\uffad\007\uffad\012\uffad" + - "\013\uffad\017\uffad\022\uffad\035\uffad\042\uffad\043\uffad\044" + - "\uffad\045\uffad\001\002\000\012\006\133\017\120\044\116" + - "\045\122\001\002\000\030\006\uffae\007\uffae\012\uffae\013" + - "\uffae\017\uffae\022\uffae\035\uffae\042\uffae\043\uffae\044\uffae" + - "\045\uffae\001\002\000\024\003\136\005\102\013\uff68\031" + - "\072\032\073\033\076\034\105\052\071\053\103\001\002" + - "\000\012\013\uff64\017\120\044\116\045\122\001\002\000" + - "\004\013\uff66\001\002\000\020\005\102\031\072\032\073" + - "\033\076\034\105\052\071\053\103\001\002\000\020\005" + - "\102\031\072\032\073\033\076\034\105\052\071\053\103" + - "\001\002\000\020\005\102\031\072\032\073\033\076\034" + - "\105\052\071\053\103\001\002\000\022\006\uffb2\007\uffb2" + - "\012\uffb2\013\uffb2\017\uffb2\022\uffb2\044\uffb2\045\uffb2\001" + + "\003\ufff9\011\ufff9\015\ufff9\016\ufff9\050\ufff9\001\002\000" + + "\004\013\u011d\001\002\000\006\003\uffe3\005\uffe3\001\002" + + "\000\006\003\026\005\025\001\002\000\010\003\u0105\006" + + "\u0106\014\u0104\001\002\000\022\002\uffe4\003\uffe4\006\373" + + "\011\uffe4\013\374\015\uffe4\016\uffe4\050\uffe4\001\002\000" + + "\006\003\031\010\030\001\002\000\006\003\371\036\372" + + "\001\002\000\004\013\uffe0\001\002\000\004\013\033\001" + + "\002\000\030\003\061\004\055\011\004\021\046\025\042" + + "\026\063\034\043\040\050\041\041\042\035\051\034\001" + + "\002\000\010\003\365\015\364\016\366\001\002\000\006" + + "\003\361\034\240\001\002\000\004\017\354\001\002\000" + + "\036\003\uffc9\004\055\020\uffc9\021\046\023\uffc9\024\uffc9" + + "\025\uffc9\026\063\027\uffc9\034\043\040\050\041\041\042" + + "\035\051\uffc9\001\002\000\036\003\uffc6\004\uffc6\020\uffc6" + + "\021\uffc6\023\uffc6\024\uffc6\025\uffc6\026\uffc6\027\uffc6\034" + + "\uffc6\040\uffc6\041\uffc6\042\uffc6\051\uffc6\001\002\000\010" + + "\003\347\034\240\037\073\001\002\000\004\016\345\001" + + "\002\000\012\003\344\005\112\017\uffb6\052\111\001\002" + + "\000\020\003\uffd3\020\uffd3\023\uffd3\024\uffd3\025\uffd3\027" + + "\uffd3\051\034\001\002\000\004\025\340\001\002\000\022" + + "\003\246\005\103\031\072\032\075\033\077\034\107\037" + + "\073\053\104\001\002\000\036\003\uffc7\004\uffc7\020\uffc7" + + "\021\uffc7\023\uffc7\024\uffc7\025\uffc7\026\uffc7\027\uffc7\034" + + "\uffc7\040\uffc7\041\uffc7\042\uffc7\051\uffc7\001\002\000\010" + + "\003\237\034\240\037\073\001\002\000\036\003\uffc5\004" + + "\uffc5\020\uffc5\021\uffc5\023\uffc5\024\uffc5\025\uffc5\026\uffc5" + + "\027\uffc5\034\uffc5\040\uffc5\041\uffc5\042\uffc5\051\uffc5\001" + + "\002\000\036\003\uffcf\004\055\020\uffcf\021\046\023\uffcf" + + "\024\uffcf\025\uffcf\026\063\027\uffcf\034\043\040\050\041" + + "\041\042\035\051\034\001\002\000\004\013\232\001\002" + + "\000\040\003\uffcb\004\uffcb\011\004\020\uffcb\021\uffcb\023" + + "\uffcb\024\uffcb\025\uffcb\026\uffcb\027\uffcb\034\uffcb\040\uffcb" + + "\041\uffcb\042\uffcb\051\uffcb\001\002\000\006\003\204\030" + + "\205\001\002\000\016\003\uffcd\020\uffcd\023\uffcd\024\uffcd" + + "\025\uffcd\027\uffcd\001\002\000\004\013\203\001\002\000" + + "\004\013\202\001\002\000\004\013\201\001\002\000\036" + + "\003\uffc8\004\uffc8\020\uffc8\021\uffc8\023\uffc8\024\uffc8\025" + + "\uffc8\026\uffc8\027\uffc8\034\uffc8\040\uffc8\041\uffc8\042\uffc8" + + "\051\uffc8\001\002\000\006\003\067\034\070\001\002\000" + + "\036\003\uffc3\004\uffc3\020\uffc3\021\uffc3\023\uffc3\024\uffc3" + + "\025\uffc3\026\uffc3\027\uffc3\034\uffc3\040\uffc3\041\uffc3\042" + + "\uffc3\051\uffc3\001\002\000\036\003\uffc2\004\uffc2\020\uffc2" + + "\021\uffc2\023\uffc2\024\uffc2\025\uffc2\026\uffc2\027\uffc2\034" + + "\uffc2\040\uffc2\041\uffc2\042\uffc2\051\uffc2\001\002\000\004" + + "\013\171\001\002\000\004\013\163\001\002\000\004\017" + + "\071\001\002\000\024\003\102\005\103\007\076\031\072" + + "\032\075\033\077\034\107\037\073\053\104\001\002\000" + + "\030\006\uffa9\007\uffa9\012\uffa9\013\uffa9\017\uffa9\022\uffa9" + + "\035\uffa9\043\uffa9\044\uffa9\045\uffa9\046\uffa9\001\002\000" + + "\032\006\uffa2\007\uffa2\012\uffa2\013\uffa2\017\uffa2\022\uffa2" + + "\035\uffa2\043\uffa2\044\uffa2\045\uffa2\046\uffa2\054\157\001" + "\002\000\022\006\uffb1\007\uffb1\012\uffb1\013\uffb1\017\uffb1" + - "\022\uffb1\044\uffb1\045\uffb1\001\002\000\022\006\uffb0\007" + - "\uffb0\012\uffb0\013\uffb0\017\uffb0\022\uffb0\044\uffb0\045\uffb0" + - "\001\002\000\022\003\147\005\102\031\072\032\073\033" + - "\076\034\105\052\071\053\103\001\002\000\012\013\uff6a" + - "\017\120\044\116\045\122\001\002\000\004\013\uff65\001" + - "\002\000\004\013\uff69\001\002\000\006\003\152\013\153" + + "\022\uffb1\045\uffb1\046\uffb1\001\002\000\030\006\uffa7\007" + + "\uffa7\012\uffa7\013\uffa7\017\uffa7\022\uffa7\035\uffa7\043\uffa7" + + "\044\uffa7\045\uffa7\046\uffa7\001\002\000\004\003\156\001" + + "\002\000\030\006\uffa6\007\uffa6\012\uffa6\013\uffa6\017\uffa6" + + "\022\uffa6\035\uffa6\043\uffa6\044\uffa6\045\uffa6\046\uffa6\001" + + "\002\000\012\007\153\017\122\045\121\046\123\001\002" + + "\000\030\006\uffac\007\uffac\012\uffac\013\uffac\017\uffac\022" + + "\uffac\035\145\043\147\044\146\045\uffac\046\uffac\001\002" + + "\000\006\007\142\013\uff60\001\002\000\020\005\103\031" + + "\072\032\075\033\077\034\107\037\073\053\104\001\002" + + "\000\020\005\103\031\072\032\075\033\077\034\107\037" + + "\073\053\104\001\002\000\030\006\uffa8\007\uffa8\012\uffa8" + + "\013\uffa8\017\uffa8\022\uffa8\035\uffa8\043\uffa8\044\uffa8\045" + + "\uffa8\046\uffa8\001\002\000\030\006\uffa4\007\uffa4\012\uffa4" + + "\013\uffa4\017\uffa4\022\uffa4\035\uffa4\043\uffa4\044\uffa4\045" + + "\uffa4\046\uffa4\001\002\000\034\005\112\006\uffb6\007\uffb6" + + "\012\uffb6\013\uffb6\017\uffb6\022\uffb6\035\uffb6\043\uffb6\044" + + "\uffb6\045\uffb6\046\uffb6\052\111\001\002\000\030\006\uffa5" + + "\007\uffa5\012\uffa5\013\uffa5\017\uffa5\022\uffa5\035\uffa5\043" + + "\uffa5\044\uffa5\045\uffa5\046\uffa5\001\002\000\006\003\135" + + "\034\136\001\002\000\022\005\uffa0\006\uffa0\031\uffa0\032" + + "\uffa0\033\uffa0\034\uffa0\037\uffa0\053\uffa0\001\002\000\022" + + "\005\103\006\114\031\072\032\075\033\077\034\107\037" + + "\073\053\104\001\002\000\030\006\uff98\007\uff98\012\uff98" + + "\013\uff98\017\uff98\022\uff98\035\uff98\043\uff98\044\uff98\045" + + "\uff98\046\uff98\001\002\000\014\006\uff9e\012\uff9e\017\122" + + "\045\121\046\123\001\002\000\030\006\uff9f\007\uff9f\012" + + "\uff9f\013\uff9f\017\uff9f\022\uff9f\035\uff9f\043\uff9f\044\uff9f" + + "\045\uff9f\046\uff9f\001\002\000\030\006\uff9c\007\uff9c\012" + + "\uff9c\013\uff9c\017\uff9c\022\uff9c\035\uff9c\043\uff9c\044\uff9c" + + "\045\uff9c\046\uff9c\001\002\000\006\006\114\012\131\001" + + "\002\000\020\005\103\031\072\032\075\033\077\034\107" + + "\037\073\053\104\001\002\000\020\005\103\031\072\032" + + "\075\033\077\034\107\037\073\053\104\001\002\000\020" + + "\005\103\031\072\032\075\033\077\034\107\037\073\053" + + "\104\001\002\000\022\006\uffb2\007\uffb2\012\uffb2\013\uffb2" + + "\017\uffb2\022\uffb2\045\uffb2\046\uffb2\001\002\000\022\006" + + "\uffb0\007\uffb0\012\uffb0\013\uffb0\017\uffb0\022\uffb0\045\uffb0" + + "\046\uffb0\001\002\000\022\006\uffb3\007\uffb3\012\uffb3\013" + + "\uffb3\017\uffb3\022\uffb3\045\uffb3\046\uffb3\001\002\000\030" + + "\006\uff9d\007\uff9d\012\uff9d\013\uff9d\017\uff9d\022\uff9d\035" + + "\uff9d\043\uff9d\044\uff9d\045\uff9d\046\uff9d\001\002\000\030" + + "\006\uff99\007\uff99\012\uff99\013\uff99\017\uff99\022\uff99\035" + + "\uff99\043\uff99\044\uff99\045\uff99\046\uff99\001\002\000\020" + + "\005\103\031\072\032\075\033\077\034\107\037\073\053" + + "\104\001\002\000\014\006\uff9b\012\uff9b\017\122\045\121" + + "\046\123\001\002\000\006\006\114\012\131\001\002\000" + + "\030\006\uff9a\007\uff9a\012\uff9a\013\uff9a\017\uff9a\022\uff9a" + + "\035\uff9a\043\uff9a\044\uff9a\045\uff9a\046\uff9a\001\002\000" + + "\030\006\uffb4\007\uffb4\012\uffb4\013\uffb4\017\uffb4\022\uffb4" + + "\035\uffb4\043\uffb4\044\uffb4\045\uffb4\046\uffb4\001\002\000" + + "\030\006\uffb5\007\uffb5\012\uffb5\013\uffb5\017\uffb5\022\uffb5" + + "\035\uffb5\043\uffb5\044\uffb5\045\uffb5\046\uffb5\001\002\000" + + "\030\006\uffaa\007\uffaa\012\uffaa\013\uffaa\017\uffaa\022\uffaa" + + "\035\uffaa\043\uffaa\044\uffaa\045\uffaa\046\uffaa\001\002\000" + + "\012\006\141\017\122\045\121\046\123\001\002\000\030" + + "\006\uffab\007\uffab\012\uffab\013\uffab\017\uffab\022\uffab\035" + + "\uffab\043\uffab\044\uffab\045\uffab\046\uffab\001\002\000\024" + + "\003\144\005\103\013\uff61\031\072\032\075\033\077\034" + + "\107\037\073\053\104\001\002\000\012\013\uff5d\017\122" + + "\045\121\046\123\001\002\000\004\013\uff5f\001\002\000" + + "\020\005\103\031\072\032\075\033\077\034\107\037\073" + + "\053\104\001\002\000\020\005\103\031\072\032\075\033" + + "\077\034\107\037\073\053\104\001\002\000\020\005\103" + + "\031\072\032\075\033\077\034\107\037\073\053\104\001" + + "\002\000\022\006\uffaf\007\uffaf\012\uffaf\013\uffaf\017\uffaf" + + "\022\uffaf\045\uffaf\046\uffaf\001\002\000\022\006\uffae\007" + + "\uffae\012\uffae\013\uffae\017\uffae\022\uffae\045\uffae\046\uffae" + + "\001\002\000\022\006\uffad\007\uffad\012\uffad\013\uffad\017" + + "\uffad\022\uffad\045\uffad\046\uffad\001\002\000\022\003\155" + + "\005\103\031\072\032\075\033\077\034\107\037\073\053" + + "\104\001\002\000\012\013\uff63\017\122\045\121\046\123" + + "\001\002\000\004\013\uff5e\001\002\000\004\013\uff62\001" + + "\002\000\006\003\160\013\161\001\002\000\030\006\uffa1" + + "\007\uffa1\012\uffa1\013\uffa1\017\uffa1\022\uffa1\035\uffa1\043" + + "\uffa1\044\uffa1\045\uffa1\046\uffa1\001\002\000\004\037\073" + "\001\002\000\030\006\uffa3\007\uffa3\012\uffa3\013\uffa3\017" + - "\uffa3\022\uffa3\035\uffa3\042\uffa3\043\uffa3\044\uffa3\045\uffa3" + - "\001\002\000\004\052\071\001\002\000\030\006\uffa5\007" + - "\uffa5\012\uffa5\013\uffa5\017\uffa5\022\uffa5\035\uffa5\042\uffa5" + - "\043\uffa5\044\uffa5\045\uffa5\001\002\000\030\003\157\004" + - "\053\011\004\021\045\026\062\027\160\034\043\037\047" + - "\040\040\041\034\050\033\001\002\000\006\003\162\027" + - "\163\001\002\000\036\003\uff6c\004\uff6c\020\uff6c\021\uff6c" + - "\023\uff6c\024\uff6c\025\uff6c\026\uff6c\027\uff6c\034\uff6c\037" + - "\uff6c\040\uff6c\041\uff6c\050\uff6c\001\002\000\004\013\161" + - "\001\002\000\036\003\uff6f\004\uff6f\020\uff6f\021\uff6f\023" + - "\uff6f\024\uff6f\025\uff6f\026\uff6f\027\uff6f\034\uff6f\037\uff6f" + - "\040\uff6f\041\uff6f\050\uff6f\001\002\000\036\003\uff6b\004" + - "\uff6b\020\uff6b\021\uff6b\023\uff6b\024\uff6b\025\uff6b\026\uff6b" + - "\027\uff6b\034\uff6b\037\uff6b\040\uff6b\041\uff6b\050\uff6b\001" + - "\002\000\004\013\164\001\002\000\036\003\uff70\004\uff70" + - "\020\uff70\021\uff70\023\uff70\024\uff70\025\uff70\026\uff70\027" + - "\uff70\034\uff70\037\uff70\040\uff70\041\uff70\050\uff70\001\002" + - "\000\026\004\053\011\004\021\045\026\062\027\167\034" + - "\043\037\047\040\040\041\034\050\033\001\002\000\004" + - "\027\171\001\002\000\004\013\170\001\002\000\036\003" + - "\uff6e\004\uff6e\020\uff6e\021\uff6e\023\uff6e\024\uff6e\025\uff6e" + - "\026\uff6e\027\uff6e\034\uff6e\037\uff6e\040\uff6e\041\uff6e\050" + - "\uff6e\001\002\000\004\013\172\001\002\000\036\003\uff6d" + - "\004\uff6d\020\uff6d\021\uff6d\023\uff6d\024\uff6d\025\uff6d\026" + - "\uff6d\027\uff6d\034\uff6d\037\uff6d\040\uff6d\041\uff6d\050\uff6d" + - "\001\002\000\016\002\uffe9\003\uffe9\011\uffe9\015\uffe9\016" + - "\uffe9\047\uffe9\001\002\000\036\003\uffc7\004\uffc7\020\uffc7" + - "\021\uffc7\023\uffc7\024\uffc7\025\uffc7\026\uffc7\027\uffc7\034" + - "\uffc7\037\uffc7\040\uffc7\041\uffc7\050\uffc7\001\002\000\040" + - "\003\ufff6\004\ufff6\011\ufff6\020\ufff6\021\ufff6\023\ufff6\024" + - "\ufff6\025\ufff6\026\ufff6\027\ufff6\034\ufff6\037\ufff6\040\ufff6" + - "\041\ufff6\050\ufff6\001\002\000\036\003\uffcf\004\uffcf\020" + - "\uffcf\021\uffcf\023\uffcf\024\uffcf\025\uffcf\026\uffcf\027\uffcf" + - "\034\uffcf\037\uffcf\040\uffcf\041\uffcf\050\uffcf\001\002\000" + - "\020\005\102\031\072\032\073\033\076\034\105\052\071" + - "\053\103\001\002\000\022\003\202\005\102\031\072\032" + - "\073\033\076\034\105\052\071\053\103\001\002\000\012" + - "\013\212\017\120\044\116\045\122\001\002\000\004\013" + - "\203\001\002\000\030\003\207\004\053\011\004\020\204" + - "\021\045\026\062\034\043\037\047\040\040\041\034\050" + - "\033\001\002\000\004\013\211\001\002\000\006\003\207" + - "\020\204\001\002\000\036\003\uff74\004\uff74\020\uff74\021" + - "\uff74\023\uff74\024\uff74\025\uff74\026\uff74\027\uff74\034\uff74" + - "\037\uff74\040\uff74\041\uff74\050\uff74\001\002\000\036\003" + + "\uffa3\022\uffa3\035\uffa3\043\uffa3\044\uffa3\045\uffa3\046\uffa3" + + "\001\002\000\026\004\055\011\004\021\046\026\063\027" + + "\165\034\043\040\050\041\041\042\035\051\034\001\002" + + "\000\004\027\167\001\002\000\004\013\166\001\002\000" + + "\036\003\uff67\004\uff67\020\uff67\021\uff67\023\uff67\024\uff67" + + "\025\uff67\026\uff67\027\uff67\034\uff67\040\uff67\041\uff67\042" + + "\uff67\051\uff67\001\002\000\004\013\170\001\002\000\036" + + "\003\uff66\004\uff66\020\uff66\021\uff66\023\uff66\024\uff66\025" + + "\uff66\026\uff66\027\uff66\034\uff66\040\uff66\041\uff66\042\uff66" + + "\051\uff66\001\002\000\030\003\173\004\055\011\004\021" + + "\046\026\063\027\174\034\043\040\050\041\041\042\035" + + "\051\034\001\002\000\006\003\176\027\177\001\002\000" + + "\036\003\uff65\004\uff65\020\uff65\021\uff65\023\uff65\024\uff65" + + "\025\uff65\026\uff65\027\uff65\034\uff65\040\uff65\041\uff65\042" + + "\uff65\051\uff65\001\002\000\004\013\175\001\002\000\036" + + "\003\uff68\004\uff68\020\uff68\021\uff68\023\uff68\024\uff68\025" + + "\uff68\026\uff68\027\uff68\034\uff68\040\uff68\041\uff68\042\uff68" + + "\051\uff68\001\002\000\036\003\uff64\004\uff64\020\uff64\021" + + "\uff64\023\uff64\024\uff64\025\uff64\026\uff64\027\uff64\034\uff64" + + "\040\uff64\041\uff64\042\uff64\051\uff64\001\002\000\004\013" + + "\200\001\002\000\036\003\uff69\004\uff69\020\uff69\021\uff69" + + "\023\uff69\024\uff69\025\uff69\026\uff69\027\uff69\034\uff69\040" + + "\uff69\041\uff69\042\uff69\051\uff69\001\002\000\016\002\uffe8" + + "\003\uffe8\011\uffe8\015\uffe8\016\uffe8\050\uffe8\001\002\000" + + "\036\003\uffc4\004\uffc4\020\uffc4\021\uffc4\023\uffc4\024\uffc4" + + "\025\uffc4\026\uffc4\027\uffc4\034\uffc4\040\uffc4\041\uffc4\042" + + "\uffc4\051\uffc4\001\002\000\040\003\ufff6\004\ufff6\011\ufff6" + + "\020\ufff6\021\ufff6\023\ufff6\024\ufff6\025\ufff6\026\ufff6\027" + + "\ufff6\034\ufff6\040\ufff6\041\ufff6\042\ufff6\051\ufff6\001\002" + + "\000\020\005\103\031\072\032\075\033\077\034\107\037" + + "\073\053\104\001\002\000\022\003\207\005\103\031\072" + + "\032\075\033\077\034\107\037\073\053\104\001\002\000" + + "\012\013\uff73\017\122\045\121\046\123\001\002\000\004" + + "\013\220\001\002\000\004\013\211\001\002\000\030\003" + + "\215\004\055\011\004\020\212\021\046\026\063\034\043" + + "\040\050\041\041\042\035\051\034\001\002\000\004\013" + + "\217\001\002\000\006\003\215\020\212\001\002\000\036" + + "\003\uff70\004\uff70\020\uff70\021\uff70\023\uff70\024\uff70\025" + + "\uff70\026\uff70\027\uff70\034\uff70\040\uff70\041\uff70\042\uff70" + + "\051\uff70\001\002\000\036\003\uff6a\004\uff6a\020\uff6a\021" + + "\uff6a\023\uff6a\024\uff6a\025\uff6a\026\uff6a\027\uff6a\034\uff6a" + + "\040\uff6a\041\uff6a\042\uff6a\051\uff6a\001\002\000\036\003" + "\uff71\004\uff71\020\uff71\021\uff71\023\uff71\024\uff71\025\uff71" + - "\026\uff71\027\uff71\034\uff71\037\uff71\040\uff71\041\uff71\050" + - "\uff71\001\002\000\036\003\uff73\004\uff73\020\uff73\021\uff73" + - "\023\uff73\024\uff73\025\uff73\026\uff73\027\uff73\034\uff73\037" + - "\uff73\040\uff73\041\uff73\050\uff73\001\002\000\036\003\uff72" + - "\004\uff72\020\uff72\021\uff72\023\uff72\024\uff72\025\uff72\026" + - "\uff72\027\uff72\034\uff72\037\uff72\040\uff72\041\uff72\050\uff72" + - "\001\002\000\030\003\207\004\053\011\004\020\204\021" + - "\045\026\062\034\043\037\047\040\040\041\034\050\033" + - "\001\002\000\006\003\207\020\204\001\002\000\036\003" + - "\uff77\004\uff77\020\uff77\021\uff77\023\uff77\024\uff77\025\uff77" + - "\026\uff77\027\uff77\034\uff77\037\uff77\040\uff77\041\uff77\050" + - "\uff77\001\002\000\036\003\uff78\004\uff78\020\uff78\021\uff78" + - "\023\uff78\024\uff78\025\uff78\026\uff78\027\uff78\034\uff78\037" + - "\uff78\040\uff78\041\uff78\050\uff78\001\002\000\012\013\217" + - "\017\120\044\116\045\122\001\002\000\030\003\207\004" + - "\053\011\004\020\204\021\045\026\062\034\043\037\047" + - "\040\040\041\034\050\033\001\002\000\006\003\207\020" + - "\204\001\002\000\036\003\uff75\004\uff75\020\uff75\021\uff75" + - "\023\uff75\024\uff75\025\uff75\026\uff75\027\uff75\034\uff75\037" + - "\uff75\040\uff75\041\uff75\050\uff75\001\002\000\036\003\uff76" + - "\004\uff76\020\uff76\021\uff76\023\uff76\024\uff76\025\uff76\026" + - "\uff76\027\uff76\034\uff76\037\uff76\040\uff76\041\uff76\050\uff76" + - "\001\002\000\016\002\uffe8\003\uffe8\011\uffe8\015\uffe8\016" + - "\uffe8\047\uffe8\001\002\000\020\003\uffd4\020\uffd4\023\uffd4" + - "\024\uffd4\025\uffd4\027\uffd4\050\033\001\002\000\016\003" + - "\uffd1\020\uffd1\023\uffd1\024\uffd1\025\uffd1\027\uffd1\001\002" + - "\000\016\003\uffd3\020\uffd3\023\uffd3\024\uffd3\025\uffd3\027" + - "\uffd3\001\002\000\004\013\237\001\002\000\036\003\uffc1" + - "\004\uffc1\020\uffc1\021\uffc1\023\uffc1\024\uffc1\025\uffc1\026" + - "\uffc1\027\uffc1\034\uffc1\037\uffc1\040\uffc1\041\uffc1\050\uffc1" + - "\001\002\000\006\013\uffb9\051\234\001\002\000\004\013" + - "\233\001\002\000\036\003\uffc2\004\uffc2\020\uffc2\021\uffc2" + - "\023\uffc2\024\uffc2\025\uffc2\026\uffc2\027\uffc2\034\uffc2\037" + - "\uffc2\040\uffc2\041\uffc2\050\uffc2\001\002\000\006\003\235" + - "\034\236\001\002\000\006\013\uffb7\017\uffb7\001\002\000" + - "\006\013\uffb8\017\uffb8\001\002\000\036\003\uffc3\004\uffc3" + - "\020\uffc3\021\uffc3\023\uffc3\024\uffc3\025\uffc3\026\uffc3\027" + - "\uffc3\034\uffc3\037\uffc3\040\uffc3\041\uffc3\050\uffc3\001\002" + - "\000\014\013\323\017\120\022\322\044\116\045\122\001" + - "\002\000\006\013\243\022\242\001\002\000\004\013\316" + - "\001\002\000\034\003\252\004\053\011\004\021\045\023" + - "\244\024\251\025\245\026\062\034\043\037\047\040\040" + - "\041\034\050\033\001\002\000\006\003\304\013\305\001" + - "\002\000\006\003\302\021\303\001\002\000\004\013\301" + - "\001\002\000\012\003\252\023\244\024\251\025\245\001" + - "\002\000\036\003\uff8c\004\uff8c\020\uff8c\021\uff8c\023\uff8c" + - "\024\uff8c\025\uff8c\026\uff8c\027\uff8c\034\uff8c\037\uff8c\040" + - "\uff8c\041\uff8c\050\uff8c\001\002\000\022\003\255\005\102" + - "\031\072\032\073\033\076\034\105\052\071\053\103\001" + - "\002\000\004\025\245\001\002\000\036\003\uff7b\004\uff7b" + - "\020\uff7b\021\uff7b\023\uff7b\024\uff7b\025\uff7b\026\uff7b\027" + - "\uff7b\034\uff7b\037\uff7b\040\uff7b\041\uff7b\050\uff7b\001\002" + - "\000\014\013\270\017\120\022\267\044\116\045\122\001" + - "\002\000\006\013\257\022\256\001\002\000\004\013\263" + - "\001\002\000\034\003\252\004\053\011\004\021\045\023" + - "\244\024\251\025\245\026\062\034\043\037\047\040\040" + - "\041\034\050\033\001\002\000\012\003\252\023\244\024" + - "\251\025\245\001\002\000\036\003\uff80\004\uff80\020\uff80" + - "\021\uff80\023\uff80\024\uff80\025\uff80\026\uff80\027\uff80\034" + - "\uff80\037\uff80\040\uff80\041\uff80\050\uff80\001\002\000\036" + - "\003\uff7e\004\uff7e\020\uff7e\021\uff7e\023\uff7e\024\uff7e\025" + - "\uff7e\026\uff7e\027\uff7e\034\uff7e\037\uff7e\040\uff7e\041\uff7e" + - "\050\uff7e\001\002\000\034\003\252\004\053\011\004\021" + - "\045\023\244\024\251\025\245\026\062\034\043\037\047" + - "\040\040\041\034\050\033\001\002\000\012\003\252\023" + - "\244\024\251\025\245\001\002\000\036\003\uff7f\004\uff7f" + - "\020\uff7f\021\uff7f\023\uff7f\024\uff7f\025\uff7f\026\uff7f\027" + - "\uff7f\034\uff7f\037\uff7f\040\uff7f\041\uff7f\050\uff7f\001\002" + + "\026\uff71\027\uff71\034\uff71\040\uff71\041\uff71\042\uff71\051" + + "\uff71\001\002\000\036\003\uff6b\004\uff6b\020\uff6b\021\uff6b" + + "\023\uff6b\024\uff6b\025\uff6b\026\uff6b\027\uff6b\034\uff6b\040" + + "\uff6b\041\uff6b\042\uff6b\051\uff6b\001\002\000\030\003\215" + + "\004\055\011\004\020\212\021\046\026\063\034\043\040" + + "\050\041\041\042\035\051\034\001\002\000\006\003\215" + + "\020\212\001\002\000\036\003\uff6d\004\uff6d\020\uff6d\021" + + "\uff6d\023\uff6d\024\uff6d\025\uff6d\026\uff6d\027\uff6d\034\uff6d" + + "\040\uff6d\041\uff6d\042\uff6d\051\uff6d\001\002\000\036\003" + + "\uff6c\004\uff6c\020\uff6c\021\uff6c\023\uff6c\024\uff6c\025\uff6c" + + "\026\uff6c\027\uff6c\034\uff6c\040\uff6c\041\uff6c\042\uff6c\051" + + "\uff6c\001\002\000\004\013\225\001\002\000\030\003\215" + + "\004\055\011\004\020\212\021\046\026\063\034\043\040" + + "\050\041\041\042\035\051\034\001\002\000\006\003\215" + + "\020\212\001\002\000\036\003\uff6e\004\uff6e\020\uff6e\021" + + "\uff6e\023\uff6e\024\uff6e\025\uff6e\026\uff6e\027\uff6e\034\uff6e" + + "\040\uff6e\041\uff6e\042\uff6e\051\uff6e\001\002\000\036\003" + + "\uff6f\004\uff6f\020\uff6f\021\uff6f\023\uff6f\024\uff6f\025\uff6f" + + "\026\uff6f\027\uff6f\034\uff6f\040\uff6f\041\uff6f\042\uff6f\051" + + "\uff6f\001\002\000\036\003\uffcc\004\uffcc\020\uffcc\021\uffcc" + + "\023\uffcc\024\uffcc\025\uffcc\026\uffcc\027\uffcc\034\uffcc\040" + + "\uffcc\041\uffcc\042\uffcc\051\uffcc\001\002\000\016\002\uffe9" + + "\003\uffe9\011\uffe9\015\uffe9\016\uffe9\050\uffe9\001\002\000" + + "\020\003\uffd1\020\uffd1\023\uffd1\024\uffd1\025\uffd1\027\uffd1" + + "\051\034\001\002\000\016\003\uffce\020\uffce\023\uffce\024" + + "\uffce\025\uffce\027\uffce\001\002\000\016\003\uffd0\020\uffd0" + + "\023\uffd0\024\uffd0\025\uffd0\027\uffd0\001\002\000\004\013" + + "\243\001\002\000\036\003\uffbe\004\uffbe\020\uffbe\021\uffbe" + + "\023\uffbe\024\uffbe\025\uffbe\026\uffbe\027\uffbe\034\uffbe\040" + + "\uffbe\041\uffbe\042\uffbe\051\uffbe\001\002\000\006\013\uffb6" + + "\052\111\001\002\000\004\013\242\001\002\000\036\003" + + "\uffbf\004\uffbf\020\uffbf\021\uffbf\023\uffbf\024\uffbf\025\uffbf" + + "\026\uffbf\027\uffbf\034\uffbf\040\uffbf\041\uffbf\042\uffbf\051" + + "\uffbf\001\002\000\036\003\uffc0\004\uffc0\020\uffc0\021\uffc0" + + "\023\uffc0\024\uffc0\025\uffc0\026\uffc0\027\uffc0\034\uffc0\040" + + "\uffc0\041\uffc0\042\uffc0\051\uffc0\001\002\000\006\013\330" + + "\022\327\001\002\000\014\013\uff72\017\122\022\uff72\045" + + "\121\046\123\001\002\000\006\013\250\022\247\001\002" + + "\000\004\013\323\001\002\000\034\003\257\004\055\011" + + "\004\021\046\023\251\024\256\025\252\026\063\034\043" + + "\040\050\041\041\042\035\051\034\001\002\000\006\003" + + "\311\013\312\001\002\000\006\003\307\021\310\001\002" + + "\000\004\013\306\001\002\000\012\003\257\023\251\024" + + "\256\025\252\001\002\000\036\003\uff87\004\uff87\020\uff87" + + "\021\uff87\023\uff87\024\uff87\025\uff87\026\uff87\027\uff87\034" + + "\uff87\040\uff87\041\uff87\042\uff87\051\uff87\001\002\000\022" + + "\003\262\005\103\031\072\032\075\033\077\034\107\037" + + "\073\053\104\001\002\000\004\025\252\001\002\000\036" + + "\003\uff76\004\uff76\020\uff76\021\uff76\023\uff76\024\uff76\025" + + "\uff76\026\uff76\027\uff76\034\uff76\040\uff76\041\uff76\042\uff76" + + "\051\uff76\001\002\000\006\013\275\022\274\001\002\000" + + "\006\013\264\022\263\001\002\000\004\013\270\001\002" + + "\000\034\003\257\004\055\011\004\021\046\023\251\024" + + "\256\025\252\026\063\034\043\040\050\041\041\042\035" + + "\051\034\001\002\000\012\003\257\023\251\024\256\025" + + "\252\001\002\000\036\003\uff7b\004\uff7b\020\uff7b\021\uff7b" + + "\023\uff7b\024\uff7b\025\uff7b\026\uff7b\027\uff7b\034\uff7b\040" + + "\uff7b\041\uff7b\042\uff7b\051\uff7b\001\002\000\036\003\uff79" + + "\004\uff79\020\uff79\021\uff79\023\uff79\024\uff79\025\uff79\026" + + "\uff79\027\uff79\034\uff79\040\uff79\041\uff79\042\uff79\051\uff79" + + "\001\002\000\034\003\257\004\055\011\004\021\046\023" + + "\251\024\256\025\252\026\063\034\043\040\050\041\041" + + "\042\035\051\034\001\002\000\012\003\257\023\251\024" + + "\256\025\252\001\002\000\036\003\uff7a\004\uff7a\020\uff7a" + + "\021\uff7a\023\uff7a\024\uff7a\025\uff7a\026\uff7a\027\uff7a\034" + + "\uff7a\040\uff7a\041\uff7a\042\uff7a\051\uff7a\001\002\000\036" + + "\003\uff78\004\uff78\020\uff78\021\uff78\023\uff78\024\uff78\025" + + "\uff78\026\uff78\027\uff78\034\uff78\040\uff78\041\uff78\042\uff78" + + "\051\uff78\001\002\000\004\013\301\001\002\000\034\003" + + "\257\004\055\011\004\021\046\023\251\024\256\025\252" + + "\026\063\034\043\040\050\041\041\042\035\051\034\001" + + "\002\000\012\003\257\023\251\024\256\025\252\001\002" + "\000\036\003\uff7d\004\uff7d\020\uff7d\021\uff7d\023\uff7d\024" + - "\uff7d\025\uff7d\026\uff7d\027\uff7d\034\uff7d\037\uff7d\040\uff7d" + - "\041\uff7d\050\uff7d\001\002\000\004\013\274\001\002\000" + - "\034\003\252\004\053\011\004\021\045\023\244\024\251" + - "\025\245\026\062\034\043\037\047\040\040\041\034\050" + - "\033\001\002\000\012\003\252\023\244\024\251\025\245" + - "\001\002\000\036\003\uff82\004\uff82\020\uff82\021\uff82\023" + - "\uff82\024\uff82\025\uff82\026\uff82\027\uff82\034\uff82\037\uff82" + - "\040\uff82\041\uff82\050\uff82\001\002\000\036\003\uff84\004" + - "\uff84\020\uff84\021\uff84\023\uff84\024\uff84\025\uff84\026\uff84" + - "\027\uff84\034\uff84\037\uff84\040\uff84\041\uff84\050\uff84\001" + - "\002\000\034\003\252\004\053\011\004\021\045\023\244" + - "\024\251\025\245\026\062\034\043\037\047\040\040\041" + - "\034\050\033\001\002\000\012\003\252\023\244\024\251" + - "\025\245\001\002\000\036\003\uff81\004\uff81\020\uff81\021" + - "\uff81\023\uff81\024\uff81\025\uff81\026\uff81\027\uff81\034\uff81" + - "\037\uff81\040\uff81\041\uff81\050\uff81\001\002\000\036\003" + - "\uff83\004\uff83\020\uff83\021\uff83\023\uff83\024\uff83\025\uff83" + - "\026\uff83\027\uff83\034\uff83\037\uff83\040\uff83\041\uff83\050" + - "\uff83\001\002\000\036\003\uff8a\004\uff8a\020\uff8a\021\uff8a" + - "\023\uff8a\024\uff8a\025\uff8a\026\uff8a\027\uff8a\034\uff8a\037" + - "\uff8a\040\uff8a\041\uff8a\050\uff8a\001\002\000\036\003\uff88" + - "\004\uff88\020\uff88\021\uff88\023\uff88\024\uff88\025\uff88\026" + - "\uff88\027\uff88\034\uff88\037\uff88\040\uff88\041\uff88\050\uff88" + - "\001\002\000\040\003\uff79\004\uff79\013\uff79\020\uff79\021" + - "\uff79\023\uff79\024\uff79\025\uff79\026\uff79\027\uff79\034\uff79" + - "\037\uff79\040\uff79\041\uff79\050\uff79\001\002\000\040\003" + - "\uff7a\004\uff7a\013\uff7a\020\uff7a\021\uff7a\023\uff7a\024\uff7a" + - "\025\uff7a\026\uff7a\027\uff7a\034\uff7a\037\uff7a\040\uff7a\041" + - "\uff7a\050\uff7a\001\002\000\036\003\uff85\004\uff85\020\uff85" + - "\021\uff85\023\uff85\024\uff85\025\uff85\026\uff85\027\uff85\034" + - "\uff85\037\uff85\040\uff85\041\uff85\050\uff85\001\002\000\030" + - "\003\310\004\053\011\004\021\045\025\245\026\062\034" + - "\043\037\047\040\040\041\034\050\033\001\002\000\004" + - "\025\245\001\002\000\004\013\313\001\002\000\004\025" + - "\245\001\002\000\004\013\312\001\002\000\036\003\uff7c" + - "\004\uff7c\020\uff7c\021\uff7c\023\uff7c\024\uff7c\025\uff7c\026" + - "\uff7c\027\uff7c\034\uff7c\037\uff7c\040\uff7c\041\uff7c\050\uff7c" + - "\001\002\000\036\003\uff86\004\uff86\020\uff86\021\uff86\023" + - "\uff86\024\uff86\025\uff86\026\uff86\027\uff86\034\uff86\037\uff86" + - "\040\uff86\041\uff86\050\uff86\001\002\000\004\013\315\001" + - "\002\000\036\003\uff87\004\uff87\020\uff87\021\uff87\023\uff87" + - "\024\uff87\025\uff87\026\uff87\027\uff87\034\uff87\037\uff87\040" + - "\uff87\041\uff87\050\uff87\001\002\000\034\003\252\004\053" + - "\011\004\021\045\023\244\024\251\025\245\026\062\034" + - "\043\037\047\040\040\041\034\050\033\001\002\000\012" + - "\003\252\023\244\024\251\025\245\001\002\000\036\003" + - "\uff8b\004\uff8b\020\uff8b\021\uff8b\023\uff8b\024\uff8b\025\uff8b" + - "\026\uff8b\027\uff8b\034\uff8b\037\uff8b\040\uff8b\041\uff8b\050" + - "\uff8b\001\002\000\036\003\uff89\004\uff89\020\uff89\021\uff89" + - "\023\uff89\024\uff89\025\uff89\026\uff89\027\uff89\034\uff89\037" + - "\uff89\040\uff89\041\uff89\050\uff89\001\002\000\004\013\327" + - "\001\002\000\034\003\252\004\053\011\004\021\045\023" + - "\244\024\251\025\245\026\062\034\043\037\047\040\040" + - "\041\034\050\033\001\002\000\012\003\252\023\244\024" + - "\251\025\245\001\002\000\036\003\uff8d\004\uff8d\020\uff8d" + - "\021\uff8d\023\uff8d\024\uff8d\025\uff8d\026\uff8d\027\uff8d\034" + - "\uff8d\037\uff8d\040\uff8d\041\uff8d\050\uff8d\001\002\000\036" + - "\003\uff8f\004\uff8f\020\uff8f\021\uff8f\023\uff8f\024\uff8f\025" + - "\uff8f\026\uff8f\027\uff8f\034\uff8f\037\uff8f\040\uff8f\041\uff8f" + - "\050\uff8f\001\002\000\034\003\252\004\053\011\004\021" + - "\045\023\244\024\251\025\245\026\062\034\043\037\047" + - "\040\040\041\034\050\033\001\002\000\012\003\252\023" + - "\244\024\251\025\245\001\002\000\036\003\uff8e\004\uff8e" + - "\020\uff8e\021\uff8e\023\uff8e\024\uff8e\025\uff8e\026\uff8e\027" + - "\uff8e\034\uff8e\037\uff8e\040\uff8e\041\uff8e\050\uff8e\001\002" + - "\000\036\003\uff90\004\uff90\020\uff90\021\uff90\023\uff90\024" + - "\uff90\025\uff90\026\uff90\027\uff90\034\uff90\037\uff90\040\uff90" + - "\041\uff90\050\uff90\001\002\000\006\003\334\016\335\001" + - "\002\000\004\013\uffdc\001\002\000\004\013\uffde\001\002" + - "\000\036\003\uffc4\004\uffc4\020\uffc4\021\uffc4\023\uffc4\024" + - "\uffc4\025\uffc4\026\uffc4\027\uffc4\034\uffc4\037\uffc4\040\uffc4" + - "\041\uffc4\050\uffc4\001\002\000\016\003\uffd5\020\uffd5\023" + - "\uffd5\024\uffd5\025\uffd5\027\uffd5\001\002\000\004\013\uffdd" + - "\001\002\000\004\013\345\001\002\000\036\003\uffbe\004" + - "\uffbe\020\uffbe\021\uffbe\023\uffbe\024\uffbe\025\uffbe\026\uffbe" + - "\027\uffbe\034\uffbe\037\uffbe\040\uffbe\041\uffbe\050\uffbe\001" + - "\002\000\004\013\344\001\002\000\036\003\uffc0\004\uffc0" + - "\020\uffc0\021\uffc0\023\uffc0\024\uffc0\025\uffc0\026\uffc0\027" + - "\uffc0\034\uffc0\037\uffc0\040\uffc0\041\uffc0\050\uffc0\001\002" + - "\000\036\003\uffbf\004\uffbf\020\uffbf\021\uffbf\023\uffbf\024" + - "\uffbf\025\uffbf\026\uffbf\027\uffbf\034\uffbf\037\uffbf\040\uffbf" + - "\041\uffbf\050\uffbf\001\002\000\020\003\uffcd\020\uffcd\023" + - "\uffcd\024\uffcd\025\uffcd\027\uffcd\050\uffcd\001\002\000\022" + - "\003\351\005\102\031\072\032\073\033\076\034\105\052" + - "\071\053\103\001\002\000\012\013\353\017\120\044\116" + - "\045\122\001\002\000\004\013\352\001\002\000\036\003" + - "\uffba\004\uffba\020\uffba\021\uffba\023\uffba\024\uffba\025\uffba" + - "\026\uffba\027\uffba\034\uffba\037\uffba\040\uffba\041\uffba\050" + - "\uffba\001\002\000\036\003\uffbb\004\uffbb\020\uffbb\021\uffbb" + - "\023\uffbb\024\uffbb\025\uffbb\026\uffbb\027\uffbb\034\uffbb\037" + - "\uffbb\040\uffbb\041\uffbb\050\uffbb\001\002\000\036\003\uffbc" + - "\004\uffbc\020\uffbc\021\uffbc\023\uffbc\024\uffbc\025\uffbc\026" + - "\uffbc\027\uffbc\034\uffbc\037\uffbc\040\uffbc\041\uffbc\050\uffbc" + - "\001\002\000\004\013\356\001\002\000\036\003\uffbd\004" + - "\uffbd\020\uffbd\021\uffbd\023\uffbd\024\uffbd\025\uffbd\026\uffbd" + - "\027\uffbd\034\uffbd\037\uffbd\040\uffbd\041\uffbd\050\uffbd\001" + - "\002\000\004\013\363\001\002\000\016\003\uffd7\020\uffd7" + - "\023\uffd7\024\uffd7\025\uffd7\027\uffd7\001\002\000\004\013" + - "\362\001\002\000\016\003\uffd8\020\uffd8\023\uffd8\024\uffd8" + - "\025\uffd8\027\uffd8\001\002\000\016\003\uffd9\020\uffd9\023" + - "\uffd9\024\uffd9\025\uffd9\027\uffd9\001\002\000\004\013\uffe3" + - "\001\002\000\012\003\uffed\006\uffed\012\uffed\013\uffed\001" + - "\002\000\012\003\uffee\006\uffee\012\uffee\013\uffee\001\002" + - "\000\010\003\uff9c\010\uff9c\013\uff9c\001\002\000\006\003" + - "\u0107\034\u0108\001\002\000\012\003\uff99\010\uff99\013\uff99" + - "\034\u0103\001\002\000\010\003\uff9a\010\uff9a\013\uff9a\001" + - "\002\000\010\003\374\006\376\012\375\001\002\000\004" + - "\006\u0106\001\002\000\006\003\u0100\014\370\001\002\000" + - "\010\003\uff97\010\uff97\013\uff97\001\002\000\010\003\uff9b" + - "\010\uff9b\013\uff9b\001\002\000\004\034\u0103\001\002\000" + - "\010\003\374\006\376\012\375\001\002\000\010\003\uff98" + - "\010\uff98\013\uff98\001\002\000\004\010\u0104\001\002\000" + - "\006\034\365\036\366\001\002\000\010\003\uff91\006\uff91" + - "\012\uff91\001\002\000\010\003\uff96\010\uff96\013\uff96\001" + - "\002\000\004\010\u010d\001\002\000\006\003\u010a\010\u0109" + - "\001\002\000\010\003\u010b\034\365\036\366\001\002\000" + - "\010\003\uff93\006\uff93\012\uff93\001\002\000\010\003\uff94" + - "\006\uff94\012\uff94\001\002\000\010\003\uff95\006\uff95\012" + - "\uff95\001\002\000\006\034\365\036\366\001\002\000\010" + - "\003\uff92\006\uff92\012\uff92\001\002\000\006\003\030\010" + - "\027\001\002\000\026\004\053\011\004\021\045\025\041" + - "\026\062\034\043\037\047\040\040\041\034\050\033\001" + - "\002\000\004\013\u0112\001\002\000\016\002\uffe5\003\uffe5" + - "\011\uffe5\015\uffe5\016\uffe5\047\uffe5\001\002\000\004\013" + - "\u0114\001\002\000\026\004\053\011\004\021\045\025\041" + - "\026\062\034\043\037\047\040\040\041\034\050\033\001" + - "\002\000\004\013\u0116\001\002\000\016\002\uffe6\003\uffe6" + - "\011\uffe6\015\uffe6\016\uffe6\047\uffe6\001\002\000\016\002" + - "\uffe7\003\uffe7\011\uffe7\015\uffe7\016\uffe7\047\uffe7\001\002" + - "\000\004\002\ufffc\001\002\000\016\002\ufff7\003\ufff7\011" + - "\ufff7\015\ufff7\016\ufff7\047\ufff7\001\002\000\016\002\ufffa" + - "\003\ufffa\011\ufffa\015\ufffa\016\ufffa\047\ufffa\001\002\000" + - "\004\005\025\001\002\000\004\013\u011d\001\002\000\026" + - "\004\053\011\004\021\045\025\u011f\026\062\034\043\037" + - "\047\040\040\041\034\050\033\001\002\000\004\013\u0125" + - "\001\002\000\006\003\u0124\015\u0123\001\002\000\004\025" + - "\u0121\001\002\000\004\015\u0122\001\002\000\004\013\uffe1" + - "\001\002\000\004\013\uffe0\001\002\000\004\013\uffdf\001" + - "\002\000\016\002\uffea\003\uffea\011\uffea\015\uffea\016\uffea" + - "\047\uffea\001\002\000\006\003\u0127\013\u0128\001\002\000" + - "\004\025\u0137\001\002\000\010\003\uff63\011\uff63\034\uff63" + - "\001\002\000\010\003\u012b\011\u012e\034\u012f\001\002\000" + - "\004\013\u013b\001\002\000\004\013\uff5b\001\002\000\004" + - "\025\u0137\001\002\000\012\003\u012b\011\u012e\025\uff5f\034" + - "\u012f\001\002\000\004\034\u0132\001\002\000\004\010\u0130" + - "\001\002\000\006\034\365\036\366\001\002\000\004\013" + - "\uff5c\001\002\000\004\010\u0133\001\002\000\006\034\365" + - "\036\366\001\002\000\004\013\uff5d\001\002\000\004\025" + - "\uff60\001\002\000\004\013\u013a\001\002\000\006\003\u0138" + - "\047\u0139\001\002\000\004\013\uffda\001\002\000\004\013" + - "\uffdb\001\002\000\016\002\uff62\003\uff62\011\uff62\015\uff62" + - "\016\uff62\047\uff62\001\002\000\012\003\uff5e\011\uff5e\025" + - "\uff5e\034\uff5e\001\002\000\004\013\u013d\001\002\000\016" + - "\002\uff61\003\uff61\011\uff61\015\uff61\016\uff61\047\uff61\001" + - "\002\000\004\002\001\001\002\000\004\002\000\001\002" + - "\000\004\013\ufff2\001\002\000\004\013\ufff5\001\002\000" + - "\004\010\u0147\001\002\000\006\010\ufff1\012\u0144\001\002" + - "\000\006\003\u0145\034\u0143\001\002\000\004\010\uffef\001" + - "\002\000\004\010\ufff0\001\002\000\006\034\365\036\366" + - "\001\002\000\006\012\u0149\013\ufff3\001\002\000\006\003" + - "\u0140\034\u0143\001\002\000\004\013\ufff4\001\002" }); + "\uff7d\025\uff7d\026\uff7d\027\uff7d\034\uff7d\040\uff7d\041\uff7d" + + "\042\uff7d\051\uff7d\001\002\000\036\003\uff7f\004\uff7f\020" + + "\uff7f\021\uff7f\023\uff7f\024\uff7f\025\uff7f\026\uff7f\027\uff7f" + + "\034\uff7f\040\uff7f\041\uff7f\042\uff7f\051\uff7f\001\002\000" + + "\034\003\257\004\055\011\004\021\046\023\251\024\256" + + "\025\252\026\063\034\043\040\050\041\041\042\035\051" + + "\034\001\002\000\012\003\257\023\251\024\256\025\252" + + "\001\002\000\036\003\uff7c\004\uff7c\020\uff7c\021\uff7c\023" + + "\uff7c\024\uff7c\025\uff7c\026\uff7c\027\uff7c\034\uff7c\040\uff7c" + + "\041\uff7c\042\uff7c\051\uff7c\001\002\000\036\003\uff7e\004" + + "\uff7e\020\uff7e\021\uff7e\023\uff7e\024\uff7e\025\uff7e\026\uff7e" + + "\027\uff7e\034\uff7e\040\uff7e\041\uff7e\042\uff7e\051\uff7e\001" + + "\002\000\036\003\uff85\004\uff85\020\uff85\021\uff85\023\uff85" + + "\024\uff85\025\uff85\026\uff85\027\uff85\034\uff85\040\uff85\041" + + "\uff85\042\uff85\051\uff85\001\002\000\036\003\uff83\004\uff83" + + "\020\uff83\021\uff83\023\uff83\024\uff83\025\uff83\026\uff83\027" + + "\uff83\034\uff83\040\uff83\041\uff83\042\uff83\051\uff83\001\002" + + "\000\040\003\uff74\004\uff74\013\uff74\020\uff74\021\uff74\023" + + "\uff74\024\uff74\025\uff74\026\uff74\027\uff74\034\uff74\040\uff74" + + "\041\uff74\042\uff74\051\uff74\001\002\000\040\003\uff75\004" + + "\uff75\013\uff75\020\uff75\021\uff75\023\uff75\024\uff75\025\uff75" + + "\026\uff75\027\uff75\034\uff75\040\uff75\041\uff75\042\uff75\051" + + "\uff75\001\002\000\036\003\uff80\004\uff80\020\uff80\021\uff80" + + "\023\uff80\024\uff80\025\uff80\026\uff80\027\uff80\034\uff80\040" + + "\uff80\041\uff80\042\uff80\051\uff80\001\002\000\030\003\315" + + "\004\055\011\004\021\046\025\252\026\063\034\043\040" + + "\050\041\041\042\035\051\034\001\002\000\004\013\322" + + "\001\002\000\004\025\252\001\002\000\004\025\252\001" + + "\002\000\004\013\317\001\002\000\036\003\uff77\004\uff77" + + "\020\uff77\021\uff77\023\uff77\024\uff77\025\uff77\026\uff77\027" + + "\uff77\034\uff77\040\uff77\041\uff77\042\uff77\051\uff77\001\002" + + "\000\004\013\321\001\002\000\036\003\uff82\004\uff82\020" + + "\uff82\021\uff82\023\uff82\024\uff82\025\uff82\026\uff82\027\uff82" + + "\034\uff82\040\uff82\041\uff82\042\uff82\051\uff82\001\002\000" + + "\036\003\uff81\004\uff81\020\uff81\021\uff81\023\uff81\024\uff81" + + "\025\uff81\026\uff81\027\uff81\034\uff81\040\uff81\041\uff81\042" + + "\uff81\051\uff81\001\002\000\034\003\257\004\055\011\004" + + "\021\046\023\251\024\256\025\252\026\063\034\043\040" + + "\050\041\041\042\035\051\034\001\002\000\012\003\257" + + "\023\251\024\256\025\252\001\002\000\036\003\uff86\004" + + "\uff86\020\uff86\021\uff86\023\uff86\024\uff86\025\uff86\026\uff86" + + "\027\uff86\034\uff86\040\uff86\041\uff86\042\uff86\051\uff86\001" + + "\002\000\036\003\uff84\004\uff84\020\uff84\021\uff84\023\uff84" + + "\024\uff84\025\uff84\026\uff84\027\uff84\034\uff84\040\uff84\041" + + "\uff84\042\uff84\051\uff84\001\002\000\004\013\334\001\002" + + "\000\034\003\257\004\055\011\004\021\046\023\251\024" + + "\256\025\252\026\063\034\043\040\050\041\041\042\035" + + "\051\034\001\002\000\012\003\257\023\251\024\256\025" + + "\252\001\002\000\036\003\uff88\004\uff88\020\uff88\021\uff88" + + "\023\uff88\024\uff88\025\uff88\026\uff88\027\uff88\034\uff88\040" + + "\uff88\041\uff88\042\uff88\051\uff88\001\002\000\036\003\uff8a" + + "\004\uff8a\020\uff8a\021\uff8a\023\uff8a\024\uff8a\025\uff8a\026" + + "\uff8a\027\uff8a\034\uff8a\040\uff8a\041\uff8a\042\uff8a\051\uff8a" + + "\001\002\000\034\003\257\004\055\011\004\021\046\023" + + "\251\024\256\025\252\026\063\034\043\040\050\041\041" + + "\042\035\051\034\001\002\000\012\003\257\023\251\024" + + "\256\025\252\001\002\000\036\003\uff89\004\uff89\020\uff89" + + "\021\uff89\023\uff89\024\uff89\025\uff89\026\uff89\027\uff89\034" + + "\uff89\040\uff89\041\uff89\042\uff89\051\uff89\001\002\000\036" + + "\003\uff8b\004\uff8b\020\uff8b\021\uff8b\023\uff8b\024\uff8b\025" + + "\uff8b\026\uff8b\027\uff8b\034\uff8b\040\uff8b\041\uff8b\042\uff8b" + + "\051\uff8b\001\002\000\006\003\341\016\342\001\002\000" + + "\004\013\uffd9\001\002\000\004\013\uffdb\001\002\000\016" + + "\003\uffd2\020\uffd2\023\uffd2\024\uffd2\025\uffd2\027\uffd2\001" + + "\002\000\036\003\uffc1\004\uffc1\020\uffc1\021\uffc1\023\uffc1" + + "\024\uffc1\025\uffc1\026\uffc1\027\uffc1\034\uffc1\040\uffc1\041" + + "\uffc1\042\uffc1\051\uffc1\001\002\000\004\013\uffda\001\002" + + "\000\004\013\352\001\002\000\036\003\uffbb\004\uffbb\020" + + "\uffbb\021\uffbb\023\uffbb\024\uffbb\025\uffbb\026\uffbb\027\uffbb" + + "\034\uffbb\040\uffbb\041\uffbb\042\uffbb\051\uffbb\001\002\000" + + "\004\013\351\001\002\000\036\003\uffbd\004\uffbd\020\uffbd" + + "\021\uffbd\023\uffbd\024\uffbd\025\uffbd\026\uffbd\027\uffbd\034" + + "\uffbd\040\uffbd\041\uffbd\042\uffbd\051\uffbd\001\002\000\036" + + "\003\uffbc\004\uffbc\020\uffbc\021\uffbc\023\uffbc\024\uffbc\025" + + "\uffbc\026\uffbc\027\uffbc\034\uffbc\040\uffbc\041\uffbc\042\uffbc" + + "\051\uffbc\001\002\000\020\003\uffca\020\uffca\023\uffca\024" + + "\uffca\025\uffca\027\uffca\051\uffca\001\002\000\022\003\356" + + "\005\103\031\072\032\075\033\077\034\107\037\073\053" + + "\104\001\002\000\012\013\360\017\122\045\121\046\123" + + "\001\002\000\004\013\357\001\002\000\036\003\uffb7\004" + + "\uffb7\020\uffb7\021\uffb7\023\uffb7\024\uffb7\025\uffb7\026\uffb7" + + "\027\uffb7\034\uffb7\040\uffb7\041\uffb7\042\uffb7\051\uffb7\001" + + "\002\000\036\003\uffb8\004\uffb8\020\uffb8\021\uffb8\023\uffb8" + + "\024\uffb8\025\uffb8\026\uffb8\027\uffb8\034\uffb8\040\uffb8\041" + + "\uffb8\042\uffb8\051\uffb8\001\002\000\036\003\uffb9\004\uffb9" + + "\020\uffb9\021\uffb9\023\uffb9\024\uffb9\025\uffb9\026\uffb9\027" + + "\uffb9\034\uffb9\040\uffb9\041\uffb9\042\uffb9\051\uffb9\001\002" + + "\000\004\013\363\001\002\000\036\003\uffba\004\uffba\020" + + "\uffba\021\uffba\023\uffba\024\uffba\025\uffba\026\uffba\027\uffba" + + "\034\uffba\040\uffba\041\uffba\042\uffba\051\uffba\001\002\000" + + "\004\013\370\001\002\000\016\003\uffd4\020\uffd4\023\uffd4" + + "\024\uffd4\025\uffd4\027\uffd4\001\002\000\004\013\367\001" + + "\002\000\016\003\uffd5\020\uffd5\023\uffd5\024\uffd5\025\uffd5" + + "\027\uffd5\001\002\000\016\003\uffd6\020\uffd6\023\uffd6\024" + + "\uffd6\025\uffd6\027\uffd6\001\002\000\004\013\uffdf\001\002" + + "\000\004\013\uffe1\001\002\000\006\003\031\010\030\001" + + "\002\000\026\004\055\011\004\021\046\025\042\026\063" + + "\034\043\040\050\041\041\042\035\051\034\001\002\000" + + "\004\013\376\001\002\000\016\002\uffe5\003\uffe5\011\uffe5" + + "\015\uffe5\016\uffe5\050\uffe5\001\002\000\004\013\u0100\001" + + "\002\000\026\004\055\011\004\021\046\025\042\026\063" + + "\034\043\040\050\041\041\042\035\051\034\001\002\000" + + "\004\013\u0102\001\002\000\016\002\uffe6\003\uffe6\011\uffe6" + + "\015\uffe6\016\uffe6\050\uffe6\001\002\000\010\003\uff97\010" + + "\uff97\013\uff97\001\002\000\006\003\u0115\034\u0116\001\002" + + "\000\012\003\uff94\010\uff94\013\uff94\034\u010f\001\002\000" + + "\010\003\uff95\010\uff95\013\uff95\001\002\000\010\003\u0108" + + "\006\u010a\012\u0109\001\002\000\004\006\u0114\001\002\000" + + "\006\003\u010c\014\u0104\001\002\000\010\003\uff92\010\uff92" + + "\013\uff92\001\002\000\010\003\uff96\010\uff96\013\uff96\001" + + "\002\000\004\034\u010f\001\002\000\010\003\u0108\006\u010a" + + "\012\u0109\001\002\000\010\003\uff93\010\uff93\013\uff93\001" + + "\002\000\004\010\u0110\001\002\000\006\034\u0112\036\u0113" + + "\001\002\000\010\003\uff8c\006\uff8c\012\uff8c\001\002\000" + + "\012\003\uffed\006\uffed\012\uffed\013\uffed\001\002\000\012" + + "\003\uffee\006\uffee\012\uffee\013\uffee\001\002\000\010\003" + + "\uff91\010\uff91\013\uff91\001\002\000\004\010\u011b\001\002" + + "\000\006\003\u0118\010\u0117\001\002\000\010\003\u0119\034" + + "\u0112\036\u0113\001\002\000\010\003\uff8e\006\uff8e\012\uff8e" + + "\001\002\000\010\003\uff8f\006\uff8f\012\uff8f\001\002\000" + + "\010\003\uff90\006\uff90\012\uff90\001\002\000\006\034\u0112" + + "\036\u0113\001\002\000\010\003\uff8d\006\uff8d\012\uff8d\001" + + "\002\000\016\002\uffe7\003\uffe7\011\uffe7\015\uffe7\016\uffe7" + + "\050\uffe7\001\002\000\004\002\ufffc\001\002\000\016\002" + + "\ufff7\003\ufff7\011\ufff7\015\ufff7\016\ufff7\050\ufff7\001\002" + + "\000\016\002\ufffa\003\ufffa\011\ufffa\015\ufffa\016\ufffa\050" + + "\ufffa\001\002\000\004\005\025\001\002\000\004\005\uffe2" + + "\001\002\000\004\013\u0124\001\002\000\026\004\055\011" + + "\004\021\046\025\u0126\026\063\034\043\040\050\041\041" + + "\042\035\051\034\001\002\000\004\013\u012c\001\002\000" + + "\006\003\u012b\015\u012a\001\002\000\004\025\u0128\001\002" + + "\000\004\015\u0129\001\002\000\004\013\uffde\001\002\000" + + "\004\013\uffdd\001\002\000\004\013\uffdc\001\002\000\016" + + "\002\uffea\003\uffea\011\uffea\015\uffea\016\uffea\050\uffea\001" + + "\002\000\006\003\u012e\013\u012f\001\002\000\004\025\u013d" + + "\001\002\000\010\003\uff5c\011\uff5c\034\uff5c\001\002\000" + + "\010\003\u0132\011\u0135\034\u0136\001\002\000\004\013\u0142" + + "\001\002\000\004\013\uff54\001\002\000\012\003\u0132\011" + + "\u0135\025\uff58\034\u0136\001\002\000\004\025\u013d\001\002" + + "\000\004\034\u0139\001\002\000\004\010\u0137\001\002\000" + + "\006\034\u0112\036\u0113\001\002\000\004\013\uff55\001\002" + + "\000\004\010\u013a\001\002\000\006\034\u0112\036\u0113\001" + + "\002\000\004\013\uff56\001\002\000\004\013\u0140\001\002" + + "\000\006\003\u013e\050\u013f\001\002\000\004\013\uffd7\001" + + "\002\000\004\013\uffd8\001\002\000\016\002\uff5b\003\uff5b" + + "\011\uff5b\015\uff5b\016\uff5b\050\uff5b\001\002\000\004\025" + + "\uff59\001\002\000\012\003\uff57\011\uff57\025\uff57\034\uff57" + + "\001\002\000\004\013\u0144\001\002\000\016\002\uff5a\003" + + "\uff5a\011\uff5a\015\uff5a\016\uff5a\050\uff5a\001\002\000\004" + + "\002\001\001\002\000\004\002\000\001\002\000\004\013" + + "\ufff2\001\002\000\004\013\ufff5\001\002\000\004\010\u014e" + + "\001\002\000\006\010\ufff1\012\u014b\001\002\000\006\003" + + "\u014c\034\u014a\001\002\000\004\010\uffef\001\002\000\004" + + "\010\ufff0\001\002\000\006\034\u0112\036\u0113\001\002\000" + + "\006\012\u0150\013\ufff3\001\002\000\006\003\u0147\034\u014a" + + "\001\002\000\004\013\ufff4\001\002" }); /** Access to parse-action table. */ public short[][] action_table() {return _action_table;} @@ -493,183 +502,189 @@ public class parser extends java_cup.runtime.lr_parser { /** reduce_goto table. */ protected static final short[][] _reduce_table = unpackFromStrings(new String[] { - "\000\u0148\000\022\006\020\007\004\010\016\012\014\013" + - "\011\045\007\060\005\061\006\001\001\000\006\003\u0141" + - "\011\u0140\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\002\001\001\000\020\006\020\010\016" + - "\012\014\013\u013d\045\007\060\005\061\006\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\020\006\020\010\016\012" + - "\014\013\u0117\045\007\060\005\061\006\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\004\026" + - "\025\001\001\000\002\001\001\000\006\017\366\025\372" + - "\001\001\000\004\037\030\001\001\000\004\004\363\001" + - "\001\000\002\001\001\000\002\001\001\000\042\005\035" + - "\012\055\014\050\015\036\016\060\020\045\022\047\023" + - "\041\030\043\036\053\041\034\042\051\044\054\052\056" + - "\056\062\057\063\001\001\000\002\001\001\000\004\041" + - "\354\001\001\000\002\001\001\000\026\005\035\014\050" + - "\015\036\016\060\020\045\023\345\041\034\052\056\056" + - "\062\057\063\001\001\000\002\001\001\000\006\034\340" + - "\041\342\001\001\000\002\001\001\000\004\044\336\001" + - "\001\000\002\001\001\000\002\001\001\000\014\024\237" + - "\034\105\050\074\051\077\052\103\001\001\000\002\001" + - "\001\000\006\034\226\041\231\001\001\000\030\005\035" + - "\014\050\015\036\016\060\020\045\023\223\041\034\044" + - "\224\052\056\056\062\057\063\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\010\012\055\022" + - "\175\036\053\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\004\054\065\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\014\024\076\034\105\050\074\051\077\052\103\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + + "\000\u014f\000\022\010\020\011\004\012\016\014\014\015" + + "\011\044\007\052\005\053\006\001\001\000\006\003\u0148" + + "\013\u0147\001\001\000\002\001\001\000\002\001\001\000" + + "\002\001\001\000\002\001\001\000\020\010\020\012\016" + + "\014\014\015\u0144\044\007\052\005\053\006\001\001\000" + + "\002\001\001\000\002\001\001\000\004\055\u0120\001\001" + + "\000\002\001\001\000\002\001\001\000\020\010\020\012" + + "\016\014\014\015\u011d\044\007\052\005\053\006\001\001" + + "\000\004\054\023\001\001\000\002\001\001\000\002\001" + + "\001\000\002\001\001\000\004\027\026\001\001\000\006" + + "\021\u0102\026\u0106\001\001\000\002\001\001\000\004\037" + + "\031\001\001\000\002\001\001\000\002\001\001\000\002" + + "\001\001\000\042\006\057\007\036\014\056\016\046\017" + + "\037\020\061\022\050\024\051\025\043\031\044\036\053" + + "\041\052\043\055\060\064\061\063\065\035\001\001\000" + + "\002\001\001\000\004\065\361\001\001\000\002\001\001" + + "\000\026\006\057\007\036\016\046\017\037\020\061\022" + + "\050\025\352\060\064\061\063\065\035\001\001\000\002" + + "\001\001\000\006\004\345\065\347\001\001\000\002\001" + + "\001\000\002\001\001\000\004\043\342\001\001\000\002" + + "\001\001\000\020\004\107\006\105\057\243\062\073\063" + + "\100\064\244\065\104\001\001\000\002\001\001\000\006" + + "\004\235\065\240\001\001\000\002\001\001\000\030\006" + + "\057\007\036\016\046\017\037\020\061\022\050\025\232" + + "\043\233\060\064\061\063\065\035\001\001\000\002\001" + + "\001\000\010\014\056\024\230\036\053\001\001\000\002" + + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + + "\001\000\002\001\001\000\002\001\001\000\004\050\065" + + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + + "\001\000\002\001\001\000\002\001\001\000\016\004\107" + + "\006\105\062\073\063\100\064\077\065\104\001\001\000" + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\014\024" + - "\131\034\105\050\074\051\077\052\103\001\001\000\010" + - "\034\105\051\130\052\103\001\001\000\002\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\020" + - "\024\111\034\105\035\113\047\112\050\074\051\077\052" + - "\103\001\001\000\002\001\001\000\006\035\116\046\114" + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\012\034\105\050\126\051\077\052\103\001\001" + - "\000\002\001\001\000\012\034\105\050\125\051\077\052" + - "\103\001\001\000\014\024\123\034\105\050\074\051\077" + - "\052\103\001\001\000\012\034\105\050\122\051\077\052" + - "\103\001\001\000\002\001\001\000\006\035\116\046\124" + + "\001\000\002\001\001\000\002\001\001\000\016\004\107" + + "\006\105\062\073\063\100\064\137\065\104\001\001\000" + + "\012\004\107\006\105\063\136\065\104\001\001\000\002" + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + + "\001\000\002\001\001\000\004\066\112\001\001\000\022" + + "\004\107\006\105\035\116\046\115\062\073\063\100\064" + + "\114\065\104\001\001\000\002\001\001\000\004\067\117" + + "\001\001\000\002\001\001\000\002\001\001\000\006\035" + + "\127\045\126\001\001\000\014\004\107\006\105\062\125" + + "\063\100\065\104\001\001\000\014\004\107\006\105\062" + + "\124\063\100\065\104\001\001\000\014\004\107\006\105" + + "\062\123\063\100\065\104\001\001\000\002\001\001\000" + + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + + "\001\001\000\016\004\107\006\105\062\073\063\100\064" + + "\131\065\104\001\001\000\004\070\132\001\001\000\006" + + "\035\127\045\133\001\001\000\002\001\001\000\002\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\014\024\134\034\105\050\074\051" + - "\077\052\103\001\001\000\002\001\001\000\002\001\001" + - "\000\012\034\105\050\143\051\077\052\103\001\001\000" + - "\012\034\105\050\142\051\077\052\103\001\001\000\012" + - "\034\105\050\141\051\077\052\103\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\014\024\145" + - "\034\105\050\074\051\077\052\103\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\004\034\153\001\001\000\002\001" + - "\001\000\040\005\035\012\055\014\050\015\036\016\060" + - "\020\045\022\047\023\041\030\155\036\053\041\034\044" + - "\054\052\056\056\062\057\063\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\040" + - "\005\035\012\055\014\050\015\036\016\060\020\045\022" + - "\047\023\041\030\165\036\053\041\034\044\054\052\056" + - "\056\062\057\063\001\001\000\002\001\001\000\002\001" + + "\000\002\001\001\000\016\004\107\006\105\062\073\063" + + "\100\064\142\065\104\001\001\000\002\001\001\000\002" + + "\001\001\000\014\004\107\006\105\062\151\063\100\065" + + "\104\001\001\000\014\004\107\006\105\062\150\063\100" + + "\065\104\001\001\000\014\004\107\006\105\062\147\063" + + "\100\065\104\001\001\000\002\001\001\000\002\001\001" + + "\000\002\001\001\000\016\004\107\006\105\062\073\063" + + "\100\064\153\065\104\001\001\000\002\001\001\000\002" + + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + + "\001\000\004\004\161\001\001\000\002\001\001\000\040" + + "\006\057\007\036\014\056\016\046\017\037\020\061\022" + + "\050\024\051\025\043\031\163\036\053\043\055\060\064" + + "\061\063\065\035\001\001\000\002\001\001\000\002\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\014\024\215\034\105\050\074\051\077" + - "\052\103\001\001\000\014\024\200\034\105\050\074\051" + - "\077\052\103\001\001\000\002\001\001\000\002\001\001" + - "\000\042\005\035\012\055\014\050\015\036\016\060\020" + - "\045\022\047\023\041\030\204\036\053\041\034\044\054" + - "\052\056\055\205\056\062\057\063\001\001\000\002\001" + - "\001\000\004\055\207\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\042\005" + - "\035\012\055\014\050\015\036\016\060\020\045\022\047" + - "\023\041\030\212\036\053\041\034\044\054\052\056\055" + - "\213\056\062\057\063\001\001\000\004\055\214\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\042\005\035\012\055\014\050\015\036\016\060\020\045" + - "\022\047\023\041\030\217\036\053\041\034\044\054\052" + - "\056\055\220\056\062\057\063\001\001\000\004\055\221" + + "\000\040\006\057\007\036\014\056\016\046\017\037\020" + + "\061\022\050\024\051\025\043\031\171\036\053\043\055" + + "\060\064\061\063\065\035\001\001\000\002\001\001\000" + + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\004\044\225\001\001\000\002\001\001\000\002" + + "\001\000\002\001\001\000\002\001\001\000\020\004\107" + + "\006\105\056\223\062\073\063\100\064\205\065\104\001" + + "\001\000\020\004\107\006\105\056\207\062\073\063\100" + + "\064\205\065\104\001\001\000\002\001\001\000\002\001" + + "\001\000\002\001\001\000\042\006\057\007\036\014\056" + + "\016\046\017\037\020\061\022\050\024\051\025\043\031" + + "\212\036\053\043\055\051\213\060\064\061\063\065\035" + + "\001\001\000\002\001\001\000\004\051\215\001\001\000" + + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + + "\001\001\000\042\006\057\007\036\014\056\016\046\017" + + "\037\020\061\022\050\024\051\025\043\031\220\036\053" + + "\043\055\051\221\060\064\061\063\065\035\001\001\000" + + "\004\051\222\001\001\000\002\001\001\000\002\001\001" + + "\000\002\001\001\000\042\006\057\007\036\014\056\016" + + "\046\017\037\020\061\022\050\024\051\025\043\031\225" + + "\036\053\043\055\051\226\060\064\061\063\065\035\001" + + "\001\000\004\051\227\001\001\000\002\001\001\000\002" + + "\001\001\000\002\001\001\000\002\001\001\000\004\043" + + "\234\001\001\000\002\001\001\000\002\001\001\000\002" + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\044" + - "\005\035\012\055\014\050\015\036\016\060\020\045\021" + - "\247\022\047\023\041\030\246\036\053\040\245\041\034" + - "\044\054\052\056\056\062\057\063\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\006\021\277" + - "\040\245\001\001\000\002\001\001\000\014\024\253\034" + - "\105\050\074\051\077\052\103\001\001\000\004\040\252" + - "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\044\005\035\012\055\014\050" + - "\015\036\016\060\020\045\021\260\022\047\023\041\030" + - "\257\036\053\040\245\041\034\044\054\052\056\056\062" + - "\057\063\001\001\000\006\021\261\040\245\001\001\000" + - "\002\001\001\000\002\001\001\000\044\005\035\012\055" + - "\014\050\015\036\016\060\020\045\021\264\022\047\023" + - "\041\030\263\036\053\040\245\041\034\044\054\052\056" + - "\056\062\057\063\001\001\000\006\021\265\040\245\001" + + "\044\006\057\007\036\014\056\016\046\017\037\020\061" + + "\022\050\023\254\024\051\025\043\031\253\036\053\040" + + "\252\043\055\060\064\061\063\065\035\001\001\000\002" + + "\001\001\000\002\001\001\000\002\001\001\000\006\023" + + "\304\040\252\001\001\000\002\001\001\000\020\004\107" + + "\006\105\057\260\062\073\063\100\064\244\065\104\001" + + "\001\000\004\040\257\001\001\000\002\001\001\000\002" + + "\001\001\000\002\001\001\000\002\001\001\000\044\006" + + "\057\007\036\014\056\016\046\017\037\020\061\022\050" + + "\023\265\024\051\025\043\031\264\036\053\040\252\043" + + "\055\060\064\061\063\065\035\001\001\000\006\023\266" + + "\040\252\001\001\000\002\001\001\000\002\001\001\000" + + "\044\006\057\007\036\014\056\016\046\017\037\020\061" + + "\022\050\023\271\024\051\025\043\031\270\036\053\040" + + "\252\043\055\060\064\061\063\065\035\001\001\000\006" + + "\023\272\040\252\001\001\000\002\001\001\000\002\001" + + "\001\000\002\001\001\000\044\006\057\007\036\014\056" + + "\016\046\017\037\020\061\022\050\023\276\024\051\025" + + "\043\031\275\036\053\040\252\043\055\060\064\061\063" + + "\065\035\001\001\000\006\023\277\040\252\001\001\000" + + "\002\001\001\000\002\001\001\000\044\006\057\007\036" + + "\014\056\016\046\017\037\020\061\022\050\023\302\024" + + "\051\025\043\031\301\036\053\040\252\043\055\060\064" + + "\061\063\065\035\001\001\000\006\023\303\040\252\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\044\005\035\012\055\014\050\015\036\016\060\020" + - "\045\021\271\022\047\023\041\030\270\036\053\040\245" + - "\041\034\044\054\052\056\056\062\057\063\001\001\000" + - "\006\021\272\040\245\001\001\000\002\001\001\000\002" + - "\001\001\000\044\005\035\012\055\014\050\015\036\016" + - "\060\020\045\021\275\022\047\023\041\030\274\036\053" + - "\040\245\041\034\044\054\052\056\056\062\057\063\001" + - "\001\000\006\021\276\040\245\001\001\000\002\001\001" + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\042" + - "\005\035\012\055\014\050\015\036\016\060\020\045\022" + - "\047\023\041\030\305\036\053\040\306\041\034\044\054" + - "\052\056\056\062\057\063\001\001\000\004\040\313\001" + - "\001\000\002\001\001\000\004\040\310\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\044\005\035\012\055\014\050" + - "\015\036\016\060\020\045\021\317\022\047\023\041\030" + - "\316\036\053\040\245\041\034\044\054\052\056\056\062" + - "\057\063\001\001\000\006\021\320\040\245\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\044" + - "\005\035\012\055\014\050\015\036\016\060\020\045\021" + - "\324\022\047\023\041\030\323\036\053\040\245\041\034" + - "\044\054\052\056\056\062\057\063\001\001\000\006\021" + - "\325\040\245\001\001\000\002\001\001\000\002\001\001" + - "\000\044\005\035\012\055\014\050\015\036\016\060\020" + - "\045\021\330\022\047\023\041\030\327\036\053\040\245" + - "\041\034\044\054\052\056\056\062\057\063\001\001\000" + - "\006\021\331\040\245\001\001\000\002\001\001\000\002" + + "\002\001\001\000\042\006\057\007\036\014\056\016\046" + + "\017\037\020\061\022\050\024\051\025\043\031\313\036" + + "\053\040\312\043\055\060\064\061\063\065\035\001\001" + + "\000\002\001\001\000\004\040\317\001\001\000\004\040" + + "\315\001\001\000\002\001\001\000\002\001\001\000\002" + + "\001\001\000\002\001\001\000\002\001\001\000\044\006" + + "\057\007\036\014\056\016\046\017\037\020\061\022\050" + + "\023\324\024\051\025\043\031\323\036\053\040\252\043" + + "\055\060\064\061\063\065\035\001\001\000\006\023\325" + + "\040\252\001\001\000\002\001\001\000\002\001\001\000" + + "\002\001\001\000\044\006\057\007\036\014\056\016\046" + + "\017\037\020\061\022\050\023\331\024\051\025\043\031" + + "\330\036\053\040\252\043\055\060\064\061\063\065\035" + + "\001\001\000\006\023\332\040\252\001\001\000\002\001" + + "\001\000\002\001\001\000\044\006\057\007\036\014\056" + + "\016\046\017\037\020\061\022\050\023\335\024\051\025" + + "\043\031\334\036\053\040\252\043\055\060\064\061\063" + + "\065\035\001\001\000\006\023\336\040\252\001\001\000" + + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\014" + - "\024\347\034\105\050\074\051\077\052\103\001\001\000" + - "\002\001\001\000\002\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\002\001" + + "\002\001\001\000\016\004\107\006\105\062\073\063\100" + + "\064\354\065\104\001\001\000\002\001\001\000\002\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\004\027" + - "\376\001\001\000\002\001\001\000\004\025\u0100\001\001" + + "\001\001\000\002\001\001\000\002\001\001\000\004\037" + + "\376\001\001\000\042\006\057\007\036\014\056\016\046" + + "\017\037\020\061\022\050\024\051\025\043\031\044\036" + + "\053\041\374\043\055\060\064\061\063\065\035\001\001" + + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + + "\042\006\057\007\036\014\056\016\046\017\037\020\061" + + "\022\050\024\051\025\043\031\044\036\053\041\u0100\043" + + "\055\060\064\061\063\065\035\001\001\000\002\001\001" + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\004\027\u0101\001\001\000\002\001\001\000\002\001\001" + - "\000\004\004\u0104\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\004\004\u010b" + + "\002\001\001\000\002\001\001\000\004\030\u010a\001\001" + + "\000\002\001\001\000\004\026\u010c\001\001\000\002\001" + + "\001\000\002\001\001\000\002\001\001\000\004\030\u010d" + + "\001\001\000\002\001\001\000\002\001\001\000\004\005" + + "\u0110\001\001\000\002\001\001\000\002\001\001\000\002" + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\004\004\u010d\001\001\000\002\001\001\000\004" + - "\037\u0112\001\001\000\042\005\035\012\055\014\050\015" + - "\036\016\060\020\045\022\047\023\041\030\043\036\053" + - "\041\034\042\u0110\044\054\052\056\056\062\057\063\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\042\005\035\012\055\014\050\015\036\016\060\020" + - "\045\022\047\023\041\030\043\036\053\041\034\042\u0114" + - "\044\054\052\056\056\062\057\063\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\004\026\u011b\001" + - "\001\000\002\001\001\000\042\005\035\012\055\014\050" + - "\015\036\016\060\020\045\022\047\023\041\030\u011f\036" + - "\053\041\034\044\054\052\056\053\u011d\056\062\057\063" + + "\001\000\004\005\u0119\001\001\000\002\001\001\000\002" + + "\001\001\000\002\001\001\000\004\005\u011b\001\001\000" + + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + + "\001\001\000\002\001\001\000\004\027\u0122\001\001\000" + + "\002\001\001\000\002\001\001\000\042\006\057\007\036" + + "\014\056\016\046\017\037\020\061\022\050\024\051\025" + + "\043\031\u0126\036\053\043\055\047\u0124\060\064\061\063" + + "\065\035\001\001\000\002\001\001\000\002\001\001\000" + + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + + "\001\000\004\042\u0142\001\001\000\004\071\u012f\001\001" + + "\000\010\032\u0132\033\u0133\034\u0130\001\001\000\002\001" + + "\001\000\002\001\001\000\010\032\u0132\033\u0140\034\u0130" + + "\001\001\000\004\042\u013b\001\001\000\002\001\001\000" + + "\002\001\001\000\004\005\u0137\001\001\000\002\001\001" + + "\000\002\001\001\000\004\005\u013a\001\001\000\002\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\004\043\u013b\001\001\000\004\062\u0128\001\001\000\010" + - "\031\u012c\032\u012b\033\u0129\001\001\000\002\001\001\000" + - "\002\001\001\000\004\043\u0135\001\001\000\010\031\u012c" + - "\032\u0134\033\u0129\001\001\000\002\001\001\000\002\001" + - "\001\000\004\004\u0130\001\001\000\002\001\001\000\002" + - "\001\001\000\004\004\u0133\001\001\000\002\001\001\000" + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\002\001\001\000\004\003\u0145\001\001" + - "\000\002\001\001\000\002\001\001\000\004\004\u0147\001" + - "\001\000\002\001\001\000\006\003\u0141\011\u0149\001\001" + - "\000\002\001\001" }); + "\001\000\002\001\001\000\002\001\001\000\004\003\u014c" + + "\001\001\000\002\001\001\000\002\001\001\000\004\005" + + "\u014e\001\001\000\002\001\001\000\006\003\u0148\013\u0150" + + "\001\001\000\002\001\001" }); /** Access to reduce_goto table. */ public short[][] reduce_table() {return _reduce_table;} @@ -712,14 +727,17 @@ public java_cup.runtime.Symbol do_action( String errores = ""; Boolean has_main = false; Boolean first_time = true; + Boolean in_method = false; tabla ambito; HashMap seen_types; Tipo tmp_tipo; - + ArrayList params; // = new ArrayList(); + + public int getline(Object info){ if(info instanceof java_cup.runtime.Symbol) { java_cup.runtime.Symbol s=((java_cup.runtime.Symbol)info); - return s.left; + return s.left; } return -1; @@ -778,16 +796,16 @@ class CUP$parser$actions { switch (CUP$parser$act_num) { /*. . . . . . . . . . . . . . . . . . . .*/ - case 166: // declaracion2 ::= error + case 173: // declaracion2 ::= error { Object RESULT = null; - parser.report_error("Se esperaba As ",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(25/*declaracion2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if(!parser.first_time) parser.report_error("Se esperaba As ",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(26/*declaracion2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 165: // declaracion2 ::= NAME AS tipo + case 172: // declaracion2 ::= NAME AS tipo { Object RESULT = null; int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; @@ -796,13 +814,18 @@ class CUP$parser$actions { int t1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; int t1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; Tipo t1 = (Tipo)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; - parser.tmp_tipo.agregar_atributos(n1,t1); - CUP$parser$result = new java_cup.runtime.Symbol(25/*declaracion2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if( parser.first_time) { + boolean meter =parser.tmp_tipo.agregar_atributos(n1,t1); + if(!meter) parser.report_error("No se puede agregar atributo de nombre " + n1 + " ya existe en este contexto",n1); + + } + + CUP$parser$result = new java_cup.runtime.Symbol(26/*declaracion2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 164: // declaracion2 ::= DIM NAME AS tipo + case 171: // declaracion2 ::= DIM NAME AS tipo { Object RESULT = null; int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; @@ -811,275 +834,330 @@ class CUP$parser$actions { int t1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; int t1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; Tipo t1 = (Tipo)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; - parser.tmp_tipo.agregar_atributos(n1,t1); - CUP$parser$result = new java_cup.runtime.Symbol(25/*declaracion2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if(parser.first_time){ + boolean meter = parser.tmp_tipo.agregar_atributos(n1,t1); + if(!meter) parser.report_error("No se puede agregar atributo de nombre " + n1 + " ya existe en este contexto",n1); + } + CUP$parser$result = new java_cup.runtime.Symbol(26/*declaracion2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 163: // variables_declar2 ::= declaracion2 FIN + case 170: // variables_declar2 ::= declaracion2 FIN { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(23/*variables_declar2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(24/*variables_declar2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 162: // list_declar2 ::= variables_declar2 + case 169: // list_declar2 ::= variables_declar2 { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(24/*list_declar2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(25/*list_declar2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 161: // list_declar2 ::= variables_declar2 list_declar2 + case 168: // list_declar2 ::= variables_declar2 list_declar2 { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(24/*list_declar2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(25/*list_declar2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 160: // dectype ::= TYPE NAME error end_type FIN + case 167: // dectype ::= TYPE NAME error end_type FIN { Object RESULT = null; - parser.report_error(" estructura no puede estar vacia",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(35/*dectype*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if(!parser.first_time) parser.report_error(" estructura no puede estar vacia",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(34/*dectype*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 159: // dectype ::= TYPE NAME FIN NT$0 list_declar2 end_type FIN + case 166: // dectype ::= TYPE NAME FIN NT$3 list_declar2 end_type FIN { Object RESULT = null; - // propagate RESULT from NT$0 + // propagate RESULT from NT$3 if ( ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value != null ) RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value; int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left; int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).right; String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-5)).value; - parser.seen_types.put(n1,parser.tmp_tipo); - - CUP$parser$result = new java_cup.runtime.Symbol(35/*dectype*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-6)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if(parser.first_time) {parser.seen_types.put(n1,parser.tmp_tipo); + } + CUP$parser$result = new java_cup.runtime.Symbol(34/*dectype*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-6)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 158: // NT$0 ::= + case 165: // NT$3 ::= { Object RESULT = null; int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left; int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).right; String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; - parser.tmp_tipo = new Tipo(n1); - CUP$parser$result = new java_cup.runtime.Symbol(48/*NT$0*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if(parser.first_time) {parser.tmp_tipo = new Tipo(n1); parser.tmp_tipo.setTipoFinal(3);} + CUP$parser$result = new java_cup.runtime.Symbol(55/*NT$3*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 157: // rango ::= NAME IGUAL error TO expression + case 164: // rango ::= NAME IGUAL error TO expression { Object RESULT = null; - parser.report_error("Se esperaba valor de inicio",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(42/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba valor de inicio",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(38/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 156: // rango ::= NAME IGUAL expression TO error + case 163: // rango ::= NAME IGUAL expression TO error { Object RESULT = null; - parser.report_error("Se esperaba valor de final",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(42/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba valor de final",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(38/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 155: // rango ::= NAME IGUAL error TO error + case 162: // rango ::= NAME IGUAL error TO error { Object RESULT = null; - parser.report_error("Error de rangos",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(42/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Error de rangos",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(38/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 154: // rango ::= NAME IGUAL error + case 161: // rango ::= NAME IGUAL error { Object RESULT = null; - parser.report_error("Error de rangos/asignacion",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(42/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Error de rangos/asignacion",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(38/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 153: // rango ::= NAME IGUAL error TO + case 160: // rango ::= NAME IGUAL error TO { Object RESULT = null; - parser.report_error("Error de rangos, valor inicial y final",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(42/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Error de rangos, valor inicial y final",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(38/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 152: // rango ::= NAME IGUAL TO error + case 159: // rango ::= NAME IGUAL TO error { Object RESULT = null; - parser.report_error("Error de rangos, no existe valor inicial",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(42/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Error de rangos, no existe valor inicial",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(38/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 151: // rango ::= NAME IGUAL expression TO expression + case 158: // rango ::= NAME IGUAL expression TO expression { Object RESULT = null; + int t1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int t1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + Objeto t1 = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; + int t2left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int t2right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto t2 = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + if( !t1.t.getName().equals("integer")) + parser.report_error("Rango no numerico en expression inicial",t1); + if( !t2.t.getName().equals("integer")) + parser.report_error("Rango no numerico en expression inicial",t2); + } - CUP$parser$result = new java_cup.runtime.Symbol(42/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + + CUP$parser$result = new java_cup.runtime.Symbol(38/*rango*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 150: // loop_for ::= FOR rango FIN bloque error + case 157: // loop_for ::= FOR rango FIN bloque error { Object RESULT = null; - parser.report_error("Se esperaba un Next",sym.NEXT); - CUP$parser$result = new java_cup.runtime.Symbol(10/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba un Next",sym.NEXT); + CUP$parser$result = new java_cup.runtime.Symbol(12/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 149: // loop_for ::= FOR rango FIN error + case 156: // loop_for ::= FOR rango FIN error { Object RESULT = null; - parser.report_error("Se esperaba un Next",sym.NEXT); - CUP$parser$result = new java_cup.runtime.Symbol(10/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba un Next",sym.NEXT); + CUP$parser$result = new java_cup.runtime.Symbol(12/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 148: // loop_for ::= FOR error FIN bloque NEXT FIN + case 155: // loop_for ::= FOR error FIN bloque NEXT FIN { Object RESULT = null; - parser.report_error("Error en rango",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(10/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Error en rango",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(12/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 147: // loop_for ::= FOR error FIN NEXT FIN + case 154: // loop_for ::= FOR error FIN NEXT FIN { Object RESULT = null; - parser.report_error("Error en rango",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(10/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Error en rango",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(12/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 146: // loop_for ::= FOR rango FIN NEXT FIN + case 153: // loop_for ::= FOR rango FIN NEXT FIN { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(10/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(12/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 145: // loop_for ::= FOR rango FIN bloque NEXT FIN + case 152: // loop_for ::= FOR rango FIN bloque NEXT FIN { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(10/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(12/*loop_for*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 144: // salir_loop ::= error + case 151: // salir_loop ::= error { Object RESULT = null; - parser.report_error("se esperaba salida de while",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(43/*salir_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("se esperaba salida de while",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(39/*salir_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 143: // salir_loop ::= LOOP FIN + case 150: // salir_loop ::= LOOP FIN { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(43/*salir_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(39/*salir_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + } + return CUP$parser$result; + + /*. . . . . . . . . . . . . . . . . . . .*/ + case 149: // do_loop ::= DO WHILE error FIN bloque salir_loop + { + Object RESULT = null; + if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(13/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 142: // do_loop ::= DO WHILE error FIN bloque salir_loop + case 148: // do_loop ::= DO WHILE error FIN salir_loop { Object RESULT = null; - parser.report_error("Se esperaba expresion booleana",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(11/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(13/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 141: // do_loop ::= DO WHILE error FIN salir_loop + case 147: // do_loop ::= DO error fake_while FIN salir_loop { Object RESULT = null; - parser.report_error("Se esperaba expresion booleana",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(11/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba While ",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(13/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 140: // do_loop ::= DO error expression FIN salir_loop + case 146: // do_loop ::= DO error fake_while FIN bloque salir_loop { Object RESULT = null; - parser.report_error("Se esperaba While ",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(11/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba While ",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(13/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 139: // do_loop ::= DO error expression FIN bloque salir_loop + case 145: // do_loop ::= DO WHILE fake_while FIN salir_loop { Object RESULT = null; - parser.report_error("Se esperaba While ",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(11/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + + CUP$parser$result = new java_cup.runtime.Symbol(13/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 138: // do_loop ::= DO WHILE expression FIN salir_loop + case 144: // do_loop ::= DO WHILE fake_while FIN bloque salir_loop { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(11/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(13/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 137: // do_loop ::= DO WHILE expression FIN bloque salir_loop + case 143: // fake_if ::= expression { Object RESULT = null; + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + if(!e.t.getName().equals("boolean")){ + parser.report_error("Se esperaba expression booleana dentro del If",e); + } + } + + + CUP$parser$result = new java_cup.runtime.Symbol(45/*fake_if*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + } + return CUP$parser$result; - CUP$parser$result = new java_cup.runtime.Symbol(11/*do_loop*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + /*. . . . . . . . . . . . . . . . . . . .*/ + case 142: // fake_while ::= expression + { + Object RESULT = null; + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + if(!e.t.getName().equals("boolean")){ + parser.report_error("Se esperaba expression booleana dentro de ciclo while",e); + } + } + + + CUP$parser$result = new java_cup.runtime.Symbol(44/*fake_while*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 136: // salir_if ::= END error + case 141: // salir_if ::= END error { Object RESULT = null; - parser.report_error("Se esperaba End If",sym.ERROR); + if (!parser.first_time) parser.report_error("Se esperaba End If",sym.ERROR); CUP$parser$result = new java_cup.runtime.Symbol(30/*salir_if*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 135: // salir_if ::= END IF + case 140: // salir_if ::= END IF { Object RESULT = null; @@ -1088,316 +1166,324 @@ class CUP$parser$actions { return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 134: // if_inner ::= error salir_if + case 139: // if_inner ::= error salir_if { Object RESULT = null; - parser.report_error("Error del bloque if, sentencia no esperada",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Error del bloque if, sentencia no esperada",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 133: // if_inner ::= ELSE FIN error salir_if FIN + case 138: // if_inner ::= ELSE FIN error salir_if FIN { Object RESULT = null; - parser.report_error("Sentencia inesperada despues del Else",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Sentencia inesperada despues del Else",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 132: // if_inner ::= ELSEIF error THEN FIN bloque if_inner + case 137: // if_inner ::= ELSEIF error THEN FIN bloque if_inner { Object RESULT = null; - parser.report_error("Se esperaba expresion booleana",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 131: // if_inner ::= ELSEIF error FIN bloque if_inner + case 136: // if_inner ::= ELSEIF error FIN bloque if_inner { Object RESULT = null; - parser.report_error("Se esperaba expresion booleana",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 130: // if_inner ::= ELSEIF error THEN FIN if_inner + case 135: // if_inner ::= ELSEIF error THEN FIN if_inner { Object RESULT = null; - parser.report_error("Se esperaba expresion booleana",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 129: // if_inner ::= ELSEIF error FIN if_inner + case 134: // if_inner ::= ELSEIF error FIN if_inner { Object RESULT = null; - parser.report_error("Se esperaba expresion booleana",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 128: // if_inner ::= ELSEIF expression THEN FIN if_inner + case 133: // if_inner ::= ELSEIF fake_if THEN FIN if_inner { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 127: // if_inner ::= ELSEIF expression FIN if_inner + case 132: // if_inner ::= ELSEIF fake_if FIN if_inner { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 126: // if_inner ::= ELSEIF expression THEN FIN bloque if_inner + case 131: // if_inner ::= ELSEIF fake_if THEN FIN bloque if_inner { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 125: // if_inner ::= ELSEIF expression FIN bloque if_inner + case 130: // if_inner ::= ELSEIF fake_if FIN bloque if_inner { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 124: // if_inner ::= ELSE error + case 129: // if_inner ::= ELSE error { Object RESULT = null; - parser.report_error("Error en expresion Else",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Error en expresion Else",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 123: // if_inner ::= ELSE FIN salir_if FIN + case 128: // if_inner ::= ELSE FIN salir_if FIN { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 122: // if_inner ::= ELSE FIN bloque salir_if FIN + case 127: // if_inner ::= ELSE FIN bloque salir_if FIN { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 121: // if_inner ::= salir_if FIN + case 126: // if_inner ::= salir_if FIN { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(15/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(17/*if_inner*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 120: // if_block ::= IF error THEN FIN bloque if_inner + case 125: // if_block ::= IF error THEN FIN bloque if_inner { Object RESULT = null; - parser.report_error("Se esperaba expresion booleana",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(12/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(14/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 119: // if_block ::= IF error FIN bloque if_inner + case 124: // if_block ::= IF error FIN bloque if_inner { Object RESULT = null; - parser.report_error("Se esperaba expresion booleana",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(12/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(14/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 118: // if_block ::= IF error THEN FIN if_inner + case 123: // if_block ::= IF error THEN FIN if_inner { Object RESULT = null; - parser.report_error("Se esperaba expresion booleana",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(12/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(14/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 117: // if_block ::= IF error FIN if_inner + case 122: // if_block ::= IF error FIN if_inner { Object RESULT = null; - parser.report_error("Se esperaba expresion booleana",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(12/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(14/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 116: // if_block ::= IF expression FIN if_inner + case 121: // if_block ::= IF fake_if FIN if_inner { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(12/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(14/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 115: // if_block ::= IF expression THEN FIN if_inner + case 120: // if_block ::= IF fake_if THEN FIN if_inner { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(12/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(14/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 114: // if_block ::= IF expression FIN bloque if_inner + case 119: // if_block ::= IF fake_if FIN bloque if_inner { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(12/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(14/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 113: // if_block ::= IF expression THEN FIN bloque if_inner + case 118: // if_block ::= IF fake_if THEN FIN bloque if_inner { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(12/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(14/*if_block*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 112: // argument ::= error NAME AS tipo + case 117: // argument ::= error NAME AS tipo { Object RESULT = null; - parser.report_error("error en argumento, no existe tipo de referencia",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(19/*argument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("error en argumento, no existe tipo de referencia",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(20/*argument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 111: // argument ::= REF error AS tipo + case 116: // argument ::= REF error AS tipo { Object RESULT = null; - parser.report_error(" error en argumento, no existe nombre de argumento",sym.NAME); - CUP$parser$result = new java_cup.runtime.Symbol(19/*argument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error(" error en argumento, no existe nombre de argumento",sym.NAME); + CUP$parser$result = new java_cup.runtime.Symbol(20/*argument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 110: // argument ::= REF NAME error + case 115: // argument ::= REF NAME error { Object RESULT = null; - parser.report_error(" error en argumento, se esperaba As ",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(19/*argument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error(" error en argumento, se esperaba As ",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(20/*argument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 109: // argument ::= REF NAME AS error + case 114: // argument ::= REF NAME AS error { Object RESULT = null; - parser.report_error(" error en argumento, se esperaba un tipo de dato",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(19/*argument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error(" error en argumento, se esperaba un tipo de dato",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(20/*argument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 108: // argument ::= REF NAME AS tipo + case 113: // argument ::= REF NAME AS tipo { Object RESULT = null; int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; - - CUP$parser$result = new java_cup.runtime.Symbol(19/*argument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + int tleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int tright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Tipo t = (Tipo)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(parser.first_time){ + parser.ambito.agregarATabla(n1,t); + parser.tmp_tipo.metodo_var.add(t); + } + + CUP$parser$result = new java_cup.runtime.Symbol(20/*argument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 107: // argumentlistHelper ::= error PARIZQ + case 112: // argumentlistHelper ::= error PARIZQ { Object RESULT = null; - parser.report_error("error de argumentos",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(21/*argumentlistHelper*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("error de argumentos",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(22/*argumentlistHelper*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 106: // argumentlistHelper ::= PARIZQ + case 111: // argumentlistHelper ::= PARIZQ { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(21/*argumentlistHelper*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(22/*argumentlistHelper*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 105: // argumentlistHelper ::= SEPARADOR argument argumentlistHelper + case 110: // argumentlistHelper ::= SEPARADOR argument argumentlistHelper { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(21/*argumentlistHelper*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(22/*argumentlistHelper*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 104: // schrodingerArgument ::= error + case 109: // schrodingerArgument ::= error { Object RESULT = null; - parser.report_error("error de argumentos",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(13/*schrodingerArgument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("error de argumentos",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(15/*schrodingerArgument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 103: // schrodingerArgument ::= PARIZQ + case 108: // schrodingerArgument ::= PARIZQ { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(13/*schrodingerArgument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(15/*schrodingerArgument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 102: // schrodingerArgument ::= argument argumentlistHelper + case 107: // schrodingerArgument ::= argument argumentlistHelper { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(13/*schrodingerArgument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(15/*schrodingerArgument*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 101: // argumentlist ::= PARDER schrodingerArgument + case 106: // argumentlist ::= PARDER schrodingerArgument { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(20/*argumentlist*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(21/*argumentlist*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 100: // salir_param ::= PARIZQ + case 105: // salir_param ::= PARIZQ { Object RESULT = null; @@ -1406,659 +1492,991 @@ class CUP$parser$actions { return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 99: // paramHelper ::= salir_param + case 104: // paramHelper ::= salir_param { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(36/*paramHelper*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(35/*paramHelper*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 98: // paramHelper ::= SEPARADOR expression paramHelper + case 103: // paramHelper ::= SEPARADOR expression NT$2 paramHelper { Object RESULT = null; + // propagate RESULT from NT$2 + if ( ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value != null ) + RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; - CUP$parser$result = new java_cup.runtime.Symbol(36/*paramHelper*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(35/*paramHelper*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 97: // parametros ::= salir_param + case 102: // NT$2 ::= { Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(37/*parametros*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; +if(!parser.first_time)parser.params.add(e.t); + CUP$parser$result = new java_cup.runtime.Symbol(54/*NT$2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 96: // parametros ::= expression paramHelper + case 101: // parametros ::= salir_param { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(37/*parametros*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(36/*parametros*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 95: // funcionCall ::= NAME PARDER parametros + case 100: // parametros ::= expression NT$1 paramHelper { Object RESULT = null; + // propagate RESULT from NT$1 + if ( ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value != null ) + RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; - CUP$parser$result = new java_cup.runtime.Symbol(40/*funcionCall*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(36/*parametros*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 94: // cadena_s ::= CADENA SALTOCADENA error + case 99: // NT$1 ::= { Object RESULT = null; - parser.report_error("Se esperaba nueva cadena",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(26/*cadena_s*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + if(!parser.first_time)parser.params.add(e.t); + + CUP$parser$result = new java_cup.runtime.Symbol(53/*NT$1*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 93: // cadena_s ::= CADENA + case 98: // funcionCall ::= NAME PARDER NT$0 parametros + { + Tipo RESULT = null; + // propagate RESULT from NT$0 + if ( ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value != null ) + RESULT = (Tipo) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; + int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left; + int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).right; + String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value; + + if(!parser.first_time){ + for( Tipo t :parser.params) + System.out.println(t); + + boolean valido = true; + Tipo tmp = parser.seen_types.get(n1); + if(tmp == null){ + parser.report_error(" No existe metodo con nombre " + n1 ,sym.ERROR); + RESULT = parser.seen_types.get("error"); + } + else{ + if (tmp.metodo_var.size() -1 != parser.params.size()){ + parser.report_error(" Error de argumentos,se esperaban: " + (tmp.metodo_var.size() -1) + " recibidos:" + parser.params.size(),sym.PARDER); + } + else{ + for( int i = 0; i < parser.params.size();i++){ + if(!parser.params.get(i).getName().equals(tmp.metodo_var.get(i).getName())){ + parser.report_error(" Error de argumento " + i + " se esperaba " + tmp.metodo_var.get(i).getName() + " recibio " + parser.params.get(i),sym.PARDER); + } + } + } + + RESULT = tmp.metodo_var.get( tmp.metodo_var.size()-1); + } + } + + CUP$parser$result = new java_cup.runtime.Symbol(4/*funcionCall*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + } + return CUP$parser$result; + + /*. . . . . . . . . . . . . . . . . . . .*/ + case 97: // NT$0 ::= { Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(26/*cadena_s*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left; + int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).right; + String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; + if(!parser.first_time) parser.params = new ArrayList(); + CUP$parser$result = new java_cup.runtime.Symbol(52/*NT$0*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 92: // cadena_s ::= CADENA SALTOCADENA FIN cadena_s + case 96: // cadena_s ::= CADENA SALTOCADENA error { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(26/*cadena_s*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + String RESULT = null; + if (!parser.first_time) parser.report_error("Se esperaba nueva cadena",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(2/*cadena_s*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 91: // factor ::= funcionCall + case 95: // cadena_s ::= CADENA { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(39/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + String RESULT = null; + int cleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int cright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + String c = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + RESULT = c; + CUP$parser$result = new java_cup.runtime.Symbol(2/*cadena_s*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 90: // factor ::= cadena_s + case 94: // cadena_s ::= CADENA SALTOCADENA FIN cadena_s { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(39/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + String RESULT = null; + int cleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left; + int cright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).right; + String c = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value; + int sigleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int sigright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + String sig = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + RESULT = c + sig; + CUP$parser$result = new java_cup.runtime.Symbol(2/*cadena_s*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 89: // factor ::= FALSE + case 93: // factor ::= funcionCall { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(39/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + int fleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int fright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Tipo f = (Tipo)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + RESULT = new Objeto(f); + CUP$parser$result = new java_cup.runtime.Symbol(49/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 88: // factor ::= TRUE + case 92: // factor ::= cadena_s { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(39/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + int sleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int sright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + String s = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + Objeto t = new Objeto(parser.seen_types.get("string")); + String fin = ""; + for(char c:s.toCharArray()){ + if( c != '"') + fin += c; + } + t.SizeChain= fin.length(); + RESULT = t; + CUP$parser$result = new java_cup.runtime.Symbol(49/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 87: // factor ::= NAME PUNTO NAME + case 91: // factor ::= FALSE { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(39/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + RESULT= new Objeto(parser.seen_types.get("boolean")); + CUP$parser$result = new java_cup.runtime.Symbol(49/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 86: // factor ::= NAME + case 90: // factor ::= TRUE { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(39/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + RESULT= new Objeto(parser.seen_types.get("boolean")); + CUP$parser$result = new java_cup.runtime.Symbol(49/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 85: // factor ::= NUM + case 89: // factor ::= nombre { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(39/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + int nleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int nright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto n = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + RESULT = n; + CUP$parser$result = new java_cup.runtime.Symbol(49/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 84: // factor ::= NOT factor + case 88: // factor ::= NUM { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(39/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + RESULT = new Objeto(parser.seen_types.get("integer")); + CUP$parser$result = new java_cup.runtime.Symbol(49/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 83: // factor ::= PARDER expression PARIZQ + case 87: // factor ::= NOT factor { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(39/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + int f1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int f1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto f1 = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + if(!f1.t.getName().equals("boolean")) + parser.report_error("Tipo no booleano en expresion",f1); + } + + CUP$parser$result = new java_cup.runtime.Symbol(49/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 82: // termino ::= factor + case 86: // factor ::= PARDER expression PARIZQ { - Object RESULT = null; + Objeto RESULT = null; + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; + RESULT = e; + CUP$parser$result = new java_cup.runtime.Symbol(49/*factor*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + } + return CUP$parser$result; - CUP$parser$result = new java_cup.runtime.Symbol(38/*termino*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + /*. . . . . . . . . . . . . . . . . . . .*/ + case 85: // termino ::= factor + { + Objeto RESULT = null; + int fleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int fright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto f = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + RESULT = f; + CUP$parser$result = new java_cup.runtime.Symbol(48/*termino*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 81: // termino ::= factor OPREL termino + case 84: // termino ::= factor OPREL termino { - Object RESULT = null; + Objeto RESULT = null; + int fleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int fright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + Objeto f = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; + int tleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int tright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto t = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + if(f.t.getName().equals(t.t.getName()) && f.t.getName().equals("integer")){ + RESULT = new Objeto(parser.seen_types.get("boolean")); + } + else{ - CUP$parser$result = new java_cup.runtime.Symbol(38/*termino*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + parser.report_error(" No se puede comparar " + f.t.getName() + " con " + t.t.getName(),t); + RESULT = new Objeto(parser.seen_types.get("boolean")); + } + } + + CUP$parser$result = new java_cup.runtime.Symbol(48/*termino*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 80: // termino ::= factor ENTRE termino + case 83: // termino ::= factor ENTRE termino { - Object RESULT = null; + Objeto RESULT = null; + int fleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int fright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + Objeto f = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; + int tleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int tright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto t = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + if(f.t.getName().equals(t.t.getName()) && f.t.getName().equals("integer")){ + RESULT = new Objeto(parser.seen_types.get("integer")); + } + else{ - CUP$parser$result = new java_cup.runtime.Symbol(38/*termino*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + parser.report_error(" No se puede dividir " + f.t.getName() + " con " + t.t.getName(),t); + RESULT = new Objeto(parser.seen_types.get("integer")); + } + } + + CUP$parser$result = new java_cup.runtime.Symbol(48/*termino*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 79: // termino ::= factor POR termino + case 82: // termino ::= factor POR termino { - Object RESULT = null; + Objeto RESULT = null; + int fleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int fright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + Objeto f = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; + int tleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int tright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto t = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + if(f.t.getName().equals(t.t.getName()) && f.t.getName().equals("integer")){ + RESULT = new Objeto(parser.seen_types.get("integer")); + } + else{ - CUP$parser$result = new java_cup.runtime.Symbol(38/*termino*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + parser.report_error(" No se puede multiplicar " + f.t.getName() + " con " + t.t.getName(),t); + RESULT = new Objeto(parser.seen_types.get("integer")); + } + } + + CUP$parser$result = new java_cup.runtime.Symbol(48/*termino*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 78: // expression ::= expression IGUAL termino + case 81: // expression ::= expression IGUAL termino { - Object RESULT = null; + Objeto RESULT = null; + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; + int tleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int tright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto t = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + RESULT = new Objeto(parser.seen_types.get("boolean")); + CUP$parser$result = new java_cup.runtime.Symbol(50/*expression*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + } + return CUP$parser$result; - CUP$parser$result = new java_cup.runtime.Symbol(18/*expression*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + /*. . . . . . . . . . . . . . . . . . . .*/ + case 80: // expression ::= termino + { + Objeto RESULT = null; + int tleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int tright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto t = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + RESULT = t; + CUP$parser$result = new java_cup.runtime.Symbol(50/*expression*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 77: // expression ::= termino + case 79: // expression ::= expression MENOS termino { - Object RESULT = null; + Objeto RESULT = null; + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; + int tleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int tright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto t = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + if(e.t.getName().equals(t.t.getName()) && e.t.getName().equals("integer")){ + RESULT = new Objeto(parser.seen_types.get("integer")); + } + else{ - CUP$parser$result = new java_cup.runtime.Symbol(18/*expression*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + parser.report_error(" No se puede restar " + e.t.getName() + " con " + t.t.getName(),t); + RESULT = new Objeto(parser.seen_types.get("integer")); + } + } + + CUP$parser$result = new java_cup.runtime.Symbol(50/*expression*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 76: // expression ::= expression MENOS termino + case 78: // expression ::= expression MAS termino { - Object RESULT = null; + Objeto RESULT = null; + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; + int tleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int tright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + Objeto t = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + if(e.t.getName().equals(t.t.getName()) && e.t.getName().equals("integer")){ + RESULT = new Objeto(parser.seen_types.get("integer")); + } + else{ - CUP$parser$result = new java_cup.runtime.Symbol(18/*expression*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + parser.report_error(" No se puede sumar " + e.t.getName() + " con " + t.t.getName(),t); + RESULT = new Objeto(parser.seen_types.get("integer")); + } + } + + CUP$parser$result = new java_cup.runtime.Symbol(50/*expression*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 75: // expression ::= expression MAS termino + case 77: // nombre ::= NAME PUNTO error { - Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(18/*expression*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + if (!parser.first_time) parser.report_error(" Error de en asignacion ",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(51/*nombre*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 74: // nombre ::= NAME PUNTO error + case 76: // nombre ::= NAME PUNTO NAME { - Object RESULT = null; - parser.report_error(" Error de en asignacion ",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(31/*nombre*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; + int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; + String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; + int n2left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int n2right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + String n2 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + Tipo tmp = parser.ambito.BuscarEnTabla(n1); + System.out.println("llega"); + if( tmp.getName().equals("error")){ + System.out.println(parser.ambito.toString()); + parser.report_error("Variable " + n1 + " no fue declarada/con punto" , n1); + } + else{ + tmp = parser.seen_types.get(tmp.getName()).atributos.get(n2); + if( tmp == null){ + parser.report_error(n1 + " no cuenta con atributo " + n2,n2); + RESULT = new Objeto(parser.seen_types.get("error")); + } + else{ + System.out.println(n1 + "." + n2 + ":" + tmp.toString()); + RESULT = new Objeto(tmp); + } + } + + } + + CUP$parser$result = new java_cup.runtime.Symbol(51/*nombre*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + } + return CUP$parser$result; + + /*. . . . . . . . . . . . . . . . . . . .*/ + case 75: // nombre ::= NAME + { + Objeto RESULT = null; + int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(!parser.first_time){ + Tipo tmp = parser.ambito.BuscarEnTabla(n1); + if( tmp.getName().equals("error")) + parser.report_error("Variable " + n1 + " no fue declarada" , n1); + RESULT = new Objeto(tmp); + } + + CUP$parser$result = new java_cup.runtime.Symbol(51/*nombre*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 73: // nombre ::= NAME PUNTO NAME + case 74: // asignacion ::= nombre IGUAL error FIN { Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(31/*nombre*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("No se puede asignar valor, error en expresion ",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(16/*asignacion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 72: // nombre ::= NAME + case 73: // asignacion ::= nombre IGUAL expression FIN { Object RESULT = null; + int nleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left; + int nright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).right; + Objeto n = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value; + int eleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left; + int eright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).right; + Objeto e = (Objeto)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value; + + + if(!parser.first_time) + if(!n.t.getName().equals(e.t.getName())){ + System.out.println(e.SizeChain); + if(!( n.t.getName().equals("char") && e.t.getName().equals("string") && e.SizeChain <= 1)) + parser.report_error("No se puede asignar " + e.t.getName() + " a variable de tipo " + n.t.getName(),e); + } - CUP$parser$result = new java_cup.runtime.Symbol(31/*nombre*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + + CUP$parser$result = new java_cup.runtime.Symbol(16/*asignacion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 71: // asignacion ::= nombre IGUAL error FIN + case 72: // lee ::= INPUT error { - Object RESULT = null; - parser.report_error("No se puede asignar valor, error en expresion ",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(14/*asignacion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + if (!parser.first_time) parser.report_error(" Se esperaba variable",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(46/*lee*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 70: // asignacion ::= nombre IGUAL expression FIN + case 71: // lee ::= INPUT nombre FIN { - Object RESULT = null; + Objeto RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(14/*asignacion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(46/*lee*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 69: // lee ::= INPUT error + case 70: // escribe ::= WRITELN error { - Object RESULT = null; - parser.report_error(" Se esperaba variable",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(45/*lee*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + if (!parser.first_time) parser.report_error("Se esperaba cadena o variable",sym.WRITELN); + CUP$parser$result = new java_cup.runtime.Symbol(47/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 68: // lee ::= INPUT nombre FIN + case 69: // escribe ::= WRITELN cadena_s FIN { - Object RESULT = null; + Objeto RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(45/*lee*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(47/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 67: // escribe ::= WRITELN error + case 68: // escribe ::= WRITELN nombre FIN { - Object RESULT = null; - parser.report_error("Se esperaba cadena o variable",sym.WRITELN); - CUP$parser$result = new java_cup.runtime.Symbol(44/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + Objeto RESULT = null; + + CUP$parser$result = new java_cup.runtime.Symbol(47/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 66: // escribe ::= WRITELN cadena_s FIN + case 67: // escribe ::= WRITE error { - Object RESULT = null; + Objeto RESULT = null; + if (!parser.first_time) parser.report_error("Se esperaba cadena o variable",sym.WRITE); + CUP$parser$result = new java_cup.runtime.Symbol(47/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + } + return CUP$parser$result; - CUP$parser$result = new java_cup.runtime.Symbol(44/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + /*. . . . . . . . . . . . . . . . . . . .*/ + case 66: // escribe ::= WRITE nombre FIN + { + Objeto RESULT = null; + + CUP$parser$result = new java_cup.runtime.Symbol(47/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 65: // escribe ::= WRITELN nombre FIN + case 65: // escribe ::= WRITE cadena_s FIN { - Object RESULT = null; + Objeto RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(44/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(47/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 64: // escribe ::= WRITE error + case 64: // statement ::= NAME error { Object RESULT = null; - parser.report_error("Se esperaba cadena o variable",sym.WRITE); - CUP$parser$result = new java_cup.runtime.Symbol(44/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error(" Expresion no se esperaba.",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(5/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 63: // escribe ::= WRITE nombre FIN + case 63: // statement ::= lee { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(44/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(5/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 62: // escribe ::= WRITE cadena_s FIN + case 62: // statement ::= escribe { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(44/*escribe*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(5/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 61: // statement ::= NAME error + case 61: // statement ::= funcionCall FIN { Object RESULT = null; - parser.report_error(" Expresion no se esperaba.",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + + CUP$parser$result = new java_cup.runtime.Symbol(5/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 60: // statement ::= lee + case 60: // statement ::= asignacion { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(5/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 59: // statement ::= escribe + case 59: // statement ::= do_loop { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(5/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 58: // statement ::= funcionCall FIN + case 58: // statement ::= loop_for { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(5/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 57: // statement ::= asignacion + case 57: // statement ::= if_block { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(5/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 56: // statement ::= do_loop + case 56: // list_expressions ::= statement { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(19/*list_expressions*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 55: // statement ::= loop_for + case 55: // list_expressions ::= statement list_expressions { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(19/*list_expressions*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 54: // statement ::= if_block + case 54: // list_declar ::= variables_declar { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(3/*statement*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(18/*list_declar*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 53: // list_expressions ::= statement + case 53: // list_declar ::= variables_declar list_declar { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(17/*list_expressions*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(18/*list_declar*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 52: // list_expressions ::= statement list_expressions + case 52: // bloque ::= regresar { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(17/*list_expressions*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(23/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 51: // list_declar ::= variables_declar + case 51: // bloque ::= list_declar regresar { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(16/*list_declar*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(23/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 50: // list_declar ::= variables_declar list_declar + case 50: // bloque ::= list_declar { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(16/*list_declar*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(23/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 49: // bloque ::= regresar + case 49: // bloque ::= list_declar list_expressions regresar { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(22/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(23/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 48: // bloque ::= list_declar regresar + case 48: // bloque ::= list_declar list_expressions { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(22/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(23/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 47: // bloque ::= list_declar + case 47: // bloque ::= list_expressions regresar { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(22/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(23/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 46: // bloque ::= list_declar list_expressions regresar + case 46: // bloque ::= list_expressions { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(22/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(23/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 45: // bloque ::= list_declar list_expressions + case 45: // regresar ::= EXIT error { Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(22/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error(" Salida de metodos: se esperaba Exit Sub o Exit Function",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(33/*regresar*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 44: // bloque ::= list_expressions regresar + case 44: // regresar ::= EXIT FUNCTION FIN { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(22/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(33/*regresar*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 43: // bloque ::= list_expressions + case 43: // regresar ::= EXIT SUB FIN { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(22/*bloque*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(33/*regresar*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 42: // regresar ::= EXIT error + case 42: // end_type ::= END error { Object RESULT = null; - parser.report_error(" Salida de metodos: se esperaba Exit Sub o Exit Function",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(34/*regresar*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba End Type",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(32/*end_type*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 41: // regresar ::= EXIT FUNCTION FIN + case 41: // end_type ::= END TYPE { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(34/*regresar*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(32/*end_type*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 40: // regresar ::= EXIT SUB FIN + case 40: // end_func ::= bloque END error { Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(34/*regresar*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error(" Se esperaba End Function", sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(31/*end_func*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 39: // end_type ::= END error + case 39: // end_func ::= END FUNCTION { Object RESULT = null; - parser.report_error("Se esperaba End Type",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(33/*end_type*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + + CUP$parser$result = new java_cup.runtime.Symbol(31/*end_func*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 38: // end_type ::= END TYPE + case 38: // end_func ::= bloque END FUNCTION { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(33/*end_type*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(31/*end_func*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 37: // end_func ::= bloque END error + case 37: // end_sub ::= END error { Object RESULT = null; - parser.report_error(" Se esperaba End Function", sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(32/*end_func*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error(" Se esperaba End Sub",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(37/*end_sub*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 36: // end_func ::= END FUNCTION + case 36: // end_sub ::= END SUB { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(32/*end_func*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(37/*end_sub*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 35: // end_func ::= bloque END FUNCTION + case 35: // end_sub ::= bloque END SUB { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(32/*end_func*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(37/*end_sub*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 34: // end_sub ::= END error + case 34: // retorno ::= AS error { Object RESULT = null; - parser.report_error(" Se esperaba End Sub",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(41/*end_sub*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error(" Tipo de retorno invalido de funcion, se esperaba: As ",sym.AS); + CUP$parser$result = new java_cup.runtime.Symbol(29/*retorno*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 33: // end_sub ::= END SUB + case 33: // retorno ::= error { Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(41/*end_sub*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error(" No existe tipo de retorno de funcion, se esperaba: As ",sym.AS); + CUP$parser$result = new java_cup.runtime.Symbol(29/*retorno*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 32: // end_sub ::= bloque END SUB + case 32: // retorno ::= AS TIPO { Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(41/*end_sub*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + int t1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int t1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + String t1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(parser.first_time){parser.tmp_tipo.metodo_var.add(parser.seen_types.get(t1)); + parser.seen_types.put( parser.tmp_tipo.getName(), parser.tmp_tipo); + } + + CUP$parser$result = new java_cup.runtime.Symbol(29/*retorno*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 31: // retorno ::= error + case 31: // fake_s ::= NAME { Object RESULT = null; - parser.report_error(" No existe tipo de retorno de funcion, se esperaba: As ",sym.AS); - CUP$parser$result = new java_cup.runtime.Symbol(29/*retorno*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + + if(parser.first_time){ + tabla nuevo_ambito = new tabla(parser.ambito,n1); + parser.ambito.hijos.add(nuevo_ambito); + parser.ambito = nuevo_ambito; + parser.tmp_tipo = new Tipo(n1); + parser.tmp_tipo.setTipoFinal(2); + if (n1.toLowerCase().equals("main")) parser.has_main = true; + } + else{ + for(tabla t:parser.ambito.hijos) + { + if( t.ambito.equals(n1)) + { parser.ambito = t; + break;} + } + } + + + + CUP$parser$result = new java_cup.runtime.Symbol(43/*fake_s*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 30: // retorno ::= AS tipo + case 30: // fake_f ::= NAME { Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(29/*retorno*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; + int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; + String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; + if(parser.first_time){ + tabla nuevo_ambito = new tabla(parser.ambito,n1); parser.ambito.hijos.add(nuevo_ambito); + parser.ambito = nuevo_ambito; + parser.tmp_tipo = new Tipo(n1); + parser.tmp_tipo.setTipoFinal(1); + } + else{ + + for(tabla t:parser.ambito.hijos) + { + if( t.ambito.equals(n1)) + { parser.ambito = t; + break;} + } + } + + CUP$parser$result = new java_cup.runtime.Symbol(42/*fake_f*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 29: // funcion ::= FUNCTION NAME error + case 29: // funcion ::= FUNCTION fake_f error { Object RESULT = null; - parser.report_error("Error en firma de funcion",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(47/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Error en firma de funcion",sym.ERROR); parser.ambito = parser.ambito.parent; + CUP$parser$result = new java_cup.runtime.Symbol(41/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 28: // funcion ::= FUNCTION NAME error FIN end_func FIN + case 28: // funcion ::= FUNCTION fake_f error FIN end_func FIN { Object RESULT = null; - parser.report_error("error de parametros",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(47/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("error de parametros",sym.ERROR); parser.ambito = parser.ambito.parent; + CUP$parser$result = new java_cup.runtime.Symbol(41/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 27: // funcion ::= FUNCTION NAME error PARIZQ retorno FIN end_func FIN + case 27: // funcion ::= FUNCTION fake_f error PARIZQ retorno FIN end_func FIN { Object RESULT = null; - parser.report_error("error de parametros",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(47/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-7)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("error de parametros",sym.ERROR); parser.ambito = parser.ambito.parent; + CUP$parser$result = new java_cup.runtime.Symbol(41/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-7)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2066,38 +2484,35 @@ class CUP$parser$actions { case 26: // funcion ::= FUNCTION error FIN { Object RESULT = null; - parser.report_error("Se esperaba nombre de funcion",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(47/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("Se esperaba nombre de funcion",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(41/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 25: // funcion ::= FUNCTION NAME argumentlist retorno FIN end_func FIN + case 25: // funcion ::= FUNCTION fake_f argumentlist retorno FIN error FIN { Object RESULT = null; - - CUP$parser$result = new java_cup.runtime.Symbol(47/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-6)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (!parser.first_time) parser.report_error("oh well",sym.ERROR); parser.ambito = parser.ambito.parent; + CUP$parser$result = new java_cup.runtime.Symbol(41/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-6)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 24: // funcion ::= FUNCTION NAME argumentlist retorno FIN error FIN + case 24: // funcion ::= FUNCTION fake_f argumentlist retorno FIN end_func FIN { Object RESULT = null; - parser.report_error("oh wel",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(47/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-6)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + parser.ambito = parser.ambito.parent; + CUP$parser$result = new java_cup.runtime.Symbol(41/*funcion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-6)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 23: // subfunc ::= SUB NAME argumentlist FIN end_sub FIN + case 23: // subfunc ::= SUB fake_s argumentlist FIN end_sub FIN { Object RESULT = null; - int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left; - int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).right; - String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-4)).value; - if (n1.toLowerCase().equals("main")) parser.has_main = true; - CUP$parser$result = new java_cup.runtime.Symbol(46/*subfunc*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + parser.ambito = parser.ambito.parent; + CUP$parser$result = new java_cup.runtime.Symbol(40/*subfunc*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2106,7 +2521,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(4/*metodo*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(6/*metodo*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2115,7 +2530,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(4/*metodo*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(6/*metodo*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2126,9 +2541,14 @@ class CUP$parser$actions { int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; - Tipo x = parser.seen_types.get(n1.toLowerCase()); - RESULT = x; - CUP$parser$result = new java_cup.runtime.Symbol(2/*tipo*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + + Tipo x = parser.seen_types.get(n1.toLowerCase()); + if( x ==null) + { + x = new Tipo(n1.toLowerCase()); + } + RESULT = x; + CUP$parser$result = new java_cup.runtime.Symbol(3/*tipo*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2139,9 +2559,11 @@ class CUP$parser$actions { int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; - Tipo x = parser.seen_types.get(n1.toLowerCase()); - RESULT = x; - CUP$parser$result = new java_cup.runtime.Symbol(2/*tipo*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + + Tipo x = parser.seen_types.get(n1.toLowerCase()); + RESULT = x; + + CUP$parser$result = new java_cup.runtime.Symbol(3/*tipo*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2149,7 +2571,7 @@ class CUP$parser$actions { case 18: // vars ::= NAME SEPARADOR error { String RESULT = null; - parser.report_error("Declaracion de variables: Se esperaba nombre",sym.NAME); + if(!parser.first_time) parser.report_error("Declaracion de variables: Se esperaba nombre",sym.NAME); CUP$parser$result = new java_cup.runtime.Symbol(1/*vars*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2164,8 +2586,12 @@ class CUP$parser$actions { int n2left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; int n2right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; String n2 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; - if ( parser.first_time) parser.ambito.agregarATabla(n1.toLowerCase(),parser.seen_types.get("variant"), parser.getline(sym.SEPARADOR) ); RESULT = -n2.toLowerCase(); + if ( parser.first_time ){ + boolean meter = parser.ambito.agregarATabla(n1.toLowerCase(),parser.seen_types.get("variant") ); + if(!meter ) parser.report_error("Variable <" + n1 + "> ya ha sido declarada en este contexto",sym.ERROR); + + } + RESULT = n2.toLowerCase(); CUP$parser$result = new java_cup.runtime.Symbol(1/*vars*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2186,8 +2612,8 @@ class CUP$parser$actions { case 15: // declaracion ::= error { Object RESULT = null; - parser.report_error("Declaracion de variables: Se esperaba ID",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(7/*declaracion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if(!parser.first_time) parser.report_error("Declaracion de variables: Se esperaba ID",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(9/*declaracion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2201,8 +2627,26 @@ class CUP$parser$actions { int tleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left; int tright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right; Tipo t = (Tipo)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; - if (parser.first_time ) parser.ambito.agregarATabla(n1,t,parser.getline(sym.ERROR) ); - CUP$parser$result = new java_cup.runtime.Symbol(7/*declaracion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if (parser.first_time && !parser.in_method ){boolean meter = parser.ambito.agregarATabla(n1,t ); + if(!meter ) parser.report_error("Variable <" + n1 + "> ya ha sido declarada en este contexto",sym.ERROR); + } + if ( !parser.first_time && !parser.in_method ){ + Tipo tmp = parser.ambito.BuscarEnTabla(n1); + Tipo extra = parser.seen_types.get(tmp.getName()); + if(extra== null ) + { parser.report_error(" No existe tipo " + t.getName() + " en la declaracion de variable " + n1,sym.AS); } + } + if ( !parser.first_time && parser.in_method ){ + if( parser.seen_types.get(t.getName()) == null){ + parser.report_error("No existe el tipo" + t.getName() + " en la declaracion de la variable" + n1, t); + } + else{ + boolean meter = parser.ambito.agregarATabla(n1,t ); + if(!meter ) parser.report_error("Variable <" + n1 + "> ya ha sido declarada en este contexto",sym.ERROR); + } + } + + CUP$parser$result = new java_cup.runtime.Symbol(9/*declaracion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2216,8 +2660,29 @@ class CUP$parser$actions { int tleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left; int tright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right; Tipo t = (Tipo)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value; - if ( parser.first_time) parser.ambito.agregarATabla(n1,t,parser.getline(sym.ERROR) ); - CUP$parser$result = new java_cup.runtime.Symbol(7/*declaracion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + + //meter las variables globales dentro de la tabla + if ( parser.first_time && !parser.in_method ){ boolean meter = parser.ambito.agregarATabla(n1,t ); + if(!meter ) parser.report_error("Variable <" + n1 + "> ya ha sido declarada en este contexto",sym.ERROR); + } + + if ( !parser.first_time && !parser.in_method ){ + Tipo tmp = parser.ambito.BuscarEnTabla(n1); + Tipo extra = parser.seen_types.get(tmp.getName()); + if(extra== null ) + { parser.report_error(" No existe el tipo " + t.getName() + " en la declaracion de variable " + n1,sym.AS); } + } + if ( !parser.first_time && parser.in_method ){ + if( parser.seen_types.get(t.getName()) == null){ + parser.report_error("No existe el tipo" + t.getName() + " en la declaracion de la variable" + n1, t); + } + else{ + boolean meter = parser.ambito.agregarATabla(n1,t ); + if(!meter ) parser.report_error("Variable <" + n1 + "> ya ha sido declarada en este contexto",sym.ERROR); + } + } + + CUP$parser$result = new java_cup.runtime.Symbol(9/*declaracion*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2226,7 +2691,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(8/*declar_var*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(10/*declar_var*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2243,8 +2708,8 @@ class CUP$parser$actions { case 10: // linea ::= error FIN { Object RESULT = null; - parser.report_error(" Se esperaba declaracion de variables, metodos o estructuras",sym.ERROR); - CUP$parser$result = new java_cup.runtime.Symbol(6/*linea*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + if(!parser.first_time) parser.report_error(" Se esperaba declaracion de variables, metodos o estructuras",sym.ERROR); + CUP$parser$result = new java_cup.runtime.Symbol(8/*linea*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2253,7 +2718,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(6/*linea*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(8/*linea*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2262,7 +2727,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(6/*linea*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(8/*linea*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2271,7 +2736,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(6/*linea*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(8/*linea*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2280,7 +2745,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(9/*statements*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(11/*statements*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2289,7 +2754,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(9/*statements*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(11/*statements*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2298,7 +2763,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(5/*programa*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(7/*programa*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2307,7 +2772,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(5/*programa*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(7/*programa*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2316,7 +2781,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(5/*programa*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(7/*programa*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; @@ -2339,7 +2804,7 @@ class CUP$parser$actions { { Object RESULT = null; - CUP$parser$result = new java_cup.runtime.Symbol(5/*programa*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); + CUP$parser$result = new java_cup.runtime.Symbol(7/*programa*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT); } return CUP$parser$result; diff --git a/prueba.cup b/prueba.cup index 9ecc874..f44cf8e 100644 --- a/prueba.cup +++ b/prueba.cup @@ -1,18 +1,21 @@ import java_cup.runtime.*; -import java.util.HashMap; +import java.util.*; parser code {: String errores = ""; Boolean has_main = false; Boolean first_time = true; + Boolean in_method = false; tabla ambito; HashMap seen_types; Tipo tmp_tipo; - + ArrayList params; // = new ArrayList(); + + public int getline(Object info){ if(info instanceof java_cup.runtime.Symbol) { java_cup.runtime.Symbol s=((java_cup.runtime.Symbol)info); - return s.left; + return s.left; } return -1; @@ -48,23 +51,23 @@ parser code {: terminal DO, PARDER, PARIZQ, TO, AS, DIM, SEPARADOR, FIN, REF, SUB, FUNCTION; terminal IGUAL,LOOP,IF,THEN, ELSE, ELSEIF,END,FOR,NEXT,WHILE ,NUM,TRUE,FALSE; -terminal String NAME,OPREL,TIPO; +terminal String NAME,OPREL,TIPO,CADENA; terminal WRITE,WRITELN,INPUT; terminal POR,ENTRE,MAS,MENOS,ERROR; -terminal TYPE,EXIT, PUNTO,CADENA,NOT,SALTOCADENA; -non terminal String vars; -non terminal Tipo tipo; +terminal TYPE,EXIT, PUNTO,NOT,SALTOCADENA; +non terminal String vars,cadena_s; +non terminal Tipo tipo,funcionCall; non terminal Object statement, metodo, programa,linea, declaracion,declar_var, statements, loop_for, do_loop, if_block; -non terminal Object schrodingerArgument,asignacion,if_inner,list_declar,list_expressions, expression,argument, argumentlist, argumentlistHelper,bloque; -non terminal Object variables_declar2,list_declar2,declaracion2,cadena_s,salir_param,variables_declar; -non terminal Object retorno,salir_if,nombre,end_func,end_type,regresar,dectype,paramHelper,parametros,termino,factor,funcionCall,end_sub; -non terminal Object rango,salir_loop,escribe,lee,subfunc ,funcion; +non terminal Object schrodingerArgument,asignacion,if_inner,list_declar,list_expressions,argument, argumentlist, argumentlistHelper,bloque; +non terminal Object variables_declar2,list_declar2,declaracion2,salir_param,variables_declar; +non terminal Object retorno,salir_if,end_func,end_type,regresar,dectype,paramHelper,parametros,end_sub; +non terminal Object rango,salir_loop,subfunc ,funcion; +non terminal Object fake_f,fake_s,fake_while,fake_if; +non terminal Objeto lee, escribe, termino, factor, expression, nombre; -// COSAS QUE FALTAN AHORITA -// manejo de errores programa ::= FIN statements | statements | FIN |; @@ -74,9 +77,9 @@ statements ::= linea statements linea ::= declar_var FIN - |metodo - |dectype - | error FIN {: parser.report_error(" Se esperaba declaracion de variables, metodos o estructuras",sym.ERROR); :}; + | metodo + | dectype + | error FIN {: if(!parser.first_time) parser.report_error(" Se esperaba declaracion de variables, metodos o estructuras",sym.ERROR); :}; variables_declar ::= declar_var FIN; @@ -87,56 +90,157 @@ variables_declar ::= declar_var FIN; declar_var ::= DIM declaracion; declaracion ::= vars:n1 AS tipo:t SEPARADOR declaracion - {: if ( parser.first_time) parser.ambito.agregarATabla(n1,t,parser.getline(sym.ERROR) ); :} + {: + //meter las variables globales dentro de la tabla + if ( parser.first_time && !parser.in_method ){ boolean meter = parser.ambito.agregarATabla(n1,t ); + if(!meter ) parser.report_error("Variable <" + n1 + "> ya ha sido declarada en este contexto",sym.ERROR); + } + + if ( !parser.first_time && !parser.in_method ){ + Tipo tmp = parser.ambito.BuscarEnTabla(n1); + Tipo extra = parser.seen_types.get(tmp.getName()); + if(extra== null ) + { parser.report_error(" No existe el tipo " + t.getName() + " en la declaracion de variable " + n1,sym.AS); } + } + if ( !parser.first_time && parser.in_method ){ + if( parser.seen_types.get(t.getName()) == null){ + parser.report_error("No existe el tipo" + t.getName() + " en la declaracion de la variable" + n1, t); + } + else{ + boolean meter = parser.ambito.agregarATabla(n1,t ); + if(!meter ) parser.report_error("Variable <" + n1 + "> ya ha sido declarada en este contexto",sym.ERROR); + } + } + :} | vars:n1 AS tipo:t - {: if (parser.first_time ) parser.ambito.agregarATabla(n1,t,parser.getline(sym.ERROR) ); :} - | error {: parser.report_error("Declaracion de variables: Se esperaba ID",sym.ERROR); :} ; + {: if (parser.first_time && !parser.in_method ){boolean meter = parser.ambito.agregarATabla(n1,t ); + if(!meter ) parser.report_error("Variable <" + n1 + "> ya ha sido declarada en este contexto",sym.ERROR); + } + if ( !parser.first_time && !parser.in_method ){ + Tipo tmp = parser.ambito.BuscarEnTabla(n1); + Tipo extra = parser.seen_types.get(tmp.getName()); + if(extra== null ) + { parser.report_error(" No existe tipo " + t.getName() + " en la declaracion de variable " + n1,sym.AS); } + } + if ( !parser.first_time && parser.in_method ){ + if( parser.seen_types.get(t.getName()) == null){ + parser.report_error("No existe el tipo" + t.getName() + " en la declaracion de la variable" + n1, t); + } + else{ + boolean meter = parser.ambito.agregarATabla(n1,t ); + if(!meter ) parser.report_error("Variable <" + n1 + "> ya ha sido declarada en este contexto",sym.ERROR); + } + } + :} + + + | error {: if(!parser.first_time) parser.report_error("Declaracion de variables: Se esperaba ID",sym.ERROR); :} ; + + + vars ::= NAME:n1 {: RESULT = n1.toLowerCase() ; :} - | NAME:n1 SEPARADOR vars:n2 - {: if ( parser.first_time) parser.ambito.agregarATabla(n1.toLowerCase(),parser.seen_types.get("variant"), parser.getline(sym.SEPARADOR) ); RESULT = -n2.toLowerCase();:} - | NAME SEPARADOR error {: parser.report_error("Declaracion de variables: Se esperaba nombre",sym.NAME); :}; - -tipo ::= TIPO:n1 {: Tipo x = parser.seen_types.get(n1.toLowerCase()); - RESULT = x; :} - | NAME:n1 {: Tipo x = parser.seen_types.get(n1.toLowerCase()); - RESULT = x; :}; + | NAME:n1 SEPARADOR vars:n2 + {: if ( parser.first_time ){ + boolean meter = parser.ambito.agregarATabla(n1.toLowerCase(),parser.seen_types.get("variant") ); + if(!meter ) parser.report_error("Variable <" + n1 + "> ya ha sido declarada en este contexto",sym.ERROR); + + } + RESULT = n2.toLowerCase(); :} + | NAME SEPARADOR error {: if(!parser.first_time) parser.report_error("Declaracion de variables: Se esperaba nombre",sym.NAME); :}; + + + +tipo ::= TIPO:n1 {: + Tipo x = parser.seen_types.get(n1.toLowerCase()); + RESULT = x; + :} + + | NAME:n1 {: + Tipo x = parser.seen_types.get(n1.toLowerCase()); + if( x ==null) + { + x = new Tipo(n1.toLowerCase()); + } + RESULT = x; :}; /*--------------------------------*/ /*---Declaracion de metodos-------*/ metodo ::= subfunc | funcion; -subfunc ::= SUB NAME:n1 argumentlist FIN end_sub FIN {: if (n1.toLowerCase().equals("main")) parser.has_main = true; :}; - -funcion ::= FUNCTION NAME argumentlist retorno FIN error FIN {: parser.report_error("oh wel",sym.ERROR); :} - | FUNCTION NAME argumentlist retorno FIN end_func FIN - | FUNCTION error FIN {: parser.report_error("Se esperaba nombre de funcion",sym.ERROR); :} - | FUNCTION NAME error PARIZQ retorno FIN end_func FIN {: parser.report_error("error de parametros",sym.ERROR); :} - | FUNCTION NAME error FIN end_func FIN {: parser.report_error("error de parametros",sym.ERROR); :} - | FUNCTION NAME error {: parser.report_error("Error en firma de funcion",sym.ERROR); :}; - - - -retorno ::= AS tipo - | error {: parser.report_error(" No existe tipo de retorno de funcion, se esperaba: As ",sym.AS); :}; +subfunc ::= SUB fake_s argumentlist FIN end_sub FIN {: parser.ambito = parser.ambito.parent; :}; + + +funcion ::= FUNCTION fake_f argumentlist retorno FIN end_func FIN {: parser.ambito = parser.ambito.parent; :} + |FUNCTION fake_f argumentlist retorno FIN error FIN {: if (!parser.first_time) parser.report_error("oh well",sym.ERROR); parser.ambito = parser.ambito.parent;:} + | FUNCTION error FIN {: if (!parser.first_time) parser.report_error("Se esperaba nombre de funcion",sym.ERROR); :} + | FUNCTION fake_f error PARIZQ retorno FIN end_func FIN {: if (!parser.first_time) parser.report_error("error de parametros",sym.ERROR); parser.ambito = parser.ambito.parent;:} + | FUNCTION fake_f error FIN end_func FIN {: if (!parser.first_time) parser.report_error("error de parametros",sym.ERROR); parser.ambito = parser.ambito.parent; :} + | FUNCTION fake_f error {: if (!parser.first_time) parser.report_error("Error en firma de funcion",sym.ERROR); parser.ambito = parser.ambito.parent; :}; + + +fake_f ::= NAME:n1 {: if(parser.first_time){ + tabla nuevo_ambito = new tabla(parser.ambito,n1); parser.ambito.hijos.add(nuevo_ambito); + parser.ambito = nuevo_ambito; + parser.tmp_tipo = new Tipo(n1); + parser.tmp_tipo.setTipoFinal(1); + } + else{ + + for(tabla t:parser.ambito.hijos) + { + if( t.ambito.equals(n1)) + { parser.ambito = t; + break;} + } + } + :}; + +fake_s ::= NAME:n1 {: + if(parser.first_time){ + tabla nuevo_ambito = new tabla(parser.ambito,n1); + parser.ambito.hijos.add(nuevo_ambito); + parser.ambito = nuevo_ambito; + parser.tmp_tipo = new Tipo(n1); + parser.tmp_tipo.setTipoFinal(2); + if (n1.toLowerCase().equals("main")) parser.has_main = true; + } + else{ + for(tabla t:parser.ambito.hijos) + { + if( t.ambito.equals(n1)) + { parser.ambito = t; + break;} + } + } + + + :}; + +retorno ::= AS TIPO:t1 {: + if(parser.first_time){parser.tmp_tipo.metodo_var.add(parser.seen_types.get(t1)); + parser.seen_types.put( parser.tmp_tipo.getName(), parser.tmp_tipo); + } + :} + | error {: if (!parser.first_time) parser.report_error(" No existe tipo de retorno de funcion, se esperaba: As ",sym.AS); :} + | AS error {: if (!parser.first_time) parser.report_error(" Tipo de retorno invalido de funcion, se esperaba: As ",sym.AS); :}; end_sub ::= bloque END SUB | END SUB - | END error {: parser.report_error(" Se esperaba End Sub",sym.ERROR); :} ; + | END error {: if (!parser.first_time) parser.report_error(" Se esperaba End Sub",sym.ERROR); :} ; end_func ::= bloque END FUNCTION | END FUNCTION - | bloque END error {: parser.report_error(" Se esperaba End Function", sym.ERROR); :} ; + | bloque END error {: if (!parser.first_time) parser.report_error(" Se esperaba End Function", sym.ERROR); :} ; end_type ::= END TYPE - | END error {: parser.report_error("Se esperaba End Type",sym.ERROR); :}; + | END error {: if (!parser.first_time) parser.report_error("Se esperaba End Type",sym.ERROR); :}; regresar ::= EXIT SUB FIN | EXIT FUNCTION FIN - | EXIT error {: parser.report_error(" Salida de metodos: se esperaba Exit Sub o Exit Function",sym.ERROR); :}; + | EXIT error {: if (!parser.first_time) parser.report_error(" Salida de metodos: se esperaba Exit Sub o Exit Function",sym.ERROR); :}; /*--------------------------------*/ @@ -158,144 +262,328 @@ list_expressions ::= statement list_expressions | statement ; statement ::= if_block | loop_for | do_loop | asignacion |funcionCall FIN | escribe | lee - | NAME error {: parser.report_error(" Expresion no se esperaba.",sym.ERROR); :} ; + | NAME error {: if (!parser.first_time) parser.report_error(" Expresion no se esperaba.",sym.ERROR); :} ; escribe ::= WRITE cadena_s FIN | WRITE nombre FIN - | WRITE error {: parser.report_error("Se esperaba cadena o variable",sym.WRITE);:} + | WRITE error {: if (!parser.first_time) parser.report_error("Se esperaba cadena o variable",sym.WRITE);:} | WRITELN nombre FIN | WRITELN cadena_s FIN - | WRITELN error {: parser.report_error("Se esperaba cadena o variable",sym.WRITELN); :}; + | WRITELN error {: if (!parser.first_time) parser.report_error("Se esperaba cadena o variable",sym.WRITELN); :}; lee ::= INPUT nombre FIN - | INPUT error {: parser.report_error(" Se esperaba variable",sym.ERROR); :} ; + | INPUT error {: if (!parser.first_time) parser.report_error(" Se esperaba variable",sym.ERROR); :} ; -asignacion ::= nombre IGUAL expression FIN - | nombre IGUAL error FIN {: parser.report_error("No se puede asignar valor, error en expresion ",sym.ERROR); :}; +asignacion ::= nombre:n IGUAL expression:e FIN {: -nombre ::= NAME - | NAME PUNTO NAME - | NAME PUNTO error {: parser.report_error(" Error de en asignacion ",sym.ERROR); :}; - - -expression ::= expression MAS termino - | expression MENOS termino - | termino - | expression IGUAL termino; - - -termino ::= factor POR termino - | factor ENTRE termino - | factor OPREL termino - | factor; + if(!parser.first_time) + if(!n.t.getName().equals(e.t.getName())){ + System.out.println(e.SizeChain); + if(!( n.t.getName().equals("char") && e.t.getName().equals("string") && e.SizeChain <= 1)) + parser.report_error("No se puede asignar " + e.t.getName() + " a variable de tipo " + n.t.getName(),e); + } + + :} + | nombre IGUAL error FIN {: if (!parser.first_time) parser.report_error("No se puede asignar valor, error en expresion ",sym.ERROR); :}; + +nombre ::= NAME:n1 {: + if(!parser.first_time){ + Tipo tmp = parser.ambito.BuscarEnTabla(n1); + if( tmp.getName().equals("error")) + parser.report_error("Variable " + n1 + " no fue declarada" , n1); + RESULT = new Objeto(tmp); + } + :} + | NAME:n1 PUNTO NAME:n2 {: + if(!parser.first_time){ + Tipo tmp = parser.ambito.BuscarEnTabla(n1); + System.out.println("llega"); + if( tmp.getName().equals("error")){ + System.out.println(parser.ambito.toString()); + parser.report_error("Variable " + n1 + " no fue declarada/con punto" , n1); + } + else{ + tmp = parser.seen_types.get(tmp.getName()).atributos.get(n2); + if( tmp == null){ + parser.report_error(n1 + " no cuenta con atributo " + n2,n2); + RESULT = new Objeto(parser.seen_types.get("error")); + } + else{ + System.out.println(n1 + "." + n2 + ":" + tmp.toString()); + RESULT = new Objeto(tmp); + } + } + + } + :} + | NAME PUNTO error {: if (!parser.first_time) parser.report_error(" Error de en asignacion ",sym.ERROR); :}; + + +expression ::= expression:e MAS termino:t + {: + if(!parser.first_time){ + if(e.t.getName().equals(t.t.getName()) && e.t.getName().equals("integer")){ + RESULT = new Objeto(parser.seen_types.get("integer")); + } + else{ + + parser.report_error(" No se puede sumar " + e.t.getName() + " con " + t.t.getName(),t); + RESULT = new Objeto(parser.seen_types.get("integer")); + } + } + :} + + + | expression:e MENOS termino:t + {: + if(!parser.first_time){ + if(e.t.getName().equals(t.t.getName()) && e.t.getName().equals("integer")){ + RESULT = new Objeto(parser.seen_types.get("integer")); + } + else{ + + parser.report_error(" No se puede restar " + e.t.getName() + " con " + t.t.getName(),t); + RESULT = new Objeto(parser.seen_types.get("integer")); + } + } + :} + | termino:t {: RESULT = t; :} + | expression:e IGUAL termino:t {: RESULT = new Objeto(parser.seen_types.get("boolean"));:}; + + +termino ::= factor:f POR termino:t + {: + if(!parser.first_time){ + if(f.t.getName().equals(t.t.getName()) && f.t.getName().equals("integer")){ + RESULT = new Objeto(parser.seen_types.get("integer")); + } + else{ + + parser.report_error(" No se puede multiplicar " + f.t.getName() + " con " + t.t.getName(),t); + RESULT = new Objeto(parser.seen_types.get("integer")); + } + } + :} + + + | factor:f ENTRE termino:t + {: + if(!parser.first_time){ + if(f.t.getName().equals(t.t.getName()) && f.t.getName().equals("integer")){ + RESULT = new Objeto(parser.seen_types.get("integer")); + } + else{ + + parser.report_error(" No se puede dividir " + f.t.getName() + " con " + t.t.getName(),t); + RESULT = new Objeto(parser.seen_types.get("integer")); + } + } + :} + + | factor:f OPREL termino:t + {: + if(!parser.first_time){ + if(f.t.getName().equals(t.t.getName()) && f.t.getName().equals("integer")){ + RESULT = new Objeto(parser.seen_types.get("boolean")); + } + else{ + + parser.report_error(" No se puede comparar " + f.t.getName() + " con " + t.t.getName(),t); + RESULT = new Objeto(parser.seen_types.get("boolean")); + } + } + :} + | factor:f {: RESULT = f; :}; -factor ::= PARDER expression PARIZQ - | NOT factor - | NUM - | NAME - | NAME PUNTO NAME - | TRUE - | FALSE - | cadena_s - | funcionCall; - -cadena_s ::= CADENA SALTOCADENA FIN cadena_s - |CADENA - |CADENA SALTOCADENA error {: parser.report_error("Se esperaba nueva cadena",sym.ERROR); :}; +factor ::= PARDER expression:e PARIZQ {: RESULT = e; :} + | NOT factor:f1 {: + if(!parser.first_time){ + if(!f1.t.getName().equals("boolean")) + parser.report_error("Tipo no booleano en expresion",f1); + } + :} + + | NUM {: RESULT = new Objeto(parser.seen_types.get("integer")); :} + | nombre:n {: RESULT = n; :} + | TRUE {: RESULT= new Objeto(parser.seen_types.get("boolean")); :} + | FALSE {: RESULT= new Objeto(parser.seen_types.get("boolean")); :} + | cadena_s:s {: Objeto t = new Objeto(parser.seen_types.get("string")); + String fin = ""; + for(char c:s.toCharArray()){ + if( c != '"') + fin += c; + } + t.SizeChain= fin.length(); + RESULT = t;:} + | funcionCall:f {: RESULT = new Objeto(f); :}; + +cadena_s ::= CADENA:c SALTOCADENA FIN cadena_s:sig {: RESULT = c + sig; :} + |CADENA:c {: + RESULT = c; :} + |CADENA SALTOCADENA error {: if (!parser.first_time) parser.report_error("Se esperaba nueva cadena",sym.ERROR); :}; -funcionCall ::= NAME PARDER parametros ; +funcionCall ::= NAME:n1 PARDER {: if(!parser.first_time) parser.params = new ArrayList();:} parametros {: + if(!parser.first_time){ + for( Tipo t :parser.params) + System.out.println(t); + + boolean valido = true; + Tipo tmp = parser.seen_types.get(n1); + if(tmp == null){ + parser.report_error(" No existe metodo con nombre " + n1 ,sym.ERROR); + RESULT = parser.seen_types.get("error"); + } + else{ + if (tmp.metodo_var.size() -1 != parser.params.size()){ + parser.report_error(" Error de argumentos,se esperaban: " + (tmp.metodo_var.size() -1) + " recibidos:" + parser.params.size(),sym.PARDER); + } + else{ + for( int i = 0; i < parser.params.size();i++){ + if(!parser.params.get(i).getName().equals(tmp.metodo_var.get(i).getName())){ + parser.report_error(" Error de argumento " + i + " se esperaba " + tmp.metodo_var.get(i).getName() + " recibio " + parser.params.get(i),sym.PARDER); + } + } + } + + RESULT = tmp.metodo_var.get( tmp.metodo_var.size()-1); + } + } + :} ; -parametros ::= expression paramHelper +parametros ::= expression:e {: if(!parser.first_time)parser.params.add(e.t); + :} paramHelper | salir_param; -paramHelper ::= SEPARADOR expression paramHelper +paramHelper ::= SEPARADOR expression:e {:if(!parser.first_time)parser.params.add(e.t); :} paramHelper | salir_param; -salir_param ::= PARIZQ; // | error {: parser.report_error("Se esperaba )",sym.ERROR); :}; +salir_param ::= PARIZQ; // | error {: if (!parser.first_time) parser.report_error("Se esperaba )",sym.ERROR); :}; /*---Declaracion de argumentos ---*/ + + + argumentlist ::= PARDER schrodingerArgument; schrodingerArgument ::= argument argumentlistHelper | PARIZQ - | error {: parser.report_error("error de argumentos",sym.ERROR); :}; + | error {: if (!parser.first_time) parser.report_error("error de argumentos",sym.ERROR); :}; argumentlistHelper ::= SEPARADOR argument argumentlistHelper | PARIZQ - |error PARIZQ {: parser.report_error("error de argumentos",sym.ERROR); :}; -argument ::= REF NAME:n1 AS tipo - | REF NAME AS error {: parser.report_error(" error en argumento, se esperaba un tipo de dato",sym.ERROR); :} - | REF NAME error {: parser.report_error(" error en argumento, se esperaba As ",sym.ERROR); :} + |error PARIZQ {: if (!parser.first_time) parser.report_error("error de argumentos",sym.ERROR); :}; + +argument ::= REF NAME:n1 AS tipo:t {: + if(parser.first_time){ + parser.ambito.agregarATabla(n1,t); + parser.tmp_tipo.metodo_var.add(t); + } + :} + | REF NAME AS error {: if (!parser.first_time) parser.report_error(" error en argumento, se esperaba un tipo de dato",sym.ERROR); :} + | REF NAME error {: if (!parser.first_time) parser.report_error(" error en argumento, se esperaba As ",sym.ERROR); :} - | REF error AS tipo {: parser.report_error(" error en argumento, no existe nombre de argumento",sym.NAME); :} - | error NAME AS tipo{: parser.report_error("error en argumento, no existe tipo de referencia",sym.ERROR); :}; -/*---------------------------------*/ + | REF error AS tipo {: if (!parser.first_time) parser.report_error(" error en argumento, no existe nombre de argumento",sym.NAME); :} + | error NAME AS tipo{: if (!parser.first_time) parser.report_error("error en argumento, no existe tipo de referencia",sym.ERROR); :}; + + /*---if-----*/ //Ya revisado, bexpression es lo que hay que ver -if_block ::= IF expression THEN FIN bloque if_inner - |IF expression FIN bloque if_inner - |IF expression THEN FIN if_inner - |IF expression FIN if_inner - |IF error FIN if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} - |IF error THEN FIN if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} - |IF error FIN bloque if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} - |IF error THEN FIN bloque if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :}; +if_block ::= IF fake_if THEN FIN bloque if_inner + |IF fake_if FIN bloque if_inner + |IF fake_if THEN FIN if_inner + |IF fake_if FIN if_inner + |IF error FIN if_inner {: if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + |IF error THEN FIN if_inner {: if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + |IF error FIN bloque if_inner {: if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + |IF error THEN FIN bloque if_inner {: if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); :}; if_inner ::= salir_if FIN | ELSE FIN bloque salir_if FIN | ELSE FIN salir_if FIN - | ELSE error {: parser.report_error("Error en expresion Else",sym.ERROR); :} - | ELSEIF expression FIN bloque if_inner - | ELSEIF expression THEN FIN bloque if_inner - | ELSEIF expression FIN if_inner - | ELSEIF expression THEN FIN if_inner - | ELSEIF error FIN if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} - | ELSEIF error THEN FIN if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} - | ELSEIF error FIN bloque if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} - | ELSEIF error THEN FIN bloque if_inner {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} - | ELSE FIN error salir_if FIN {: parser.report_error("Sentencia inesperada despues del Else",sym.ERROR); :} - | error salir_if{: parser.report_error("Error del bloque if, sentencia no esperada",sym.ERROR); :}; + | ELSE error {: if (!parser.first_time) parser.report_error("Error en expresion Else",sym.ERROR); :} + | ELSEIF fake_if FIN bloque if_inner + | ELSEIF fake_if THEN FIN bloque if_inner + | ELSEIF fake_if FIN if_inner + | ELSEIF fake_if THEN FIN if_inner + | ELSEIF error FIN if_inner {: if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + | ELSEIF error THEN FIN if_inner {: if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + | ELSEIF error FIN bloque if_inner {: if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + | ELSEIF error THEN FIN bloque if_inner {: if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + | ELSE FIN error salir_if FIN {: if (!parser.first_time) parser.report_error("Sentencia inesperada despues del Else",sym.ERROR); :} + | error salir_if{: if (!parser.first_time) parser.report_error("Error del bloque if, sentencia no esperada",sym.ERROR); :}; salir_if ::= END IF - | END error {:parser.report_error("Se esperaba End If",sym.ERROR); :}; + | END error {:if (!parser.first_time) parser.report_error("Se esperaba End If",sym.ERROR); :}; /*--- do y for --*/ -do_loop ::= DO WHILE expression FIN bloque salir_loop - | DO WHILE expression FIN salir_loop - | DO error expression FIN bloque salir_loop {: parser.report_error("Se esperaba While ",sym.ERROR); :} - | DO error expression FIN salir_loop {: parser.report_error("Se esperaba While ",sym.ERROR); :} - | DO WHILE error FIN salir_loop {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} - | DO WHILE error FIN bloque salir_loop {: parser.report_error("Se esperaba expresion booleana",sym.ERROR); :}; + + +fake_while ::= expression:e {: + if(!parser.first_time){ + if(!e.t.getName().equals("boolean")){ + parser.report_error("Se esperaba expression booleana dentro de ciclo while",e); + } + } + + :}; + +fake_if ::= expression:e {: + if(!parser.first_time){ + if(!e.t.getName().equals("boolean")){ + parser.report_error("Se esperaba expression booleana dentro del If",e); + } + } + + :}; + + + +do_loop ::= DO WHILE fake_while FIN bloque salir_loop + | DO WHILE fake_while FIN salir_loop + + | DO error fake_while FIN bloque salir_loop {: if (!parser.first_time) parser.report_error("Se esperaba While ",sym.ERROR); :} + | DO error fake_while FIN salir_loop {: if (!parser.first_time) parser.report_error("Se esperaba While ",sym.ERROR); :} + | DO WHILE error FIN salir_loop {: if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); :} + | DO WHILE error FIN bloque salir_loop {: if (!parser.first_time) parser.report_error("Se esperaba expresion booleana",sym.ERROR); :}; salir_loop ::= LOOP FIN - |error {: parser.report_error("se esperaba salida de while",sym.ERROR); :}; + |error {: if (!parser.first_time) parser.report_error("se esperaba salida de while",sym.ERROR); :}; loop_for ::= FOR rango FIN bloque NEXT FIN | FOR rango FIN NEXT FIN - | FOR error FIN NEXT FIN {: parser.report_error("Error en rango",sym.ERROR); :} - | FOR error FIN bloque NEXT FIN {: parser.report_error("Error en rango",sym.ERROR); :} - | FOR rango FIN error {: parser.report_error("Se esperaba un Next",sym.NEXT); :} - | FOR rango FIN bloque error {: parser.report_error("Se esperaba un Next",sym.NEXT); :}; + | FOR error FIN NEXT FIN {: if (!parser.first_time) parser.report_error("Error en rango",sym.ERROR); :} + | FOR error FIN bloque NEXT FIN {: if (!parser.first_time) parser.report_error("Error en rango",sym.ERROR); :} + | FOR rango FIN error {: if (!parser.first_time) parser.report_error("Se esperaba un Next",sym.NEXT); :} + | FOR rango FIN bloque error {: if (!parser.first_time) parser.report_error("Se esperaba un Next",sym.NEXT); :}; -rango ::= NAME IGUAL expression TO expression - | NAME IGUAL TO error {: parser.report_error("Error de rangos, no existe valor inicial",sym.ERROR); :} - | NAME IGUAL error TO {: parser.report_error("Error de rangos, valor inicial y final",sym.ERROR); :} - | NAME IGUAL error {: parser.report_error("Error de rangos/asignacion",sym.ERROR); :} - | NAME IGUAL error TO error {: parser.report_error("Error de rangos",sym.ERROR); :} - | NAME IGUAL expression TO error {: parser.report_error("Se esperaba valor de final",sym.ERROR); :} - | NAME IGUAL error TO expression {: parser.report_error("Se esperaba valor de inicio",sym.ERROR); :} +rango ::= NAME IGUAL expression:t1 TO expression:t2 + {: + if(!parser.first_time){ + if( !t1.t.getName().equals("integer")) + parser.report_error("Rango no numerico en expression inicial",t1); + if( !t2.t.getName().equals("integer")) + parser.report_error("Rango no numerico en expression inicial",t2); + } + + :} + | NAME IGUAL TO error {: if (!parser.first_time) parser.report_error("Error de rangos, no existe valor inicial",sym.ERROR); :} + | NAME IGUAL error TO {: if (!parser.first_time) parser.report_error("Error de rangos, valor inicial y final",sym.ERROR); :} + | NAME IGUAL error {: if (!parser.first_time) parser.report_error("Error de rangos/asignacion",sym.ERROR); :} + | NAME IGUAL error TO error {: if (!parser.first_time) parser.report_error("Error de rangos",sym.ERROR); :} + | NAME IGUAL expression TO error {: if (!parser.first_time) parser.report_error("Se esperaba valor de final",sym.ERROR); :} + | NAME IGUAL error TO expression {: if (!parser.first_time) parser.report_error("Se esperaba valor de inicio",sym.ERROR); :} ; @@ -303,9 +591,10 @@ rango ::= NAME IGUAL expression TO expression -dectype ::= TYPE NAME:n1 FIN {: parser.tmp_tipo = new Tipo(n1); :} list_declar2 end_type FIN {: parser.seen_types.put(n1,parser.tmp_tipo); - :} - | TYPE NAME error end_type FIN {: parser.report_error(" estructura no puede estar vacia",sym.ERROR); :} ; +dectype ::= TYPE NAME:n1 FIN {: if(parser.first_time) {parser.tmp_tipo = new Tipo(n1); parser.tmp_tipo.setTipoFinal(3);} :} list_declar2 end_type FIN + {: if(parser.first_time) {parser.seen_types.put(n1,parser.tmp_tipo); + } :} + | TYPE NAME error end_type FIN {: if(!parser.first_time) parser.report_error(" estructura no puede estar vacia",sym.ERROR); :} ; list_declar2 ::= variables_declar2 list_declar2 @@ -313,8 +602,16 @@ list_declar2 ::= variables_declar2 list_declar2 variables_declar2 ::= declaracion2 FIN; -declaracion2 ::= DIM NAME:n1 AS tipo:t1 {: parser.tmp_tipo.agregar_atributos(n1,t1); :} - | NAME:n1 AS tipo:t1 {: parser.tmp_tipo.agregar_atributos(n1,t1); :} - | error {: parser.report_error("Se esperaba As ",sym.ERROR); :}; +declaracion2 ::= DIM NAME:n1 AS tipo:t1 {: if(parser.first_time){ + boolean meter = parser.tmp_tipo.agregar_atributos(n1,t1); + if(!meter) parser.report_error("No se puede agregar atributo de nombre " + n1 + " ya existe en este contexto",n1); + } :} + | NAME:n1 AS tipo:t1 {: if( parser.first_time) { + boolean meter =parser.tmp_tipo.agregar_atributos(n1,t1); + if(!meter) parser.report_error("No se puede agregar atributo de nombre " + n1 + " ya existe en este contexto",n1); + + } + :} + | error {: if(!parser.first_time) parser.report_error("Se esperaba As ",sym.ERROR); :}; diff --git a/prueba.java b/prueba.java index c0f9736..bdb9929 100644 --- a/prueba.java +++ b/prueba.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 4/22/12 10:51 PM */ +/* The following code was generated by JFlex 1.4.3 on 5/4/12 2:05 AM */ import java_cup.runtime.*; @@ -6,7 +6,7 @@ /** * This class is a scanner generated by * JFlex 1.4.3 - * on 4/22/12 10:51 PM from the specification file + * on 5/4/12 2:05 AM from the specification file * prueba.flex */ class prueba implements java_cup.runtime.Scanner { diff --git a/prueba.java~ b/prueba.java~ index 5edb3eb..8c0377c 100644 --- a/prueba.java~ +++ b/prueba.java~ @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 4/22/12 10:50 PM */ +/* The following code was generated by JFlex 1.4.3 on 5/4/12 2:03 AM */ import java_cup.runtime.*; @@ -6,7 +6,7 @@ import java_cup.runtime.*; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 4/22/12 10:50 PM from the specification file + * on 5/4/12 2:03 AM from the specification file * prueba.flex */ class prueba implements java_cup.runtime.Scanner { diff --git a/sym.java b/sym.java index aa198a7..421e9f9 100644 --- a/sym.java +++ b/sym.java @@ -1,7 +1,7 @@ //---------------------------------------------------- // The following code was generated by CUP v0.10k -// Sun Apr 22 22:51:20 CST 2012 +// Fri May 04 02:05:39 CST 2012 //---------------------------------------------------- /** CUP generated class containing symbol constants. */ @@ -9,36 +9,36 @@ public class sym { /* terminals */ public static final int FUNCTION = 12; public static final int TIPO = 28; - public static final int POR = 32; - public static final int INPUT = 31; + public static final int POR = 33; + public static final int INPUT = 32; public static final int SEPARADOR = 8; public static final int FIN = 9; public static final int FOR = 20; public static final int REF = 10; - public static final int WRITE = 29; + public static final int WRITE = 30; public static final int NOT = 41; public static final int ELSEIF = 18; public static final int IGUAL = 13; - public static final int TYPE = 37; + public static final int TYPE = 38; public static final int OPREL = 27; public static final int NUM = 23; - public static final int EXIT = 38; + public static final int EXIT = 39; public static final int NEXT = 21; public static final int LOOP = 14; public static final int IF = 15; - public static final int WRITELN = 30; + public static final int WRITELN = 31; public static final int SALTOCADENA = 42; public static final int DIM = 7; public static final int EOF = 0; public static final int PARIZQ = 4; public static final int TRUE = 24; public static final int error = 1; - public static final int CADENA = 40; - public static final int MENOS = 35; - public static final int ERROR = 36; + public static final int CADENA = 29; + public static final int MENOS = 36; + public static final int ERROR = 37; public static final int NAME = 26; public static final int ELSE = 17; - public static final int PUNTO = 39; + public static final int PUNTO = 40; public static final int TO = 5; public static final int WHILE = 22; public static final int THEN = 16; @@ -46,9 +46,9 @@ public class sym { public static final int FALSE = 25; public static final int AS = 6; public static final int PARDER = 3; - public static final int ENTRE = 33; + public static final int ENTRE = 34; public static final int SUB = 11; public static final int DO = 2; - public static final int MAS = 34; + public static final int MAS = 35; } diff --git a/tabla.java b/tabla.java index 47e19f6..3b55d1c 100644 --- a/tabla.java +++ b/tabla.java @@ -4,6 +4,7 @@ class tabla{ tabla parent; String ambito; ArrayList filas = new ArrayList(); + ArrayList hijos = new ArrayList(); public tabla(tabla padre,String ambi){ this.parent = padre; @@ -11,9 +12,54 @@ public tabla(tabla padre,String ambi){ } - public void agregarATabla(String id,Tipo t,int line){ - filas.add(new Registro(id,t,line) ); + public boolean agregarATabla(String id,Tipo t){ + boolean meter = true; + for(Registro r:filas) + if (r.id.equals(id)) + meter = false; + + if(meter) + filas.add(new Registro(id,t) ); + + return meter; } + + public Tipo BuscarEnTabla(String id){ + tabla tmp; + tmp = this; + + while(true){ + for(Registro r:tmp.filas){ + if(r.id.equals(id)) + { + return r.type; + } + } + if ( tmp.parent == null) + break; + tmp = tmp.parent; + } + + return new Tipo("error"); + } + + public Tipo BuscarEnAmbito(String id){ + for(Registro r:filas){ + if(r.id.equals(id)) + { + return r.type; + } + } + return new Tipo("error"); + } + + public String toString(){ + String cad = ambito + "\n"; + for(Registro r:filas) + cad += r.toString() + "\n"; + return cad; + + } } diff --git a/tmp.txt b/tmp.txt index dd9de0d..2849d2b 100644 --- a/tmp.txt +++ b/tmp.txt @@ -1,14 +1,37 @@ Dim a as integer Dim b as boolean Dim c,d,e as Boolean +Dim f as empleado -Sub main() + +function fx (Byval a as integer,ByRef c as boolean) as integer + +end function + +Sub main() + Dim a as boolean + Dim c, b as string + Dim g as char + Dim x as string + g = "h" + b = fx(3,true) End sub + Type prueba - Dim x as integer esto as boolean end type +Dim y as prueba + +Type sup + aquello as boolean +end type + + +Type empleado + dim h as integer +end type + End Sub