public Termino(Pila p, LlamadaFunc ll)
        {
            p.pop();
            p.pop();

            llamada = ll;
        }
        public Definicion(Pila p, DefFunc f)
        {
            p.pop();
            p.pop();

            funciones = f;
        }
        public DefLocal(Pila p, DefVar v)
        {
            p.pop();
            p.pop();

            variables = v;
        }
        public Sentencia(Pila p, Expresion l)
        {
            exp = l;

            p.pop();
            id = ((Terminal)p.pop()).simbolo;
        }
        public DefLocal(Pila p, Sentencia s)
        {
            p.pop();
            p.pop();

            sent = s;
        }
 public Parametros(Pila p)
 {
     p.pop(); //estado
     id = ((Terminal)p.pop()).simbolo;
     p.pop(); // estado
     tipo = ((Terminal)p.pop()).simbolo;
 }
        public Definicion(Pila p, DefVar v)
        {
            p.pop();
            p.pop();

            variables = v;
        }
        public Definiciones(Pila p, Definicion d)
        {
            p.pop();
            p.pop();
            p.pop();
            p.pop();

            definicion = d;
        }
        public Programa(Pila p, List <Definiciones> d)
        {
            p.pop();
            p.pop();

            def = new List <Definiciones>();
            for (int i = 0; i < d.Count; i++)
            {
                def.Add(d[i]);
            }
        }
        public DefLocales(Pila p, List <DefLocal> d)
        {
            p.pop();
            p.pop();
            p.pop();
            p.pop();

            dlocal = new List <DefLocal>();
            for (int i = 0; i < d.Count; i++)
            {
                dlocal.Add(d[i]);
            }
        }
 public DefVar(Pila p)
 {
     p.pop();
     p.pop();
     p.pop();
     listaVar = ((NoTerminal)p.pop()).nodo;
     p.pop();
     id = ((Terminal)p.pop()).simbolo;
     p.pop();
     tipo = ((Terminal)p.pop()).simbolo;
 }
 public LlamadaFunc(Pila p, Argumentos a)
 {
     p.pop();
     p.pop();
     p.pop();
     p.pop();
     p.pop();
     p.pop();
     p.pop();
     id   = ((Terminal)p.pop()).simbolo;
     args = a;
 }
        public BloqFunc(Pila p, DefLocales d)
        {
            p.pop();
            p.pop();
            p.pop();
            p.pop();
            p.pop();
            p.pop();

            dlocales = d;
        }
        public Expresion(Pila p, List <Expresion> l)
        {
            p.pop();
            expresion = ((NoTerminal)p.pop()).nodo;

            p.pop();
            p.pop();

            p.pop();
            expresion = ((NoTerminal)p.pop()).nodo;

            exp = new List <Expresion>();
            for (int i = 0; i < l.Count; i++)
            {
                exp.Add(l[i]);
            }
        }
示例#15
0
        public void arbolSintactico(String regla, String simb)
        {
            Termino nuevoTermino;

            switch (regla)
            {
            case "R1":
                Programa prog = new Programa(pila, listaDefiniciones);
                prog.muestra(arbolSint);
                break;

            case "R30":
                pila.pop();
                pila.pop();
                break;

            case "R3":
                Definiciones nuevaDef = new Definiciones(pila, listaDefinicion.Last <Definicion>());
                listaDefiniciones.Add(nuevaDef);
                Definicion auxDef = listaDefinicion.Last <Definicion>();
                listaDefinicion.Remove(auxDef);
                break;

            case "R4":
                Definicion defVariable = new Definicion(pila, listaVariables.Last <DefVar>());
                listaDefinicion.Add(defVariable);
                break;

            case "R5":
                Definicion def = new Definicion(pila, listaFunciones.Last <DefFunc>());
                listaDefinicion.Add(def);
                break;

            case "R6":
                DefVar arbol = new DefVar(pila);
                listaVariables.Add(arbol);
                break;

            case "R9":
                DefFunc nuevaFuncion = new DefFunc(pila, listaParam, bloqFuncs.Last <BloqFunc>());
                listaFunciones.Add(nuevaFuncion);
                listaParam       = new List <Parametros>();
                listaExpresion   = new List <Expresion>();
                listaExpresiones = new List <Expresion>();
                listaDefLocal    = new List <DefLocal>();
                listaDefLocales  = new List <DefLocales>();
                break;

            case "R10":
                listaParam.Add(null);
                break;

            case "R11":
                pila.pop();
                pila.pop();
                Parametros nuevoParametro = new Parametros(pila);
                listaParam.Add(nuevoParametro);
                break;

            case "R12":
                break;

            case "R13":
                pila.pop();
                pila.pop();
                Parametros nuevoParametros = new Parametros(pila);
                listaParam.Add(nuevoParametros);
                pila.pop();
                pila.pop();
                break;

            case "R14":
                BloqFunc bFunc = new BloqFunc(pila, listaDefLocales.Last <DefLocales>());
                bloqFuncs.Add(bFunc);
                break;

            case "R16":
                DefLocales locales = new DefLocales(pila, listaDefLocal);
                listaDefLocales.Add(locales);
                break;

            case "R17":
                DefLocal nuevaVar = new DefLocal(pila, listaVariables.Last <DefVar>());
                listaDefLocal.Add(nuevaVar);
                break;

            case "R18":
                DefLocal defSentencia = new DefLocal(pila, listaSentencias.Last <Sentencia>());
                listaDefLocal.Add(defSentencia);
                break;

            case "R20":
                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();
                break;

            case "R21":
                Expresion aux;
                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();
                if (listaExpresion.Count > 0)
                {
                    Sentencia nuevaSentencia = new Sentencia(pila, listaExpresion.Last <Expresion>());
                    listaSentencias.Add(nuevaSentencia);
                    if (nuevaSentencia.validar(listaVariables) == false)
                    {
                        agregarErrorSemantico("R21", nuevaSentencia.id);
                    }
                    aux = listaExpresion.Last <Expresion>();
                    listaExpresion.Remove(aux);
                }
                else
                {
                    Sentencia nuevaSentencia = new Sentencia(pila, listaExpresiones.Last <Expresion>());
                    listaSentencias.Add(nuevaSentencia);
                }
                break;

            case "R23":
                for (int i = 0; i < 10; i++)
                {
                    pila.pop();
                }
                break;

            case "R24":
                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();
                Sentencia sentReturn = new Sentencia(pila, listaExpresion.Last <Expresion>());
                listaSentencias.Add(sentReturn);
                aux = listaExpresion.Last <Expresion>();
                listaExpresion.Remove(aux);
                break;

            case "R28":
                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();
                break;

            case "R32":
                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();

                listaArgumentos.Add(listaExpresiones[listaExpresiones.Count - 2]);
                break;

            case "R34":
                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();

                listaArgumentos.Add(listaExpresiones.Last <Expresion>());
                break;

            case "R35":
                Termino nuevoTermFunc = new Termino(pila, listaLlamadaFunc.Last <LlamadaFunc>());
                listaTerminos.Add(nuevoTermFunc);
                break;

            case "R36":
            case "R37":
            case "R38":
                nuevoTermino = new Termino(pila);
                listaTerminos.Add(nuevoTermino);
                break;

            case "R40":
                Argumentos  args        = new Argumentos(listaArgumentos);
                LlamadaFunc llamadaFunc = new LlamadaFunc(pila, args);
                if (llamadaFunc.comparar(listaFunciones) == false)
                {
                    agregarErrorSemantico("R40", llamadaFunc.id);
                }
                listaLlamadaFunc.Add(llamadaFunc);
                break;

            case "R47":

                Expresion nuevaExpresion = new Expresion(pila, listaExpresiones);
                listaExpresion.Add(nuevaExpresion);
                break;

            case "R48":
                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();

                pila.pop();
                pila.pop();
                break;

            case "R52":
                Expresion nuevaExp = new Expresion(pila, listaTerminos.Last <Termino>());
                listaExpresiones.Add(nuevaExp);
                break;

            default:
                break;
            }
        }
 public Expresion(Pila p, Termino t)
 {
     p.pop();
     expresion = ((NoTerminal)p.pop()).nodo;
     termino   = t;
 }
 public Termino(Pila p)
 {
     p.pop(); //estado
     id = ((Terminal)p.pop()).simbolo;
 }
 public DefFunc(Pila p, List <Parametros> l, BloqFunc f)
 {
     bloqFunc = f;
     if (l == null)
     {
         p.pop();
         p.pop();
         p.pop();
         p.pop();
         p.pop();
         p.pop(); //Parametros
         p.pop();
         p.pop();
         p.pop();
         id = ((Terminal)p.pop()).simbolo;
         p.pop();
         tipo = ((Terminal)p.pop()).simbolo;
     }
     else
     {
         param = new List <Parametros>();
         for (int i = 0; i < l.Count; i++)
         {
             param.Add(l[i]);
         }
         p.pop();
         p.pop();
         p.pop();
         p.pop();
         p.pop();
         p.pop(); //Parametros
         p.pop();
         p.pop();
         p.pop();
         id = ((Terminal)p.pop()).simbolo;
         p.pop();
         tipo = ((Terminal)p.pop()).simbolo;
     }
 }