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; }
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; } }
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); } }