private void Load(AntlrInputStream input) { var scopedTypeMap = new TypeMap(_loader, _rootTypeMap); var parserContext = new ParserContext(_loader, scopedTypeMap); var listener = new RuleSharpParserListener(parserContext, _defaultRuleSet); var lexer = new RuleSharpLexer(input); var tokenStream = new CommonTokenStream(lexer); var walker = new ParseTreeWalker(); try { var parser = new RuleSharpParser(tokenStream); parser.ErrorHandler = new BailErrorStrategy(); var tree = parser.compilation_unit(); walker.Walk(listener, tree); } catch (ParseCanceledException pce) { var re = (RecognitionException)pce.InnerException; var location = tokenStream.GetSourceLocation(re.Context); throw new RulesParseException("Failed to parse rules", location, re); } catch (RecognitionException re) { var location = tokenStream.GetSourceLocation(re.Context); throw new RulesParseException("Failed to parse rules", location, re); } catch (InternalParseException pe) { var location = tokenStream.GetSourceLocation(pe.Context); throw new RulesParseException(pe.Message, location, pe.InnerException); } }
private static IParseTree ParseTree(AntlrInputStream inputStream) { try { var lexer = new RuleSharpLexer(inputStream); var tokens = new CommonTokenStream(lexer); var parser = new RuleSharpParser(tokens); IParseTree tree = parser.compilation_unit(); return(tree); } catch (RecognitionException e) { throw new CompilationException("Failed to compile rules", e.Context, e); } }