bool verificarParametros(LinkedList <Exp> valores, LinkedList <Simbolo> parametros, Ambito ent, AST arbol) { // Esto se agrego debido a que LinkedList no tiene metodo get(index) o ElementAt(index) IList param = new List <Simbolo>(parametros); IList vals = new List <Exp>(valores); if (vals.Count == param.Count) { // La cantidad de valores y parametros es la correcta. /* * Variables auxiliares que permitirán verificacion de tipos y carga de parametros * al entorno local de la función. */ Simbolo sim_aux; string id_aux; Tipos tipoPar_aux; Tipos tipoVal_aux; Exp exp_aux; object val_aux; for (int i = 0; i < parametros.Count; i++) { sim_aux = (Simbolo)param[i]; id_aux = sim_aux.Id; tipoPar_aux = sim_aux.Tipo; exp_aux = (Exp)vals[i]; tipoVal_aux = exp_aux.getTipo(ent, arbol); val_aux = exp_aux.getValorImplicito(ent, arbol); if (tipoPar_aux == tipoVal_aux) { // Si los tipos corresponden se agregan los parametros con su respectivo valor. ent.agregar(id_aux, new Simbolo(tipoPar_aux, id_aux, val_aux)); } else { Console.WriteLine("Llamada a: " + id + ", El tipo de los parametros no coinciden con " + "el valor correspondiente utilizado en la llamada, Parametro:" + id_aux); return(false); } } return(true); } else { Console.WriteLine("Llamada a: " + id + "La cantidad de parametros no coincide"); } return(false); }
public void codigoaEvaluar(string strCodigoaEvaluar) { //MessageBox.Show("" + codF); Analizadores.Analizador analizar = new Analizador(new Gramatica()); ParseTree arbol = analizar.isValid(strCodigoaEvaluar); if (arbol != null) { ConstructorAst constAst = new ConstructorAst(); AST arbolAux = constAst.Analizar(arbol.Root); Ambito global = new Ambito(null); try { if (arbolAux != null) { foreach (Instruccion inst in arbolAux.Instrucciones) { //if (inst is Funcion) { //} if (inst is Declaracion) { Declaracion declaracion = (Declaracion)inst; declaracion.ejecutar(global, arbolAux); } //toca deficion clase } foreach (Instruccion ins in arbolAux.Instrucciones) { if (ins is Funcion) { Funcion funcion = (Funcion)ins; global.agregar(funcion.Id, funcion); foreach (NodoAST instruccion in funcion.LLInstrucciones) { //if (instruccion is DefinicionStruct) //{ // DefinicionStruct crear = (DefinicionStruct)instruccion; // crear.ejecutar(global, auxArbol); //} } } if (ins is Declaracion) { Declaracion declaracion = (Declaracion)ins; declaracion.ejecutar(global, arbolAux); } //if (ins is DefinicionStruct) //{ // DefinicionStruct crear = (DefinicionStruct)ins; // crear.ejecutar(global, auxArbol); //} } foreach (Instruccion ins in arbolAux.Instrucciones) { if (ins is Principal) { Principal main = (Principal)ins; Ambito local = new Ambito(global); main.ejecutar(local, arbolAux); } } } else { MessageBox.Show("Cadena invalida"); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } //analizar.parse(arbol, new PrimeraPasada()); MessageBox.Show("Cadena Valida"); } else { MessageBox.Show("No Valida"); } }