[英]How to modularize a JavaCC grammar file (.jj)?
我正在学习编译器构造并希望使用 JavaCC 实现JavaScript语法。
(我已经编写了自己的JavaScript CodeModel ,它允许以编程方式构建 JavaScript 代码,现在我想为此编写一个基于 JavaCC 的解析器对应物。)
我的问题是,有没有办法将 JavaCC 语法( .jj
-file)模块化为几个文件?
我有一个很好的经验JavaParser类,所以我从他们的学习java_1_5.jj
语法。 然而,这是一个 3000+ LoC 文件,有点难以理解。
我想把语法文件分成几个部分,这样更容易处理和理解。 我在 Google 上搜索“javacc 模块化”、“javacc 包含”、“javacc 导入”给我带来了一些没有多大帮助的神秘结果。
具体来说,我如何将IDENTIFIER
( 第 380-1081 行)的定义移动到另一个文件?
JavaCC 没有内置的方法来模块化 .jj 文件。 最好的做法是经常使用 JJT,因为这允许您将所有操作移出语法文件。 如果您不想使用 JJT,那么下一个最好的方法可能是使用构建器模式。
如果您只想要一个包含工具,可以使用许多预处理器。
是的,您可以通过创建对象来创建各种类并传递参数,并将其发送到 javacc 文件中的 try catch 中的对象,通过它看起来模块化。
我知道这个问题是在将近六年前提出的,但我还是会回答,因为人们会时不时地寻找答案。
JavaCC 的最高级版本是JavaCC 21 ,JavaCC 21 确实有(除其他外)一个INCLUDE 指令,据我所知,它正是您正在寻找的。
实际上,JavaCC21 中还有很多其他功能在遗留 JavaCC 项目中不存在。 这是一个大问题:嵌套句法前瞻无法正常工作的长期错误已得到修复。 看到这里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.