public MMMLInterpreter(string filename) { var sr = new StreamReader(filename); var ais = new AntlrInputStream(sr.ReadToEnd()); var lexer = new MMMLLexer(ais); var cts = new CommonTokenStream(lexer); var parser = new MMMLParser(cts); var prog = parser.program(); //var visitor = new MMMLTreeVisitor(); //Console.WriteLine("Olha Soh! {0}", visitor.Visit(prog)); if (parser.nerrors > 0) { Console.WriteLine("\nCompilation Failed ({0} errors)", parser.nerrors); return; } foreach (SymbolEntry <FunctionEntry> entry in parser.functionTable) { var plist = from p in entry.symbol.plist select p.name + ": " + p.type.ToString(); var plist_str = String.Join(", ", plist); Console.WriteLine("Function {0}: ({1}) -> {2}", entry.symbol.name, plist_str, entry.symbol.retType); } //foreach (var entry in parser.functionTable.st) Console.WriteLine("The program from {0} is {1}", filename, prog.ToStringTree(parser)); }
public Expressao() { try { string caminhoApp = AppDomain.CurrentDomain.BaseDirectory; caminhoApp = caminhoApp.Substring(0, caminhoApp.IndexOf("bin") - 1); string arquivo = Path.Combine(caminhoApp, "entrada.txt"); StreamReader file = new StreamReader(arquivo); lexer = new MMMLLexer(new AntlrInputStream(file)); CommonTokenStream tokens = new CommonTokenStream(lexer); parser = new MMMLParser(tokens); var res = parser.funcbody(); string msgRetorno = string.Empty; if (parser.qtdErro > 0) { msgRetorno = "Expressão inválida"; } else { Stack <object> pilhaSimbolo = parser.PilhaSimbolo; if (pilhaSimbolo != null && pilhaSimbolo.Count >= 1) { object resultado = pilhaSimbolo.Pop(); msgRetorno = string.Format("Resultado final: {0} (type {1})", resultado, res.oType.Name); } } if (!string.IsNullOrEmpty(msgRetorno)) { Console.WriteLine(msgRetorno); Console.WriteLine("-------------------------------"); } file.Close(); } catch (Exception ex) { Console.WriteLine("Erro: " + ex); return; } }