如何模块化JavaCC语法文件(.jj)?

时间:2014-11-02 10:22:20

标签: java javascript javacc javaparser

我正在学习编译器构造,并希望使用JavaCC实现JavaScript语法。

(我已经编写了自己的JavaScript CodeModel,允许以编程方式构建JavaScript代码,现在我想为此编写一个基于JavaCC的解析器。)

我的问题是,有没有办法将JavaCC语法(.jj - 文件)模块化为多个文件?

我对JavaParser有非常好的经验,所以我正在学习他们的java_1_5.jj语法。但是,这是一个3000+ LoC文件,有点难以理解。

我想将语法文件分成几个部分,以便更容易理解和理解。我的谷歌" javacc modular"," javacc包括"," javacc import"给我带来了一些神秘的结果,并没有多大帮助。

具体而言,我如何将IDENTIFIERlines 380-1081)的定义移至另一个文件?

3 个答案:

答案 0 :(得分:1)

JavaCC无法内置模块化.jj文件。最好的办法通常是使用JJT,因为这允许您将所有操作移出语法文件。如果您不想使用JJT,那么下一个最好的方法可能是使用构建器模式。

如果您只想要一个包含工具,可以使用许多预处理器。

答案 1 :(得分:0)

是的,您可以通过创建对象来创建各种类并传递参数,并在javacc文件内的try catch中将其发送到对象,从而使它们看起来像模块化。

答案 2 :(得分:0)

我知道这个问题是六年前提出的,但是我会回答,因为人们会不时地寻找答案。

JavaCC的最高级版本是JavaCC 21,而JavaCC 21确实(其中包括)INCLUDE directive正是您正在寻找的{

JavaCC21实际上还有许多其他功能,这些功能在旧版JavaCC项目中不存在。这是一个大问题:修复了长期存在的嵌套嵌套先行无法正常工作的错误。参见here.