private static Expressie doParse(final String expressieString, final Context context) {
// TEAMBRP-2535 de expressie syntax kan niet goed omgaan met een string waarachter ongedefinieerde velden staan.
// Door haakjes toe te voegen zal dan een fout gesignaleerd worden, aangezien de content dan niet meer precies
// gematched kan worden.
final String expressieStringMetHaakjes = String.format("(%s)", expressieString);
// Parsing gebeurt met een door ANTLR gegenereerde visitor. Om die te kunnen gebruiken, moet een treintje
// opgetuigd worden (String->CharStream->Lexer->TokenStream).
final CharStream cs = CharStreams.fromString(expressieStringMetHaakjes);
final ParserErrorListener parserErrorListener = new ParserErrorListener();
final BRPExpressietaalLexer lexer = new BRPExpressietaalLexer(cs);
// verwijdert de interne listener van de lexer die naar system/out/err wegschrijft
// expressies als ***bla*** logt bijvoorbeeld unrecognized token errors naar system/out
// in plaats hiervan neem een eigen error listener op.
lexer.removeErrorListeners();
lexer.addErrorListener(parserErrorListener);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final BRPExpressietaalParser parser = new BRPExpressietaalParser(tokens);
parser.getInterpreter().setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);
// Verwijder bestaande (default) error listeners en voeg de eigen error listener toe.
parser.removeErrorListeners();
parser.addErrorListener(parserErrorListener);
// Maak de parse tree. Hier gebeurt het feitelijke parsing.
final BRPExpressietaalParser.Brp_expressieContext tree = parser.brp_expressie();
// Maak een visitor voor parsing.
final ExpressieVisitor visitor = new ExpressieVisitor(context);
// De visitor zet een parse tree om in een Expressie. Tenzij er een fout optreedt.
return visitor.visit(tree);
}
ExpressieParser.java 文件源码
java
阅读 22
收藏 0
点赞 0
评论 0
项目:OperatieBRP
作者:
评论列表
文章目录