当我在 Antlr 中导入词法分析器时,为什么会收到 NullPointerException?
我正在使用 antlr 3 和 Antlrworks。这是我的设置:
lexer Base //包含基本标记 - 如 WS、数字等。
lexer Specific //包含我的语言特定标记 - 并且源自 Base 词法
分析器特定 //我的语言组合语法的解析器
->导入特定的词法分析器和特定的解析器
当我生成时,我总是得到一个 NPE(在 Java 中)。原因是生成的特定词法分析器中对 Base 词法分析器的引用未初始化。
我错过了什么吗?
I am using antlr 3 and Antlrworks. Here is my setup:
lexer Base //contains basic tokens - like WS, number etc.
lexer Specific //contains my language specific tokens - AND derives from Base lexer
parser specific //parser for my language
combined grammer -> imports specific lexer and specific parser
When I generate, I always get a NPE (in Java). The reason is that the reference to the Base lexer in the generated specific lexer is not initialized.
Am I missing something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果不查看如何导入语法,就无法判断。
请记住:
在您的情况下,它看起来像:
BaseLexer.g
SpecificLexer.g
SpecificParser.g
Combined.g
并对其进行全部测试,请使用该类:
现在生成词法分析器和解析器并运行
Main
类:它将在您的控制台上打印以下内容:
还使用 ANTLRWorks 1.4.3 进行了测试。
Impossible to tell without seeing how you're importing the grammars.
Bear in mind that:
In your case, that would look like:
BaseLexer.g
SpecificLexer.g
SpecificParser.g
Combined.g
and to test it all, use the class:
Now generate the lexers and parsers and run the
Main
class:which will print the following to your console:
Also tested with ANTLRWorks 1.4.3.
我在使用antlr 3.2时遇到了同样的问题。升级并不简单,因为我面临内存不足问题。
我尝试了不同的解决方案,例如在解析器语法中直接导入两个词法分析器语法,但没有成功。最后,我必须在每个特定词法分析器语法中复制基本词法分析器语法。
I have encountered the same problem using antlr 3.2. Upgrading is not straightforward, because I'm faced with OutOfMemory issues.
I tried different solution, e.g. direct import of both lexer grammars in the parser grammar, without success. In the end I had to copy the Base lexer grammar in every Specific lexer grammar.