public List <String> Evaluar(String codigo) { var parser = new AnalizadorSintactico(codigo); var arbol = parser.Analizar(); TokenList = parser.TokenList; ListaExpresiones = new List <Token>(); //for (int i = 0; i < TokenList.Count; i++) //{ // if (TokenList[i].Tipo == TipoSintaxis.IntegerKeyword || // TokenList[i].Tipo == TipoSintaxis.FloatKeyword || // TokenList[i].Tipo == TipoSintaxis.StringKeyword) // { // // Current int // // i++ -> Current = // // i++ -> Current Identifier/Number. // // i++ -> Current ; // var id = TokenList[i++]; // i++;// Equals token. // var actual = TokenList[++i]; // while (actual.Tipo != TipoSintaxis.TokenPuntoyComa) // { // ListaExpresiones.Add(actual); // actual = TokenList[++i]; // } // } //} // Agregamos los errores sintacticos. Diagnostico.AddRange(arbol.Diagnostico); // Generate Symbols table var tablaSimbolosSintactica = TablaSintaxis = parser.TablaSimbolos; foreach (var registro in tablaSimbolosSintactica) { var token = (Token)registro.Value; if (token.Tipo == TipoSintaxis.TokenInteger || token.Tipo == TipoSintaxis.LongKeyword || token.Tipo == TipoSintaxis.TokenDecimal || token.Tipo == TipoSintaxis.DoubleKeyword) { if (token.Value is ExpresionNumericaInvalida) { continue; } try { var result = EvaluarExpresionAritmetica((Expresion)token.Value, token.Tipo); if ((result as Token).Tipo == TipoSintaxis.TokenInvalido) { continue; } // Si existe ya ese identificador, marcar error en cualquier caso invalido. this.TablaSimbolos[registro.Key] = result; } catch (Exception ex) { } } else if (token.Tipo == TipoSintaxis.BoolKeyword) { var result = EvaluarExpresionLogica((Expresion)token.Value); this.TablaSimbolos[registro.Key] = result; } else if (token.Tipo == TipoSintaxis.StringKeyword) { if (token.Value is ExpresionStringInvalida) { continue; } var result = EvaluarExpresionString(token.Value as Expresion); this.TablaSimbolos[registro.Key] = result; } } return(Diagnostico); }
public static ArbolSintactico Analizar(string texto) { var analizadorSintactico = new AnalizadorSintactico(texto); return(analizadorSintactico.Analizar()); }