我正在尝试了解如何使用ParseTreePattern
来获取输入中的特定元素。
所以首先我尝试了以下内容:
ParseTreePattern p = parser.compileParseTreePattern("<NODE>", GraphParser.RULE_input);
其中NODE
是我语法中的一个标记,最后是
Unknown token NODE in pattern: <NODE>
那么为什么这个令牌不被识别,因为它是我语法的一部分?
当我的规则名称为<quantifier>
的树模式再次成为我的语法的一部分时,我最终得到了:
Exception in thread "main" java.lang.UnsupportedOperationException: there is no serialized ATN
at org.antlr.v4.runtime.Recognizer.getSerializedATN(Recognizer.java:134)
at org.antlr.v4.runtime.Parser.getATNWithBypassAlts(Parser.java:458)
at org.antlr.v4.runtime.tree.pattern.ParseTreePatternMatcher.tokenize(ParseTreePatternMatcher.java:414)
at org.antlr.v4.runtime.tree.pattern.ParseTreePatternMatcher.compile(ParseTreePatternMatcher.java:218)
at org.antlr.v4.runtime.Parser.compileParseTreePattern(Parser.java:506)
at org.antlr.v4.runtime.Parser.compileParseTreePattern(Parser.java:492)
at main.Main.main(Main.java:47)
那么第二个错误是什么意思?只是为了澄清我使用的是ANTLR 4.2(显然ParseTreePattern
不是4.1库的一部分)。
答案 0 :(得分:1)
这意味着您的语法是使用ANTLR 4.1生成的。我们非常谨慎地确保用户从4.1升级到4.2的现有代码不会中断,但要使用4.2中的新功能,您需要使用最新版本的工具重新生成解析器。
如果您还没有这样做,我强烈建议您将解析器生成过程集成到您的构建系统(例如Maven,Ant)中,以确保正确的版本始终是正在使用的版本。