public void addValor(NodoVar v) { NodoVar a = buscar(v.nombre); if (a != null) { a.valor = v.valor; } }
public void insertar(NodoVar nuevo) { if (raiz == null) { raiz = ultimo = nuevo; } else { ultimo.sig = nuevo; nuevo.ant = ultimo; ultimo = nuevo; } }
public Object ejecutar(ParseTreeNode raiz) { string I = raiz.ToString(); ParseTreeNode[] hijos = null; if (raiz.ChildNodes.Count > 0) { hijos = raiz.ChildNodes.ToArray(); } switch (I) { case "S": { return ejecutar(hijos[0]); } case "DECLA": { String[] n1 = hijos[1].ToString().Split(new Char[] { ' ' }); NodoVar v = frmCompi.variables.buscar(n1[0]); if (v == null) { NodoVar var = new NodoVar("var", n1[0]); var.valor = ejecutar(hijos[3]); frmCompi.variables.insertar(var); return var.valor; } else { MessageBox.Show("variable ya existe"); } return null; } case "E": { return ejecutar(hijos[0]); } case "T": { if (hijos.Count() == 1) { return ejecutar(hijos[0]); } else { Object iz = ejecutar(hijos[0]); Object de = ejecutar(hijos[2]); if (hijos[1].ToString().Contains("+")) { return Convert.ToDouble(iz) + Convert.ToDouble(de); } else { return Convert.ToDouble(iz) + Convert.ToDouble(de); } } } case "F": { if (hijos.Count() == 1) { return ejecutar(hijos[0]); } else { Object iz = ejecutar(hijos[0]); Object de = ejecutar(hijos[2]); if (hijos[1].ToString().Contains("/")) { return Convert.ToDouble(iz) / Convert.ToDouble(de); } else { return Convert.ToDouble(iz) * Convert.ToDouble(de); } } } case "G": { if (hijos.Count() == 1) { return ejecutar(hijos[0]); } else { Object iz = ejecutar(hijos[0]); Object de = ejecutar(hijos[2]); return Math.Pow(Convert.ToDouble(iz), Convert.ToDouble(de)); } } case "H": { if (hijos.Count() == 1) { return ejecutar(hijos[0]); } else { Object de = ejecutar(hijos[1]); return (-1 * Convert.ToDouble(de)); } } case "I": { if (hijos.Count() == 1) { return ejecutar(hijos[0]); } else { Object iz = ejecutar(hijos[0]); Object de = ejecutar(hijos[2]); if (hijos[1].ToString().Contains("--")) { String[] n1 = hijos[0].ToString().Split(new Char[] { ' ' }); NodoVar v = frmCompi.variables.buscar(n1[0]); if (v != null) { v.valor = Convert.ToDouble(v.valor) - 1; return v.valor; } else { MessageBox.Show("VAriable no declarada"); return null; } } else { String[] n1 = hijos[0].ToString().Split(new Char[] { ' ' }); NodoVar v = frmCompi.variables.buscar(n1[0]); if (v != null) { v.valor = Convert.ToDouble(v.valor) + 1; return v.valor; } else { MessageBox.Show("VAriable no declarada"); return null; } } } } case "J": { if (hijos[0].ToString().Contains("id")) { String[] n1 = hijos[0].ToString().Split(new Char[] { ' ' }); NodoVar v = frmCompi.variables.buscar(n1[0]); if (v != null) { return v.valor; } else { MessageBox.Show("variable no declarada"); return null; } } else if (hijos[0].ToString().Contains("entero")) { String[] n1 = hijos[0].ToString().Split(new Char[] { ' ' }); return Convert.ToDouble(n1[0]); } else if (hijos[0].ToString().Contains("doble")) { String[] n1 = hijos[0].ToString().Split(new Char[] { ' ' }); return Convert.ToDouble(n1[0]); } else { return ejecutar(hijos[0]); } } case "FUN": { Object e = ejecutar(hijos[1]); if (hijos[0].ToString().Contains("cos")) { return Math.Cos(Convert.ToDouble(e)); } else if (hijos[0].ToString().Contains("sin")) { return Math.Sin(Convert.ToDouble(e)); } else { return Math.Tan(Convert.ToDouble(e)); } } case "CON": { if (hijos[0].ToString().Contains("pi")) { return 3.1416; } else { return 2.7182; } } } return null; }
public ListVar() { raiz = ultimo = null; }