示例#1
0
 public void addValor(NodoVar v)
 {
     NodoVar a = buscar(v.nombre);
     if (a != null)
     {
         a.valor = v.valor;
     }
 }
示例#2
0
 public void insertar(NodoVar nuevo)
 {
     if (raiz == null) { raiz = ultimo = nuevo; }
     else
     {
         ultimo.sig = nuevo;
         nuevo.ant = ultimo;
         ultimo = nuevo;
     }
 }
示例#3
0
        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;
        }
示例#4
0
 public ListVar()
 {
     raiz = ultimo = null;
 }