private static string ObtenerE(ParseTreeNode root, string H_AMBITO) { if (root.ChildNodes.Count == 3) { //E.Rule = E + mas + E // | E + menos + E // | E + por + E // | E + dividir + E // | E + modulo + E // | E + potencia + E string valor1 = ObtenerE(root.ChildNodes[0], H_AMBITO); string valor2 = ObtenerE(root.ChildNodes[2], H_AMBITO); if (valor1.Equals("") || valor2.Equals("")) { return(""); } int a = EnumTipoDato(valor1); int b = EnumTipoDato(valor2); int columna = root.ChildNodes[1].Token.Location.Column; int fila = root.ChildNodes[1].Token.Location.Line; if (root.ChildNodes[1].Token.ValueString.Equals("+")) { return(SUMA[a, b]); } if (root.ChildNodes[1].Token.ValueString.Equals("-")) { return(RESTA[a, b]); } if (root.ChildNodes[1].Token.ValueString.Equals("*")) { return(MULTIPLICACION[a, b]); } if (root.ChildNodes[1].Token.ValueString.Equals("/")) { return(DIVISION[a, b]); } if (root.ChildNodes[1].Token.ValueString.Equals("%")) { return(MODULO[a, b]); } if (root.ChildNodes[1].Token.ValueString.Equals("^")) { return(POTENCIA[a, b]); } } else { //E if (root.ChildNodes[0].Token == null) { return(ObtenerE(root.ChildNodes[0], H_AMBITO)); } //rtrue if (root.ChildNodes[0].Token.ValueString.ToLower().Equals("true")) { return("boolean"); } //rfalse if (root.ChildNodes[0].Token.ValueString.ToLower().Equals("false")) { return("boolean"); } if (root.ChildNodes[0].Term.Name.Equals("id")) { //id SingletonListas s = SingletonListas.GetInstance(); Variable v = s.GetVariable(root.ChildNodes[0].Token.ValueString, H_AMBITO); if (v != null) { return(v.Tipo); } else { s.NuevoError("Semántico", root.ChildNodes[0].Token.ValueString, root.ChildNodes[0].Token.Location.Line, root.ChildNodes[0].Token.Location.Column, $"La variable {root.ChildNodes[0].Token.ValueString} no se encuentra declarada"); } } //numentero //numdecimal //cadena //caracter return(root.ChildNodes[0].Term.Name.ToLower()); } return(""); }