public static CommonTreeNodeStream parseFile(string fullName) { if (cfg.Verbosity > 2) Console.WriteLine("Parsing " + Path.GetFileName(fullName)); ICharStream input = new ANTLRFileStream(fullName); PreProcessor lex = new PreProcessor(); lex.AddDefine(cfg.MacroDefines); lex.CharStream = input; lex.TraceDestination = Console.Error; CommonTokenStream tokens = new CommonTokenStream(lex); // if (tokens.LT(1).Type == TokenTypes.EndOfFile) // { // Console.WriteLine("File is empty"); // return null; // } csParser p = new csParser(tokens); p.TraceDestination = Console.Error; p.IsJavaish = cfg.InternalIsJavaish; csParser.compilation_unit_return parser_rt = p.compilation_unit(); if (parser_rt == null || parser_rt.Tree == null) { if (lex.FoundMeat) { Console.WriteLine("No Tree returned from parsing! (Your rule did not parse correctly)"); } else { // the file was empty, this is not an error. } return null; } CommonTreeNodeStream nodes = new CommonTreeNodeStream(parser_rt.Tree); nodes.TokenStream = tokens; return nodes; }
public CommonTree parseString(string startRule, string inStr, bool includeNet) { if (Cfg.Verbosity > 5) Console.WriteLine("Parsing fragment "); ICharStream input = new ANTLRStringStream(inStr); PreProcessor lex = new PreProcessor(); lex.AddDefine(Cfg.MacroDefines); lex.CharStream = input; lex.TraceDestination = Console.Error; CommonTokenStream tokens = new CommonTokenStream(lex); csParser p = new csParser(tokens); p.TraceDestination = Console.Error; p.IsJavaish = true; // Try and call a rule like CSParser.namespace_body() // Use reflection to find the rule to use. MethodInfo mi = p.GetType().GetMethod(startRule); if (mi == null) { throw new Exception("Could not find start rule " + startRule + " in csParser"); } ParserRuleReturnScope csRet = (ParserRuleReturnScope) mi.Invoke(p, new object[0]); CommonTreeNodeStream csTreeStream = new CommonTreeNodeStream(csRet.Tree); csTreeStream.TokenStream = tokens; JavaMaker javaMaker = new JavaMaker(csTreeStream); javaMaker.TraceDestination = Console.Error; javaMaker.Cfg = Cfg; javaMaker.IsJavaish = true; javaMaker.InitParser(); // Try and call a rule like CSParser.namespace_body() // Use reflection to find the rule to use. mi = javaMaker.GetType().GetMethod(startRule); if (mi == null) { throw new Exception("Could not find start rule " + startRule + " in javaMaker"); } TreeRuleReturnScope javaSyntaxRet = (TreeRuleReturnScope) mi.Invoke(javaMaker, new object[0]); CommonTree retAST = (CommonTree)javaSyntaxRet.Tree; if (includeNet) { CommonTreeNodeStream javaSyntaxNodes = new CommonTreeNodeStream(retAST); javaSyntaxNodes.TokenStream = csTreeStream.TokenStream; NetMaker netMaker = new NetMaker(javaSyntaxNodes); netMaker.TraceDestination = Console.Error; netMaker.Cfg = Cfg; netMaker.AppEnv = AppEnv; netMaker.IsJavaish = true; netMaker.InitParser(); retAST = (CommonTree)netMaker.class_member_declarations().Tree; // snaffle additional imports this.AddToImports(netMaker.Imports); } return retAST; }