예제 #1
0
 public ClaseReturn(Stack <Nodo> pila)
 {
     pila.Pop(); //estado
     pila.Pop(); //;
     if (pila.Peek().Token.Nombre == "null")
     {
         pila.Pop();
         expresion = null;
     }
     else
     {
         expresion = new Operacion(pila); //expresion
     }
     pila.Pop();                          //estado
     pila.Pop();                          //return
 }
예제 #2
0
 public ClaseWhile(Stack <Nodo> pila)
 {
     pila.Pop();//estado
     if (pila.Peek().Token.Nombre == "null")
     {
         pila.Pop();
         Bloque = null;
     }
     else
     {
         Bloque = pila.Pop();
     }
     pila.Pop();                       //estado
     pila.Pop();                       //)
     expresion = new Operacion(pila);  //Expresion
     pila.Pop();                       //estado
     pila.Pop();                       //(
     pila.Pop();                       //estado
     _while = pila.Pop().Token.Lexema; //while
 }
예제 #3
0
        public Nodo Transicion(Stack <Nodo> pila, int regla)
        {
            Nodo aux = new Nodo(new Token("null", "", 0));

            if (regla == 0 || regla == 3 || regla == 4 || regla == 16 || regla == 17 || regla == 32 || regla == 36 || regla == 37)
            {
                pila.Pop();       //estado
                aux = pila.Pop(); //definiciones
            }
            else if (regla == 13 || regla == 27 || regla == 38)
            {
                pila.Pop();       //estado
                pila.Pop();       //{
                pila.Pop();       //estado
                aux = pila.Pop(); //nodo
                pila.Pop();       //estado
                pila.Pop();       //}
            }
            else if (regla == 24) //sentencia -> llamadafunc ;
            {
                pila.Pop();       //estado
                pila.Pop();       //;
                pila.Pop();       //estado
                aux = pila.Pop(); //nodo
            }
            else if (regla == 26) //Otro -> else SentenciaBloque
            {
                pila.Pop();       //estado
                aux = pila.Pop(); //nodo
                pila.Pop();       //estado
                pila.Pop();       //else
            }
            else if (regla == 2)
            {
                aux = ReglasGeneran2(pila, reglas[regla].Y);
            }
            else if (regla == 5)
            {
                aux = new DefVar(pila);
            }
            else if (regla == 7)
            {
                aux = new ListaVar(pila);
            }
            else if (regla == 8)
            {
                aux = new DefFunc(pila);
            }
            else if (regla == 10)
            {
                aux = new Parametros(pila);
            }
            else if (regla == 12)
            {
                aux = new ListaParam(pila);
            }
            else if (regla == 15)
            {
                aux = ReglasGeneran2(pila, reglas[regla].Y);
            }
            else if (regla == 19)
            {
                aux = ReglasGeneran2(pila, reglas[regla].Y);
            }
            else if (regla == 20)
            {
                aux = new Asignacion(pila);
            }
            else if (regla == 21)
            {
                aux = new ClaseIf(pila);
            }
            else if (regla == 22)
            {
                aux = new ClaseWhile(pila);
            }
            else if (regla == 23)
            {
                aux = new ClaseReturn(pila);
            }
            else if (regla == 29)
            {
                aux = ReglasGeneran2(pila, reglas[regla].Y);
            }
            else if (regla == 31)
            {
                aux = ReglasGeneran2(pila, reglas[regla].Y);
            }
            else if (regla == 33)
            {
                aux = new Id(pila);
            }
            else if (regla == 34)
            {
                aux = new Constante(pila);
            }
            else if (regla == 35)
            {
                aux = new LlamadaFunc(pila);
            }
            else if (regla >= 39 && regla <= 42)
            {
                aux = new Operacion(pila);
            }
            return(aux);
        }