Exemplo n.º 1
0
 public GeneradorCodigo(Programa ast, String origen, String nombrePrograma)
 {
     this.ast = ast;
     this.nombreCodigoFuente = origen;
     this.nombrePrograma = nombrePrograma;
 }
Exemplo n.º 2
0
 public AnalizadorSemantico(Programa program)
 {
     this.program = program;
 }
Exemplo n.º 3
0
        /** Method with the actual generated action code. */
        public TUVienna.CS_CUP.Runtime.Symbol CUP_TinyParser_do_action(
    int                        CUP_TinyParser_act_num,
    TUVienna.CS_CUP.Runtime.lr_parser CUP_TinyParser_parser,
    System.Collections.Stack            xstack1,
    int                        CUP_TinyParser_top)
        {
            /* Symbol object for return from actions */
              mStack CUP_TinyParser_stack =new mStack(xstack1);
              TUVienna.CS_CUP.Runtime.Symbol CUP_TinyParser_result;

              /* select the action based on the action number */
              switch (CUP_TinyParser_act_num)
            {
              /*. . . . . . . . . . . . . . . . . . . .*/
              case 30: // factor ::= error
            {
              Expresion RESULT = null;

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(13/*factor*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 29: // factor ::= IDENTIFICADOR
            {
              Expresion RESULT = null;
            SimboloAbstracto id = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new Variable(id, id.Linea, id.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(13/*factor*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 28: // factor ::= LIT_ENTERO
            {
              Expresion RESULT = null;
            SimboloAbstracto val = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new NumeroEntero(val, val.Linea, val.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(13/*factor*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 27: // factor ::= PARENT_IZQ exp PARENT_DER
            {
              Expresion RESULT = null;
            Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;

            RESULT = e;

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(13/*factor*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 26: // term ::= factor
            {
              Expresion RESULT = null;
            Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = e;

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(12/*term*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 25: // term ::= term DIVISION factor
            {
              Expresion RESULT = null;
            Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-2)).value;
            SimboloAbstracto d = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;
            Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new Division(e1, e2, d.Linea, d.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(12/*term*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 24: // term ::= term MULTIPLICACION factor
            {
              Expresion RESULT = null;
            Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-2)).value;
            SimboloAbstracto m = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;
            Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new Multiplicacion(e1, e2, m.Linea, m.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(12/*term*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 23: // exp_simple ::= term
            {
              Expresion RESULT = null;
            Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = e;

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(11/*exp_simple*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 22: // exp_simple ::= exp_simple RESTA term
            {
              Expresion RESULT = null;
            Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-2)).value;
            SimboloAbstracto r = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;
            Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new Resta(e1, e2, r.Linea, r.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(11/*exp_simple*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 21: // exp_simple ::= exp_simple SUMA term
            {
              Expresion RESULT = null;
            Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-2)).value;
            SimboloAbstracto s = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;
            Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new Suma(e1, e2, s.Linea, s.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(11/*exp_simple*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 20: // exp ::= exp_simple
            {
              Expresion RESULT = null;
            Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = e;

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(10/*exp*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 19: // exp ::= exp_simple IGUAL exp_simple
            {
              Expresion RESULT = null;
            Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-2)).value;
            SimboloAbstracto i = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;
            Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new Igual(e1, e2, i.Linea, i.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(10/*exp*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 18: // exp ::= exp_simple MENOR exp_simple
            {
              Expresion RESULT = null;
            Expresion e1 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-2)).value;
            SimboloAbstracto m = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;
            Expresion e2 = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new Menor(e1, e2, m.Linea, m.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(10/*exp*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 17: // args ::= args COMA exp
            {
              ListaParametros RESULT = null;
            ListaParametros p = (ListaParametros)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-2)).value;
            Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            p.agregarElemento(e);
            RESULT = p;

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(9/*args*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 16: // args ::= exp
            {
              ListaParametros RESULT = null;
            Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new ListaParametros();
            RESULT.agregarElemento(e);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(9/*args*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 15: // opt_args ::=
            {
              ListaParametros RESULT = null;

            RESULT = new ListaParametros();

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(8/*opt_args*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 14: // opt_args ::= args
            {
              ListaParametros RESULT = null;
            ListaParametros p = (ListaParametros)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = p;

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(8/*opt_args*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 13: // fuction_call ::= IDENTIFICADOR opt_args
            {
              Sentencia RESULT = null;
            SimboloAbstracto id = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;
            ListaParametros p = (ListaParametros)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new LLamadaFuncion(id, p, id.Linea, id.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(7/*fuction_call*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 12: // sent_assign ::= IDENTIFICADOR ASIGNACION exp
            {
              Sentencia RESULT = null;
            SimboloAbstracto id = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-2)).value;
            SimboloAbstracto a = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;
            Expresion e = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new Asignacion(new Variable(id, id.Linea, id.Columna), e, a.Linea, a.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(6/*sent_assign*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 11: // sent_repeat ::= REPITA secuencia_sent HASTA exp
            {
              Sentencia RESULT = null;
            SimboloAbstracto r = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-3)).value;
            ListaSentencia s = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-2)).value;
            Expresion c = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new RepitaHasta(c, s, r.Linea, r.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(5/*sent_repeat*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 10: // sent_if ::= SI exp ENTONCES secuencia_sent SINO secuencia_sent FIN
            {
              Sentencia RESULT = null;
            SimboloAbstracto s = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-6)).value;
            Expresion c = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-5)).value;
            ListaSentencia en = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-3)).value;
            ListaSentencia sn = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;

            RESULT = new Condicional(c, en, sn, s.Linea, s.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(4/*sent_if*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 9: // sent_if ::= SI exp ENTONCES secuencia_sent FIN
            {
              Sentencia RESULT = null;
            SimboloAbstracto s = (SimboloAbstracto)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-4)).value;
            Expresion c = (Expresion)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-3)).value;
            ListaSentencia en = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;

            RESULT = new Condicional(c, en, null, s.Linea, s.Columna);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(4/*sent_if*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 8: // sent ::= error
            {
              Sentencia RESULT = null;

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(3/*sent*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 7: // sent ::= fuction_call
            {
              Sentencia RESULT = null;
            Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;
             RESULT = s;
              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(3/*sent*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 6: // sent ::= sent_assign
            {
              Sentencia RESULT = null;
            Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;
             RESULT = s;
              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(3/*sent*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 5: // sent ::= sent_repeat
            {
              Sentencia RESULT = null;
            Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;
             RESULT = s;
              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(3/*sent*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 4: // sent ::= sent_if
            {
              Sentencia RESULT = null;
            Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;
             RESULT = s;
              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(3/*sent*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 3: // secuencia_sent ::= sent
            {
              ListaSentencia RESULT = null;
            Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new ListaSentencia();
            RESULT.agregarElemento(s);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(2/*secuencia_sent*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 2: // secuencia_sent ::= secuencia_sent PUNTO_Y_COMA sent
            {
              ListaSentencia RESULT = null;
            ListaSentencia sc = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-2)).value;
            Sentencia s = (Sentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            sc.agregarElemento(s);
            RESULT = sc;

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(2/*secuencia_sent*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 1: // programa ::= secuencia_sent
            {
              Programa RESULT = null;
            ListaSentencia sc = (ListaSentencia)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-0)).value;

            RESULT = new Programa(sc, 1, 0);

              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(1/*programa*/, RESULT);
            }
              return CUP_TinyParser_result;

              /*. . . . . . . . . . . . . . . . . . . .*/
              case 0: // $START ::= programa EOF
            {
              object RESULT = null;
            Programa start_val = (Programa)((TUVienna.CS_CUP.Runtime.Symbol) CUP_TinyParser_stack.elementAt(CUP_TinyParser_top-1)).value;
            RESULT = start_val;
              CUP_TinyParser_result = new TUVienna.CS_CUP.Runtime.Symbol(0/*$START*/, RESULT);
            }
              /* ACCEPT */
              CUP_TinyParser_parser.done_parsing();
              return CUP_TinyParser_result;

              /* . . . . . .*/
              default:
            throw new System.Exception(
               "Invalid action number found in internal parse table");

            }
        }