我试图了解如何使用 ParseTreePattern
为了从我的输入中获取特定元素。
所以首先我尝试了以下方法:
ParseTreePattern p = parser.compileParseTreePattern("<NODE>", GraphParser.RULE_input);
哪里NODE
是我语法中的一个标记,我最终得到 p>
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 库的一部分)。
最佳答案
这意味着您的语法是使用 ANTLR 4.1 生成的。我们非常小心地确保从 4.1 升级到 4.2 的用户的现有代码不会中断,但要使用 4.2 中的新功能,您需要使用最新版本的工具重新生成解析器。
如果您还没有这样做,我强烈建议您将解析器生成过程集成到您的构建系统(例如 Maven、Ant)中,以确保始终使用正确的版本。
关于java - Antlr异常: there is no serialized ATN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687043/