【发布时间】:2022-01-11 05:03:12
【问题描述】:
我一直无法让生成的解析器在 Java 中为 ANTLR 4.8 工作。这个问题还有其他答案,但似乎 ANTLR 自 4.7 以来发生了变化,所有其他答案都在此更改之前。我的代码是:
String formula = "(fm.a < fm.b) | (fm.a = fm.b)";
CharStream input = CharStreams.fromString(formula);
Antlr.LogicGrammerLexer lexer = new Antlr.LogicGrammerLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
Antlr.LogicGrammerParser parser = new Antlr.LogicGrammerParser(tokens);
ParseTree pt = new ParseTree(parser);
它似乎正在正确地将公式读入 CharStream,但我过去尝试做的任何事情都根本不起作用。例如,如果我尝试打印解析树,则不会打印任何内容。以下行将不打印任何内容:
System.out.println(lexer._input.getText(new Interval(0, 100)));
任何建议表示赞赏。
编辑:添加了语法文件:
grammar LogicGrammer;
logicalStmt: BOOL_EXPR | '('logicalStmt' '*LOGIC_SYMBOL' '*logicalStmt')';
BOOL_EXPR: '('IDENTIFIER' '*MATH_SYMBOL' '*IDENTIFIER')';
IDENTIFIER: CHAR+('.'CHAR*)*;
CHAR: 'a'..'z' | 'A'..'Z' | '1'..'9';
LOGIC_SYMBOL: '~' | '|' | '&';
MATH_SYMBOL: '<' | '≤' | '=' | '≥' | '>';
【问题讨论】: