private static void Main(string[] args) { var visitor = new CmmExprVisitor(); while (true) { if (!Console.KeyAvailable) { Thread.Sleep(10); continue; } var input = Console.ReadLine(); if (input == "end") { break; } // var stream = new AntlrInputStream(input); // var lexer = new LuaLexer(stream); // var tokens = new CommonTokenStream(lexer); // var parser = new LuaParser(tokens); // var tree = parser.chunk(); // Console.WriteLine(tree.ToStringTree(parser)); var stream = new AntlrInputStream(input); var lexer = new CMMLexer(stream); var tokens = new CommonTokenStream(lexer); var parser = new CMMParser(tokens); var tree = parser.chunk(); Console.WriteLine(tree.ToStringTree(parser)); // var lexer = new CMMLexer(stream); // var tokens = new CommonTokenStream(lexer); // var parser = new CMMParser(tokens); // var tree = parser.expression(); // Console.WriteLine(tree.ToStringTree(parser)); // try // { // var expr = visitor.Visit(tree); // if (expr == null) // { // Console.WriteLine("null"); // continue; // } // // var result = Expression.Lambda(expr).Compile(); // Console.WriteLine(result.DynamicInvoke()); // // Console.WriteLine(expr.ToString()); // } // catch (Exception e) // { // Console.WriteLine(e); // } } }
public void RunParser(String input) { // String example="write(\"CMMM语言while循环示例:\");int a = 10;while (a <> 0) {a = a - 1;write(a);}"; // input = example; ICharStream stream = CharStreams.fromstring(input); ITokenSource lexer = new CMMLexer(stream); ITokenStream tokens = new CommonTokenStream(lexer); CMMParser parser = new CMMParser(tokens); parser.BuildParseTree = true; IParseTree tree = parser.statements(); var visitor = new RefPhase(); visitor.outputStream = this; visitor.Visit(tree); }