public static String action(ParseTreeNode nodo) { String result = null; switch (nodo.Term.Name.ToString()) { case "INICIO": { if (nodo.ChildNodes.Count == 1) { action(nodo.ChildNodes[0]); } else if (nodo.ChildNodes.Count == 2) { action(nodo.ChildNodes[0]); action(nodo.ChildNodes[1]); } break; } case "ENTRADA": { if (nodo.ChildNodes.Count == 1) { Variables.pilaAmbito.Push("Global"); Variables.nivelAmbito = 0; action(nodo.ChildNodes[0]); } break; } case "ENCABEZADO": { if (nodo.ChildNodes.Count == 1) { action(nodo.ChildNodes[0]); } else if (nodo.ChildNodes.Count == 2) { action(nodo.ChildNodes[0]); action(nodo.ChildNodes[1]); } break; } case "C": if (nodo.ChildNodes.Count == 2) { String[] dato = (nodo.ChildNodes.ElementAt(1).ToString().Split('(')); if (dato[1] == "numero)") { Listas.incerteza = Double.Parse(dato[0]); } else if (dato[1] == "cadena)") { String ruta = dato[0]; if (Directory.Exists(ruta)) { Listas.ruta = ruta; } else { Reporte.agregarError("No existe ruta: " + ruta, "Error General", 0, 0); // Listas.ruta = "C:/Users/Aylin/Documents/Visual Studio 2015/Projects/SBScript"; } } } else if (nodo.ChildNodes.Count == 3) { Listas.incluir.Push(Listas.archivo.Peek().ToString()); Listas.nodoActual = nodo.ChildNodes[0]; String[] dato = (nodo.ChildNodes.ElementAt(1).ToString().Split(' ')); Form1 f = new Form1(); f.incluirArchivo(dato[0] + ".sbs"); Listas.incluir.Pop(); } break; case "TIPO": { if (nodo.ChildNodes.Count == 1) { String[] numero = (nodo.ChildNodes.ElementAt(0).ToString().Split(' ')); result = numero[0]; } break; } case "MOSTRAR": { if (nodo.ChildNodes.Count == 5) { Reporte.agregarMensajeError("No puede imprimir en el area de variables globales", "Error Semantico", 0, 0); } break; } case "DIBUJAR": { if (nodo.ChildNodes.Count == 5) { //result = action(node.ChildNodes[0]); } break; } case "INSTRUCCIONES": { if (nodo.ChildNodes.Count == 1) { action(nodo.ChildNodes[0]); } else if (nodo.ChildNodes.Count == 2) { action(nodo.ChildNodes[0]); action(nodo.ChildNodes[1]); } break; } case "INSTRUCCION": { if (nodo.ChildNodes.Count == 1) { action(nodo.ChildNodes[0]); } else if (nodo.ChildNodes.Count == 2) { //action(node.ChildNodes[0]); } break; } case "METODO": { Metodo_Funcion.parametros.Clear(); ArrayList lista = new ArrayList(); if (nodo.ChildNodes.Count == 6) { String[] dato = (nodo.ChildNodes.ElementAt(1).ToString().Split(' ')); Listas.nodoActual = nodo.ChildNodes[1]; Metodo_Funcion.agregarMF("Void", dato[0], "", null, lista); } else if (nodo.ChildNodes.Count == 7) { String[] dato = (nodo.ChildNodes.ElementAt(1).ToString().Split(' ')); Listas.nodoActual = nodo.ChildNodes[1]; Metodo_Funcion.agregarMF("Void", dato[0], "", nodo.ChildNodes[5], lista); } else if (nodo.ChildNodes.Count == 8) { action(nodo.ChildNodes[3]); Listas.nodoActual = nodo.ChildNodes[1]; String[] dato = (nodo.ChildNodes.ElementAt(1).ToString().Split(' ')); Metodo_Funcion.agregarMF("Void", dato[0], "", nodo.ChildNodes[6], Metodo_Funcion.parametros); } break; } case "FUNCION": { Metodo_Funcion.parametros.Clear(); ArrayList lista = new ArrayList(); if (nodo.ChildNodes.Count == 6) { String tipo = action(nodo.ChildNodes[0]); String[] dato = (nodo.ChildNodes.ElementAt(1).ToString().Split(' ')); Listas.nodoActual = nodo.ChildNodes[1]; Metodo_Funcion.agregarMF(tipo, dato[0], "", null, lista); } else if (nodo.ChildNodes.Count == 7) { String tipo = action(nodo.ChildNodes[0]); String[] dato = (nodo.ChildNodes.ElementAt(1).ToString().Split(' ')); Listas.nodoActual = nodo.ChildNodes[1]; if (nodo.ChildNodes[3].Term.Name.ToString() == "varPARAMETRO") { action(nodo.ChildNodes[3]); Metodo_Funcion.agregarMF(tipo, dato[0], "", null, Metodo_Funcion.parametros); } else { Metodo_Funcion.agregarMF(tipo, dato[0], "", nodo.ChildNodes[5], lista); } } else if (nodo.ChildNodes.Count == 8) { action(nodo.ChildNodes[3]); String tipo = action(nodo.ChildNodes[0]); String[] dato = (nodo.ChildNodes.ElementAt(1).ToString().Split(' ')); Metodo_Funcion.agregarMF(tipo, dato[0], "", nodo.ChildNodes[6], Metodo_Funcion.parametros); } break; } case "varPARAMETRO": { if (nodo.ChildNodes.Count == 2) // { String t = action(nodo.ChildNodes[0]); String[] dato = (nodo.ChildNodes.ElementAt(1).ToString().Split(' ')); Metodo_Funcion.agregarParametro(t, dato[0]); } else if (nodo.ChildNodes.Count == 4) { action(nodo.ChildNodes[0]); String t = action(nodo.ChildNodes[2]); String[] dato = (nodo.ChildNodes.ElementAt(3).ToString().Split(' ')); Metodo_Funcion.agregarParametro(t, dato[0]); } break; } case "RETORNAR": { // MessageBox.Show("TIPO"); if (nodo.ChildNodes.Count == 3) { action(nodo.ChildNodes[1]); } break; } case "MAIN": { Metodo_Funcion.parametros.Clear(); ArrayList vacio = new ArrayList(); if (nodo.ChildNodes.Count == 6) { Listas.nodoActual = nodo.ChildNodes[0]; if (Listas.incluir.Count == 0) { Metodo_Funcion.agregarMF("MAIN", "MAIN", "", nodo.ChildNodes[4], vacio); } } break; } case "LLAMADA": { if (nodo.ChildNodes.Count == 4) { action(nodo.ChildNodes[2]); } else if (nodo.ChildNodes.Count == 5) { result = action(nodo.ChildNodes[2]); } break; } case "TipoPARAMETRO": { if (nodo.ChildNodes.Count == 3) { } break; } case "SI": { if (nodo.ChildNodes.Count == 7) { action(nodo.ChildNodes[2]); action(nodo.ChildNodes[5]); } else if (nodo.ChildNodes.Count == 8) { action(nodo.ChildNodes[2]); action(nodo.ChildNodes[5]); action(nodo.ChildNodes[7]); } break; } case "ELSE": { if (nodo.ChildNodes.Count == 2) { action(nodo.ChildNodes[1]); } else if (nodo.ChildNodes.Count == 4) { action(nodo.ChildNodes[2]); } break; } case "CICLO": { if (nodo.ChildNodes.Count == 7) { action(nodo.ChildNodes[2]); action(nodo.ChildNodes[5]); } break; } case "SWITCH": { if (nodo.ChildNodes.Count == 5) { action(nodo.ChildNodes[2]); action(nodo.ChildNodes[4]); } else if (nodo.ChildNodes.Count == 6) { action(nodo.ChildNodes[2]); action(nodo.ChildNodes[4]); action(nodo.ChildNodes[5]); } else if (nodo.ChildNodes.Count == 7) { action(nodo.ChildNodes[2]); action(nodo.ChildNodes[5]); } break; } case "DEFAULT": { if (nodo.ChildNodes.Count == 5) { action(nodo.ChildNodes[3]); } break; } case "FOR": { if (nodo.ChildNodes.Count == 7) { action(nodo.ChildNodes[2]); action(nodo.ChildNodes[5]); } break; } case "PARA": { if (nodo.ChildNodes.Count == 8) { action(nodo.ChildNodes[3]); action(nodo.ChildNodes[5]); action(nodo.ChildNodes[7]); } break; } case "EXPRESION": { if (nodo.ChildNodes.Count == 1) { result = action(nodo.ChildNodes[0]); } break; } case "OpARITMETICO": { if (nodo.ChildNodes.Count == 1) { result = action(nodo.ChildNodes[0]); } break; } case "E": { // MessageBox.Show("E"); //if (nodo.ChildNodes.Count == 1) //{ // result = resolverOperacion(nodo).ToString(); //} //else if (nodo.ChildNodes.Count == 3) //{ // result = resolverOperacion(nodo).ToString(); //} break; } default: break; } return(result); }
public void incluirArchivo(String archivo) { int i = 0; String carpeta = ""; if (listaRuta.Count == 0) { Reporte.agregarMensajeError("No se ha podido incluir el archivo ya que no esta guardado", "Error Semantico", Listas.nodoActual.Token.Location.Line, Listas.nodoActual.Token.Location.Column); return; } for (i = 0; i < listaRuta.Count; i++) //Si la ruta esta vacia { Pestania p = (Pestania)listaRuta[i]; if (p.nombre == nombreTab) { carpeta = p.carpeta; } } if (carpeta == "") { Reporte.agregarMensajeError("No se ha podido incluir el archivo ya que no esta guardado", "Error Semantico", Listas.nodoActual.Token.Location.Line, Listas.nodoActual.Token.Location.Column); return; } else { String ruta = carpeta + archivo; String texto = ""; try { System.IO.StreamReader sr = new System.IO.StreamReader(ruta); ruta = openFileDialog1.FileName; texto = sr.ReadToEnd(); sr.Close(); Pestania p = new Pestania(); p.nombre = archivo; p.ruta = ruta; p.carpeta = carpeta; listaRuta.Add(p); MessageBox.Show(archivo); txtConsola.Text += "\n* * * * * * * * " + archivo + " * * * * * * * "; ParseTreeNode resultado = Analizador.analizar(texto); if (resultado != null) { Listas.archivo.Push(archivo); MessageBox.Show("El arbol fue construido correctamente"); PrimerRecorrido.action(resultado); imprimirVariables(); imprimir(); Listas.archivo.Pop(); } else { MessageBox.Show("ERROR: Deberia de revisar la cadena de entrada"); } } catch (Exception e) { MessageBox.Show("Error;"); } } }
public static Boolean crearVariable(String tipo, String nombre, String valor, String ambito) { ParseTreeNode nodo = Listas.nodoActual; Variable v = null; for (int a = 0; a < listaVariables.Count; a++) { v = (Variable)listaVariables[a]; if (v.nombre == nombre && v.tipo == tipo && v.ambito == ambito && v.nivel == nivelAmbito) { Reporte.agregarMensajeError("La variable '" + v.nombre + "' ya existe", "Error Semantico", Listas.nodoActual.Token.Location.Line, Listas.nodoActual.Token.Location.Column); return(false); } } if (PrimerRecorrido.concatenar == false)//Numero { if (tipo == "String") { Reporte.agregarMensajeError("Tipo incorrecto: '" + nombre + "'", "Error Semantico", Listas.nodoActual.Token.Location.Line, Listas.nodoActual.Token.Location.Column); return(false); } else if (tipo == "Bool") { if (valor == "1") { // valor = "true"; } else if (valor == "0") { //valor = "false"; } else { Reporte.agregarMensajeError("Tipo Incorrecto '" + nombre + "'", "Error Semantico", Listas.nodoActual.Token.Location.Line, Listas.nodoActual.Token.Location.Column); return(false); } } } else //Cadena { if (tipo == "Number") { Reporte.agregarMensajeError("Tipo incorrecto '" + nombre + "'", "Error Semantico", Listas.nodoActual.Token.Location.Line, Listas.nodoActual.Token.Location.Column); return(false); } if (tipo == "Bool") { if (!(valor == "1" || valor == "0" || valor == "")) { Reporte.agregarMensajeError("Tipo incorrecto '" + nombre + "'", "Error Semantico", Listas.nodoActual.Token.Location.Line, Listas.nodoActual.Token.Location.Column); return(false); } } } Variable nueva = new Variable(); nueva.tipo = tipo; nueva.nombre = nombre; nueva.valor = valor; nueva.ambito = ambito; nueva.nivel = nivelAmbito; listaVariables.Add(nueva); return(true); }
private void btnReporte_Click(object sender, EventArgs e) { Reporte.generarReporte(); }