public static Pair <ITree, CommonTokenStream> Parse( ParseRuleSelector parseRuleSelector, string text) { var lex = ParseHelper.NewLexer(new CaseInsensitiveInputStream(text)); var tokens = new CommonTokenStream(lex); var g = ParseHelper.NewParser(tokens); var ctx = parseRuleSelector.InvokeParseRule(g); return(new Pair <ITree, CommonTokenStream>(ctx, tokens)); }
/// <summary> /// Parse expression using the rule the ParseRuleSelector instance supplies. /// </summary> /// <param name="expression">text to parse</param> /// <param name="parseRuleSelector">parse rule to select</param> /// <param name="addPleaseCheck">true to include depth paraphrase</param> /// <param name="eplStatementErrorMsg">text for error</param> /// <param name="rewriteScript">whether to rewrite script expressions</param> /// <returns>AST - syntax tree</returns> /// <throws>EPException when the AST could not be parsed</throws> /// <throws>StatementSpecCompileSyntaxException syntax exceptions</throws> public static ParseResult Parse( string expression, string eplStatementErrorMsg, bool addPleaseCheck, ParseRuleSelector parseRuleSelector, bool rewriteScript) { if (Log.IsDebugEnabled) { Log.Debug(".parse Parsing expr=" + expression); } var input = new CaseInsensitiveInputStream(expression); var lex = NewLexer(input); var tokens = new CommonTokenStream(lex); var parser = ParseHelper.NewParser(tokens); ITree tree; try { tree = parseRuleSelector.InvokeParseRule(parser); } catch (RecognitionException ex) { tokens.Fill(); if (rewriteScript) { if (IsContainsScriptOrClassExpression(tokens)) { return HandleScriptAndClassRewrite(tokens, eplStatementErrorMsg, addPleaseCheck, parseRuleSelector); } } Log.Debug("Error parsing statement [" + expression + "]", ex); throw ExceptionConvertor.ConvertStatement(ex, eplStatementErrorMsg, addPleaseCheck, parser); } catch (Exception e) { try { tokens.Fill(); } catch (Exception) { Log.Debug("Token-fill produced exception: " + e.Message, e); } if (Log.IsDebugEnabled) { Log.Debug("Error parsing statement [" + eplStatementErrorMsg + "]", e); } if (e.InnerException is RecognitionException recognitionException) { if (rewriteScript) { if (IsContainsScriptOrClassExpression(tokens)) { return HandleScriptAndClassRewrite(tokens, eplStatementErrorMsg, addPleaseCheck, parseRuleSelector); } } throw ExceptionConvertor.ConvertStatement(recognitionException, eplStatementErrorMsg, addPleaseCheck, parser); } throw; } // if we are re-writing scripts and contain a script, then rewrite if (rewriteScript && IsContainsScriptOrClassExpression(tokens)) { return HandleScriptAndClassRewrite(tokens, eplStatementErrorMsg, addPleaseCheck, parseRuleSelector); } if (Log.IsDebugEnabled) { Log.Debug(".parse Dumping AST..."); ASTUtil.DumpAST(tree); } var expressionWithoutAnnotation = expression; if (tree is EsperEPL2GrammarParser.StartEPLExpressionRuleContext) { var epl = (EsperEPL2GrammarParser.StartEPLExpressionRuleContext) tree; expressionWithoutAnnotation = GetNoAnnotation(expression, epl.annotationEnum(), tokens); } return new ParseResult( tree, expressionWithoutAnnotation, tokens, EmptyList<string>.Instance, EmptyList<string>.Instance); }