public BloqFunc(Pila p, DefLocales d) { p.pop(); p.pop(); p.pop(); p.pop(); p.pop(); p.pop(); dlocales = d; }
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; } }