Exemple #1
0
 public NodoExpresion(NodoExpresion Nodo)
 {
     this.Booleano  = Nodo.Booleano;
     this.Cadena    = Nodo.Cadena;
     this.Columna   = Nodo.Columna;
     this.Derecha   = Nodo.Derecha;
     this.Izquierda = Nodo.Izquierda;
     this.Linea     = Nodo.Linea;
     this.Llamada   = Nodo.Llamada;
     this.Nombre    = Nodo.Nombre;
     this.Numero    = Nodo.Numero;
     this.Tipo      = Nodo.Tipo;
 }
Exemple #2
0
        public NodoExpresion(String nombre, String tipo, NodoExpresion izq, NodoExpresion der, Object valor, int linea, int columna)
        {
            this.Nombre    = nombre;
            this.Derecha   = der;
            this.Izquierda = izq;
            this.Tipo      = tipo;
            this.Linea     = linea;
            this.Columna   = columna;


            switch (Tipo)
            {
            case Constante.TNumber:
                NodoExpresion auxn = (NodoExpresion)valor;

                this.Booleano  = auxn.Booleano;
                this.Cadena    = auxn.Cadena;
                this.Columna   = auxn.Columna;
                this.Derecha   = auxn.Derecha;
                this.Izquierda = auxn.Izquierda;
                this.Linea     = auxn.Linea;
                this.Llamada   = auxn.Llamada;
                this.Nombre    = auxn.Nombre;
                this.Numero    = auxn.Numero;
                this.Tipo      = auxn.Tipo;
                break;

            case Constante.Numero:
                Numero       = Double.Parse(((ParseTreeNode)valor).Token.ValueString);
                Tipo         = Constante.TNumber;
                Cadena       = ((ParseTreeNode)valor).Token.ValueString;
                this.Linea   = ((ParseTreeNode)valor).Token.Location.Line + 1;
                this.Columna = ((ParseTreeNode)valor).Token.Location.Column + 1;
                break;

            case Constante.TString:
                NodoExpresion auxs = (NodoExpresion)valor;

                this.Booleano  = auxs.Booleano;
                this.Cadena    = auxs.Cadena;
                this.Columna   = auxs.Columna;
                this.Derecha   = auxs.Derecha;
                this.Izquierda = auxs.Izquierda;
                this.Linea     = auxs.Linea;
                this.Llamada   = auxs.Llamada;
                this.Nombre    = auxs.Nombre;
                this.Numero    = auxs.Numero;
                this.Tipo      = auxs.Tipo;
                break;

            case Constante.Cadena:
                this.Cadena  = ((ParseTreeNode)valor).Token.ValueString;
                Tipo         = Constante.TString;
                this.Linea   = ((ParseTreeNode)valor).Token.Location.Line + 1;
                this.Columna = ((ParseTreeNode)valor).Token.Location.Column + 1;
                break;

            case Constante.TBool:
                NodoExpresion auxb = (NodoExpresion)valor;

                this.Booleano  = auxb.Booleano;
                this.Cadena    = auxb.Cadena;
                this.Columna   = auxb.Columna;
                this.Derecha   = auxb.Derecha;
                this.Izquierda = auxb.Izquierda;
                this.Linea     = auxb.Linea;
                this.Llamada   = auxb.Llamada;
                this.Nombre    = auxb.Nombre;
                this.Numero    = auxb.Numero;
                this.Tipo      = auxb.Tipo;
                break;

            case Constante.TVerdadero:
                Booleano     = true;
                Tipo         = Constante.TBool;
                Numero       = 1;
                Cadena       = "1";
                this.Linea   = ((ParseTreeNode)valor).Token.Location.Line + 1;
                this.Columna = ((ParseTreeNode)valor).Token.Location.Column + 1;
                break;

            case Constante.TFalso:
                Booleano     = false;
                Tipo         = Constante.TBool;
                Numero       = 0;
                Cadena       = "0";
                this.Linea   = ((ParseTreeNode)valor).Token.Location.Line + 1;
                this.Columna = ((ParseTreeNode)valor).Token.Location.Column + 1;
                break;

            case Constante.Id:
                Cadena       = valor.ToString();
                Tipo         = Constante.Id;
                this.Linea   = ((ParseTreeNode)valor).Token.Location.Line + 1;
                this.Columna = ((ParseTreeNode)valor).Token.Location.Column + 1;
                break;

            case Constante.TMetodo:
                FLlamada fllamadafuncion = new FLlamada();

                ParseTreeNode Nodo = (ParseTreeNode)valor;
                //enviamos a recorrer si tiene parametros
                if (Nodo.ChildNodes[1].ChildNodes.Count > 0)
                {
                    foreach (ParseTreeNode hijo in Nodo.ChildNodes[1].ChildNodes[0].ChildNodes)
                    {
                        fllamadafuncion.Parametros.Add(new FExpresion(hijo));
                    }
                }
                Llamada      = fllamadafuncion;
                this.Linea   = Nodo.ChildNodes[0].Token.Location.Line + 1;
                this.Columna = Nodo.ChildNodes[0].Token.Location.Column + 1;
                break;
            }
        }
Exemple #3
0
        public void Mostrar(int Fila, int Columna, String ruta)
        {
            String cadena_nueva = "";
            String numero       = "";
            bool   posicion     = false;

            for (int i = 0; i < Cadena.Length && TitusNotifiaciones.ContarErrores() == 0; i++)
            {
                char letra = Cadena[i];
                if (posicion)
                {
                    if (letra == '}')
                    {
                        posicion = false;
                        try
                        {
                            int pos = Int32.Parse(numero);
                            if (pos <= Parametros.Count - 1)
                            {
                                NodoExpresion val = Parametros[pos].ResolverExpresion(Incerteza, ruta);
                                if (TitusNotifiaciones.ContarErrores() == 0)
                                {
                                    if (val.Tipo == Constante.TNumber)
                                    {
                                        cadena_nueva = cadena_nueva + val.Numero.ToString();
                                    }
                                    else if (val.Tipo == Constante.TString)
                                    {
                                        cadena_nueva = cadena_nueva + val.Cadena;
                                    }
                                    else
                                    {
                                        cadena_nueva = cadena_nueva + val.Cadena;
                                    }
                                }
                            }
                            else
                            {
                                TabError Error = new TabError();
                                Error.InsertarFila(Constante.ErroEjecucion, "Acceso fuera de rango", "pendient", Fila.ToString(), Columna.ToString());
                                TitusNotifiaciones.setDatosErrores(Error);
                            }
                        }
                        catch
                        {
                            TabError Error = new TabError();
                            Error.InsertarFila(Constante.ErroEjecucion, "El valor debe ser numerico mayor o igual a 0", "pendient", Fila.ToString(), Columna.ToString());
                            TitusNotifiaciones.setDatosErrores(Error);
                        }
                    }
                    else
                    {
                        numero = numero + letra;
                    }
                }
                else
                {
                    if (letra == '{')
                    {
                        posicion = true;
                        numero   = "";
                    }
                    else
                    {
                        cadena_nueva = cadena_nueva + letra;
                    }
                }
            }
            if (TitusNotifiaciones.ContarErrores() == 0)
            {
                TitusNotifiaciones.ImprimirConsola(cadena_nueva);
            }
        }