Ejemplo n.º 1
0
 public void estado1(ID_token token, Stack <String> pila)
 {
     escribirTransicion(token, pila);
     if (token.ID.Equals("Id_TOKEN"))
     {
         asignacionRaiz(pila);
         pila.Push("estado2");
         arbolSintactico.agregarNodo(pila.Peek());
         asignacionRaiz(pila);
     }
     else if (token.ID.Equals("VariableType_TOKEN"))
     {
         asignacionRaiz(pila);
         pila.Push("estado3");
         arbolSintactico.agregarNodo(pila.Peek());
         asignacionRaiz(pila);
     }
     else if (token.ID.Equals("ReservatedWord_TOKEN"))
     {
         asignacionRaiz(pila);
         pila.Push("estado4");
         arbolSintactico.agregarNodo(pila.Peek());
         asignacionRaiz(pila);
     }
     else if (token.lexema.Equals("COMENTARIO"))
     {
         ///la produccion genera el estado terminal de tipo COMENTARIO
         pila.Push("COMENTARIO");
     }
     else
     {
         pila.Pop();
     }
     escribirTransicion(token, pila);
 }
Ejemplo n.º 2
0
 public Boolean verificacionTerminal(ID_token token, Stack <String> pila)
 {
     if (pila.Count == 0)
     {
         return(false);
     }
     if (token.lexema.Equals(pila.Peek()))
     {
         Console.WriteLine("Se encontro igual: T = " + token.lexema + " P = " + pila.Peek());
         pila.Pop();
         return(false);
     }
     else
     {
         if (isTerminal(pila.Peek()))
         {
             errores.Add("Error en la linea " + token.lineaUbicacion + " se esperaba " + " \"" + pila.Peek() + " \" ");
             pila.Pop();
             //pila.Push(token.lexema);
             escribirTransicion(token, pila);
             return(true);
         }
         else
         {
             Boolean temp = shift(token, pila);
             return(temp);
         }
     }
 }
Ejemplo n.º 3
0
        public void LOGICA2(ID_token token, Stack <String> pila)
        {
            if (token.lexema.Equals("&&"))
            {
                asignacionRaiz(pila);

                pila.Pop();
                pila.Push("LOGICA");
                pila.Push("&&");

                arbolSintactico.agregarNodo("&&");
                arbolSintactico.agregarNodo("LOGICA");
            }
            else if (token.lexema.Equals("||"))
            {
                asignacionRaiz(pila);

                pila.Pop();
                pila.Push("LOGICA");
                pila.Push("||");

                arbolSintactico.agregarNodo("||");
                arbolSintactico.agregarNodo("LOGICA");
            }
            else
            {
                pila.Pop();
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 4
0
        private void ASIG_P(ID_token token, Stack <String> pila)
        {
            asignacionRaiz(pila);
            if (token.lexema.Equals("ID_ENTERO"))
            {
                pila.Pop();
                pila.Push("ID_ENTERO");

                arbolSintactico.agregarNodo(token.lexema);
            }
            else if (token.lexema.Equals("NUMERO_E"))
            {
                pila.Pop();
                pila.Push("NUMERO_E");

                arbolSintactico.agregarNodo(token.lexema);
            }
            else
            {
                erroresSintaxis.Add("Error en la linea " + token.lineaUbicacion + " se esperaba una asignacion de tipo entera");
                pila.Pop();
                pila.Push(token.lexema);
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 5
0
        public void ejecutar(List <ID_token> tokes)
        {
            if (tokes.Count > 0)
            {
                ID_token fin = new ID_token("FINAL_TOKEN", "$", 0, 0, Color.Orange);
                fin.lexema = "$";
                tokes.Add(fin);
                Stack <String> pila = new Stack <String>();
                pila.Push("$");
                pila.Push("estado0");
                //Agregacion de la raiz del arbol sintactico
                arbolSintactico.inicio();

                asignacionVariables = new AsignacionVar(this.retornarArbol);
                expLogicas          = new ExprecionesLogicas(this.retornarArbol);

                ID_token token;
                Boolean  res = false;
                for (int j = 0; j < tokes.Count; j++)
                {
                    token = tokes.ElementAt(j);
                    do
                    {
                        res = verificacionTerminal(token, pila);
                    } while (res);
                }
                foreach (String var in pila)
                {
                    Console.WriteLine(var);
                }
            }
        }
Ejemplo n.º 6
0
 public void ASIG_CP(ID_token token, Stack <String> pila, List <String> errores)
 {
     asignacionRaiz(pila);
     if (token.lexema.Equals("LETRA"))
     {
         pila.Pop();
         pila.Push("LETRA");
         arbolSintactico.agregarNodo(token.lexema);
     }
     else if (token.lexema.Equals("ID_CARACTER"))
     {
         pila.Pop();
         pila.Push("ID_CARACTER");
         arbolSintactico.agregarNodo(token.lexema);
     }
     else
     {
         pila.Pop();
         if (token.ID.Equals("Id_TOKEN"))
         {
             if (token.lexema.Equals("ID_"))
             {
                 errores.Add("Error en la linea " + token.lineaUbicacion + " la variable \" " + token.contenido + " \" no esta declarada");
             }
             else
             {
                 errores.Add("Error en la linea " + token.lineaUbicacion + " la variable \" " + token.contenido + " \" ya esta declarada");
             }
         }
         errores.Add("Error en la linea " + token.lineaUbicacion + " se esperaba una asignacion de tipo caracter");
         pila.Push(token.lexema);
     }
     escribirTransicion(token, pila);
 }
Ejemplo n.º 7
0
        public void ESTADO_LOGICO(ID_token token, Stack <String> pila, List <String> errores)
        {
            asignacionRaiz(pila);
            if (token.lexema.Equals("VERDADERO"))
            {
                pila.Pop();
                pila.Push("VERDADERO");

                arbolSintactico.agregarNodo(token.lexema);
            }
            else if (token.lexema.Equals("FALSO"))
            {
                pila.Pop();
                pila.Push("FALSO");

                arbolSintactico.agregarNodo(token.lexema);
            }
            else if (token.lexema.Equals("ID_BOOLEANO"))
            {
                pila.Pop();
                pila.Push("ID_BOOLEANO");

                arbolSintactico.agregarNodo(token.lexema);
            }
            else
            {
                errores.Add("Error en la linea " + token.lineaUbicacion + " se esperaba una sentencia booleana");
                pila.Pop();
                pila.Push(token.lexema);
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 8
0
 private void escribirTransicion(ID_token token, Stack <String> pila)
 {
     if (pila.Count > 0)
     {
         Console.WriteLine("Estado: " + pila.Peek() + " Lexema: " + token.lexema);
     }
 }
Ejemplo n.º 9
0
        public void estado0(ID_token token, Stack <String> pila)
        {
            if (token.lexema.Equals("PRINCIPAL"))
            {
                pila.Pop();
                pila.Push("}");
                pila.Push("estado1");
                pila.Push("{");
                pila.Push(")");
                pila.Push("(");
                pila.Push("PRINCIPAL");

                arbolSintactico.agregarNodo("PRINCIPAL");
                arbolSintactico.agregarNodo("(");
                arbolSintactico.agregarNodo(")");
                arbolSintactico.agregarNodo("{");
                arbolSintactico.agregarNodo("estado1");
                arbolSintactico.agregarNodo("}");
            }
            else
            {
                errores.Add("Error en linea " + token.lineaUbicacion + " se esperaba el inicio de clase \"principal\"");
                pila.Pop();
                pila.Push(token.lexema);
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 10
0
        public void LOGICA(ID_token token, Stack <String> pila, List <String> errores)
        {
            asignacionRaiz(pila);
            if (token.ID.Equals("BooleanState_TOKEN") || token.lexema.Equals("ID_BOOLEANO"))
            {
                pila.Pop();
                pila.Push("LOGICA2");
                pila.Push("ESTADO_LOGICO");

                arbolSintactico.agregarNodo("ESTADO_LOGICO");
                arbolSintactico.agregarNodo("LOGICA2");
            }
            else if (token.lexema.Equals("NUMERO_E") || token.lexema.Equals("NUMERO_D") || token.lexema.Equals("ID_ENTERO") || token.lexema.Equals("ID_DECIMAL") || token.lexema.Equals("-"))
            {
                pila.Pop();
                pila.Push("LOGICA2");
                pila.Push("NUM3");
                pila.Push("OP_RELACIONAL");
                pila.Push("NUM2");

                arbolSintactico.agregarNodo("NUM2");
                arbolSintactico.agregarNodo("OP_RELACIONAL");
                arbolSintactico.agregarNodo("NUM3");
                arbolSintactico.agregarNodo("LOGICA2");
            }
            else if (token.contenido.Equals("!"))
            {
                pila.Pop();
                pila.Push("LOGICA2");
                pila.Push("LOGICA");
                pila.Push("!");

                arbolSintactico.agregarNodo("!");
                arbolSintactico.agregarNodo("LOGICA");
                arbolSintactico.agregarNodo("LOGICA2");
            }
            else if (token.lexema.Equals("("))
            {
                pila.Pop();
                pila.Push("LOGICA2");
                pila.Push(")");
                pila.Push("LOGICA");
                pila.Push("(");

                arbolSintactico.agregarNodo("(");
                arbolSintactico.agregarNodo("LOGICA");
                arbolSintactico.agregarNodo(")");
                arbolSintactico.agregarNodo("LOGICA2");
            }
            else
            {
                errores.Add("Error en la linea " + token.lineaUbicacion + " se esperaba una sentencia booleana");
                pila.Pop();
                pila.Push(token.lexema);
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 11
0
        public void ASIG_C2(ID_token token, Stack <String> pila, List <String> errores)
        {
            asignacionRaiz(pila);
            if (token.lexema.Equals("="))
            {
                pila.Pop();
                pila.Push(";");
                pila.Push("ASIG_CP");
                pila.Push("=");

                arbolSintactico.agregarNodo("=");
                arbolSintactico.agregarNodo("ASIG_CP");
                arbolSintactico.agregarNodo(";");
            }
            else if (token.lexema.Equals(","))
            {
                pila.Pop();
                pila.Push("ASIG_C2");
                pila.Push("ID_CARACTER");
                pila.Push(",");

                arbolSintactico.agregarNodo(",");
                arbolSintactico.agregarNodo("ID_CARACTER");
                arbolSintactico.agregarNodo("ASIG_C2");
            }
            else if (token.lexema.Equals("ID_CARACTER"))
            {
                pila.Pop();
                pila.Push("ASIG_C2");
                pila.Push("ID_CARACTER");

                arbolSintactico.agregarNodo("ID_CARACTER");
                arbolSintactico.agregarNodo("ASIG_C2");
            }
            else if (token.lexema.Equals(";"))
            {
                pila.Pop();
                pila.Push(";");

                arbolSintactico.agregarNodo(";");
            }
            else
            {
                pila.Pop();
                if (token.ID.Equals("Id_TOKEN"))
                {
                    errores.Add("Error en la linea " + token.lineaUbicacion + " la variable \" " + token.contenido + " \" ya ah sido declarada con anteoridad");
                }
                else
                {
                    errores.Add("Error en la linea " + token.lineaUbicacion + " se esperaba una asignacion o fin de declaracion");
                }
                pila.Push(token.lexema);
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 12
0
        public void estado2(ID_token token, Stack <String> pila)
        {
            asignacionRaiz(pila);
            if (token.lexema.Equals("ID_ENTERO"))
            {
                pila.Pop();
                pila.Push("ASIG_E");
                pila.Push("ID_ENTERO");

                arbolSintactico.agregarNodo("ID_ENTERO");
                arbolSintactico.agregarNodo("ASIG_E");
            }
            else if (token.lexema.Equals("ID_DECIMAL"))
            {
                pila.Pop();
                pila.Push("ASIG_D");
                pila.Push("ID_DECIMAL");

                arbolSintactico.agregarNodo("ID_DECIMAL");
                arbolSintactico.agregarNodo("ASIG_D");
            }
            else if (token.lexema.Equals("ID_CADENA"))
            {
                pila.Pop();
                pila.Push("ASIG_S");
                pila.Push("ID_CADENA");

                arbolSintactico.agregarNodo("ID_CADENA");
                arbolSintactico.agregarNodo("ASIG_S");
            }
            else if (token.lexema.Equals("ID_BOOLEANO"))
            {
                pila.Pop();
                pila.Push("ASIG_B");
                pila.Push("ID_BOOLEANO");

                arbolSintactico.agregarNodo("ID_BOOLEANO");
                arbolSintactico.agregarNodo("ASIG_B");
            }
            else if (token.lexema.Equals("ID_CARACTER"))
            {
                pila.Pop();
                pila.Push("ASIG_C");
                pila.Push("ID_CARACTER");

                arbolSintactico.agregarNodo("ID_CARACTER");
                arbolSintactico.agregarNodo("ASIG_C");
            }
            else
            {
                pila.Pop();
                erroresSintaxis.Add("Error en la linea " + token.lineaUbicacion + " \" " + token.contenido + " \" la variable no esta declarada");
                pila.Push(token.lexema);
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 13
0
        public void estado3(ID_token token, Stack <String> pila)
        {
            asignacionRaiz(pila);
            if (token.lexema.Equals("ENTERO"))
            {
                pila.Pop();
                pila.Push("ASIG_E2");
                pila.Push("ENTERO");

                arbolSintactico.agregarNodo("ENTERO");
                arbolSintactico.agregarNodo("ASIG_E2");
            }
            else if (token.lexema.Equals("DECIMAL"))
            {
                pila.Pop();
                pila.Push("ASIG_D2");
                pila.Push("DECIMAL");

                arbolSintactico.agregarNodo("DECIMAL");
                arbolSintactico.agregarNodo("ASIG_D2");
            }
            else if (token.lexema.Equals("CADENA"))
            {
                pila.Pop();
                pila.Push("ASIG_S2");
                pila.Push("CADENA");

                arbolSintactico.agregarNodo("CADENA");
                arbolSintactico.agregarNodo("ASIG_S2");
            }
            else if (token.lexema.Equals("BOOLEANO"))
            {
                pila.Pop();
                pila.Push("ASIG_B2");
                pila.Push("BOOLEANO");

                arbolSintactico.agregarNodo("BOOLEANO");
                arbolSintactico.agregarNodo("ASIG_B2");
            }
            else if (token.lexema.Equals("CARACTER"))
            {
                pila.Pop();
                pila.Push("ASIG_C2");
                pila.Push("CARACTER");

                arbolSintactico.agregarNodo("CARACTER");
                arbolSintactico.agregarNodo("ASIG_C2");
            }
            else
            {
                pila.Pop();
                erroresSintaxis.Add("Error en la linea " + token.lineaUbicacion + " se esperaba declaracion u otro metodo");
                pila.Push(token.lexema);
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 14
0
        public void NUM3(ID_token token, Stack <String> pila)
        {
            asignacionRaiz(pila);
            if (token.lexema.Equals("NUMERO_E") || token.lexema.Equals("NUMERO_D") || token.lexema.Equals("ID_ENTERO") || token.lexema.Equals("ID_DECIMAL") || token.lexema.Equals("-"))
            {
                pila.Pop();
                pila.Push("NUM2");

                arbolSintactico.agregarNodo("NUM2");
            }
        }
Ejemplo n.º 15
0
        private void EXP_P(ID_token token, Stack <String> pila)
        {
            asignacionRaiz(pila);
            if (token.lexema.Equals("+"))
            {
                pila.Pop();
                pila.Push("EXP");
                pila.Push("+");

                arbolSintactico.agregarNodo("+");
                arbolSintactico.agregarNodo("EXP");
            }
            else
            {
                pila.Pop();
            }
        }
Ejemplo n.º 16
0
        private void ES_SI_2(ID_token token, Stack <String> pila)
        {
            if (token.lexema.Equals("SINO"))
            {
                asignacionRaiz(pila);
                pila.Pop();
                pila.Push("}");
                pila.Push("estado1");
                pila.Push("{");
                pila.Push("SINO");

                arbolSintactico.agregarNodo("SINO");
                arbolSintactico.agregarNodo("{");
                arbolSintactico.agregarNodo("estado1");
                arbolSintactico.agregarNodo("}");
            }
            else if (token.lexema.Equals("SINO_SI"))
            {
                asignacionRaiz(pila);
                pila.Pop();
                pila.Push("ES_SI_2");
                pila.Push("}");
                pila.Push("estado1");
                pila.Push("{");
                pila.Push(")");
                pila.Push("LOGICA");
                pila.Push("(");
                pila.Push("SINO_SI");

                arbolSintactico.agregarNodo("SINO_SI");
                arbolSintactico.agregarNodo("(");
                arbolSintactico.agregarNodo("LOGICA");
                arbolSintactico.agregarNodo(")");
                arbolSintactico.agregarNodo("{");
                arbolSintactico.agregarNodo("estado1");
                arbolSintactico.agregarNodo("}");
                arbolSintactico.agregarNodo("ES_SI_2");
            }
            else
            {
                pila.Pop();
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 17
0
        public void NUM2(ID_token token, Stack <String> pila)
        {
            asignacionRaiz(pila);
            if (token.lexema.Equals("-"))
            {
                pila.Pop();
                pila.Push("NUM");
                pila.Push("-");

                arbolSintactico.agregarNodo("-");
                arbolSintactico.agregarNodo("NUM");
            }
            else
            {
                pila.Pop();
                pila.Push("NUM");

                arbolSintactico.agregarNodo("NUM");
            }
        }
Ejemplo n.º 18
0
        public void ASIG_E(ID_token token, Stack <String> pila, List <String> errores)
        {
            asignacionRaiz(pila);

            if (token.lexema.Equals("="))
            {
                pila.Pop();
                pila.Push(";");
                pila.Push("ASIG_EP2");
                pila.Push("=");

                arbolSintactico.agregarNodo("=");
                arbolSintactico.agregarNodo("ASIG_EP2");
                arbolSintactico.agregarNodo(";");
            }
            else if (token.lexema.Equals("++"))
            {
                pila.Pop();
                pila.Push(";");
                pila.Push("++");

                arbolSintactico.agregarNodo("++");
                arbolSintactico.agregarNodo(";");
            }
            else if (token.lexema.Equals("--"))
            {
                pila.Pop();
                pila.Push(";");
                pila.Push("--");

                arbolSintactico.agregarNodo("--");
                arbolSintactico.agregarNodo(";");
            }
            else
            {
                pila.Pop();
                errores.Add("Error en la linea " + token.lineaUbicacion + " se esperaba una asignacion de tipo entero");
                pila.Push(token.lexema);
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 19
0
        private void EXP(ID_token token, Stack <String> pila)
        {
            asignacionRaiz(pila);
            String lexTemp = token.lexema;

            if (lexTemp.Equals("CAD_TEXTO") || lexTemp.Equals("ID_CADENA") || lexTemp.Equals("NUMERO_E") || lexTemp.Equals("ID_ENTERO") || lexTemp.Equals("NUMERO_D") || lexTemp.Equals("ID_DECIMAL"))
            {
                pila.Pop();
                pila.Push("EXP_P");
                pila.Push(token.lexema);

                arbolSintactico.agregarNodo(token.lexema);
                arbolSintactico.agregarNodo("EXP_P");
            }
            else
            {
                erroresSintaxis.Add("Error en la linea " + token.lineaUbicacion + " se espera una variable contenedora o una cantidad numerica");
                pila.Pop();
                pila.Push(token.lexema);
            }
        }
Ejemplo n.º 20
0
        public void NUM(ID_token token, Stack <String> pila, List <String> errores)
        {
            asignacionRaiz(pila);
            if (token.lexema.Equals("NUMERO_E"))
            {
                pila.Pop();
                pila.Push("NUMERO_E");

                arbolSintactico.agregarNodo(token.lexema);
            }
            else if (token.lexema.Equals("NUMERO_D"))
            {
                pila.Pop();
                pila.Push("NUMERO_D");

                arbolSintactico.agregarNodo(token.lexema);
            }
            else if (token.lexema.Equals("ID_ENTERO"))
            {
                pila.Pop();
                pila.Push("ID_ENTERO");

                arbolSintactico.agregarNodo(token.lexema);
            }
            else if (token.lexema.Equals("ID_DECIMAL"))
            {
                pila.Pop();
                pila.Push("ID_DECIMAL");

                arbolSintactico.agregarNodo(token.lexema);
            }
            else
            {
                errores.Add("Error en la linea " + token.lineaUbicacion + ", " + " \"" + token.contenido + "\" " + " se esperaba una variable o valor de tipo numerico");
                pila.Pop();
                pila.Push(token.lexema);
            }
            escribirTransicion(token, pila);
        }
Ejemplo n.º 21
0
        public Boolean shift(ID_token token, Stack <String> pila)
        {
            Boolean respuesta = false;

            switch (pila.Peek())
            {
            case "estado0":
                estado0(token, pila);
                respuesta = true;
                break;

            case "estado1":
                estado1(token, pila);
                respuesta = true;
                break;

            case "estado2":
                estado2(token, pila);
                respuesta = true;
                break;

            case "estado3":
                estado3(token, pila);
                respuesta = true;
                break;

            case "estado4":
                estado4(token, pila);
                respuesta = true;
                break;

            case "ASIG_E2":
                this.asignacionVariables.ASIG_E2(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_E":
                this.asignacionVariables.ASIG_E(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_EP":
                this.asignacionVariables.ASIG_EP(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_D2":
                this.asignacionVariables.ASIG_D2(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_D":
                this.asignacionVariables.ASIG_D(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_DP":
                this.asignacionVariables.ASIG_DP(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_S":
                this.asignacionVariables.ASIG_S(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_SP":
                this.asignacionVariables.ASIG_SP(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_S2":
                this.asignacionVariables.ASIG_S2(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_B":
                this.asignacionVariables.ASIG_B(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_BP":
                this.asignacionVariables.ASIG_BP(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_B2":
                this.asignacionVariables.ASIG_B2(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_C":
                this.asignacionVariables.ASIG_C(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_CP":
                this.asignacionVariables.ASIG_CP(token, pila, errores);
                respuesta = true;
                break;

            case "ASIG_C2":
                this.asignacionVariables.ASIG_C2(token, pila, errores);
                respuesta = true;
                break;

            case "LOGICA":
                this.expLogicas.LOGICA(token, pila, errores);
                respuesta = true;
                break;

            case "LOGICA2":
                this.expLogicas.LOGICA2(token, pila);
                respuesta = true;
                break;

            case "ESTADO_LOGICO":
                this.expLogicas.ESTADO_LOGICO(token, pila, errores);
                respuesta = true;
                break;

            case "NUM":
                this.expLogicas.NUM(token, pila, errores);
                respuesta = true;
                break;

            case "NUM2":
                this.expLogicas.NUM2(token, pila);
                respuesta = true;
                break;

            case "NUM3":
                this.expLogicas.NUM3(token, pila);
                respuesta = true;
                break;

            case "ASIG":
                ASIG(token, pila);
                respuesta = true;
                break;

            case "ASIG_P":
                ASIG_P(token, pila);
                respuesta = true;
                break;

            case "ES_SI_2":
                ES_SI_2(token, pila);
                respuesta = true;
                break;

            case "EXP":
                EXP(token, pila);
                respuesta = true;
                break;

            case "EXP_P":
                EXP_P(token, pila);
                respuesta = true;
                break;

            case "ASIG_EP2":
                this.asignacionVariables.ASIG_EP2(token, pila);
                respuesta = true;
                break;

            case "ASIG_DP2":
                this.asignacionVariables.ASIG_DP2(token, pila);
                respuesta = true;
                break;

            default:
                errores.Add("Error en linea " + token.lineaUbicacion + " no se esperaba otro token");
                respuesta = false;
                break;
            }
            return(respuesta);
        }
Ejemplo n.º 22
0
        public void estado4(ID_token token, Stack <String> pila)
        {
            asignacionRaiz(pila);
            if (token.lexema.Equals("MIENTRAS"))
            {
                pila.Pop();
                pila.Push("}");
                pila.Push("estado1");
                pila.Push("{");
                pila.Push(")");
                pila.Push("LOGICA");
                pila.Push("(");
                pila.Push("MIENTRAS");

                arbolSintactico.agregarNodo("MIENTRAS");
                arbolSintactico.agregarNodo("(");
                arbolSintactico.agregarNodo("LOGICA");
                arbolSintactico.agregarNodo(")");
                arbolSintactico.agregarNodo("{");
                arbolSintactico.agregarNodo("estado1");
                arbolSintactico.agregarNodo("}");
            }
            else if (token.lexema.Equals("SI"))
            {
                pila.Pop();
                pila.Push("ES_SI_2");
                pila.Push("}");
                pila.Push("estado1");
                pila.Push("{");
                pila.Push(")");
                pila.Push("LOGICA");
                pila.Push("(");
                pila.Push("SI");


                arbolSintactico.agregarNodo("SI");
                arbolSintactico.agregarNodo("(");
                arbolSintactico.agregarNodo("LOGICA");
                arbolSintactico.agregarNodo(")");
                arbolSintactico.agregarNodo("{");
                arbolSintactico.agregarNodo("estado1");
                arbolSintactico.agregarNodo("}");
                arbolSintactico.agregarNodo("ES_SI_2");
            }
            else if (token.lexema.Equals("HACER"))
            {
                pila.Pop();
                pila.Push(")");
                pila.Push("LOGICA");
                pila.Push("(");
                pila.Push("MIENTRAS");
                pila.Push("}");
                pila.Push("estado1");
                pila.Push("{");
                pila.Push("HACER");

                arbolSintactico.agregarNodo("HACER");
                arbolSintactico.agregarNodo("{");
                arbolSintactico.agregarNodo("estado1");
                arbolSintactico.agregarNodo("}");
                arbolSintactico.agregarNodo("MIENTRAS");
                arbolSintactico.agregarNodo("(");
                arbolSintactico.agregarNodo("LOGICA");
                arbolSintactico.agregarNodo(")");
            }
            else if (token.lexema.Equals("DESDE"))
            {
                pila.Pop();
                pila.Push("}");
                pila.Push("estado1");
                pila.Push("{");
                pila.Push("ASIG_EP2");
                pila.Push("INCREMENTO");
                pila.Push("LOGICA");
                pila.Push("HASTA");
                pila.Push("ASIG");
                pila.Push("DESDE");


                arbolSintactico.agregarNodo("DESDE");
                arbolSintactico.agregarNodo("ASIG");
                arbolSintactico.agregarNodo("HASTA");
                arbolSintactico.agregarNodo("LOGICA");
                arbolSintactico.agregarNodo("INCREMENTO");
                arbolSintactico.agregarNodo("ASIG_EP2");
                arbolSintactico.agregarNodo("{");
                arbolSintactico.agregarNodo("estado1");
                arbolSintactico.agregarNodo("}");
            }
            else if (token.lexema.Equals("IMPRIMIR"))
            {
                pila.Pop();
                pila.Push(";");
                pila.Push(")");
                pila.Push("EXP");
                pila.Push("(");
                pila.Push("IMPRIMIR");

                arbolSintactico.agregarNodo("IMPRIMIR");
                arbolSintactico.agregarNodo("(");
                arbolSintactico.agregarNodo("EXP");
                arbolSintactico.agregarNodo(")");
                arbolSintactico.agregarNodo(";");
            }
            else if (token.lexema.Equals("LEER"))
            {
                pila.Pop();
                pila.Push(";");
                pila.Push(")");
                pila.Push("ID_CADENA");
                pila.Push("(");
                pila.Push("LEER");


                arbolSintactico.agregarNodo("LEER");
                arbolSintactico.agregarNodo("(");
                arbolSintactico.agregarNodo("ID_CADENA");
                arbolSintactico.agregarNodo(")");
                arbolSintactico.agregarNodo(";");
            }
            else
            {
                erroresSintaxis.Add("Error en la linea " + token.lineaUbicacion + " no se esperaba \" " + token.contenido + " \" ");
                pila.Pop();
                pila.Push(token.lexema);
            }
            escribirTransicion(token, pila);
        }