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

如何模块化JavaCC语法文件(.jj)?,java,javascript,javacc,javaparser,Java,Javascript,Javacc,Javaparser,我正在学习编译器构造,希望使用JavaCC实现语法 (我已经编写了自己的,它允许JavaScript代码的编程构造,现在我想为此编写一个基于JavaCC的解析器对应物。) 我的问题是,有没有办法将JavaCC语法(.jj-file)模块化为几个文件? 我有很好的英语学习经验,所以我在学习他们的语法。然而,这是一个3000+LoC文件,有点难以理解 我想把语法文件分成几个部分,以便更容易处理和理解。我在“javaccmodular”、“javaccinclude”、“javaccimport”上的

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

(我已经编写了自己的,它允许JavaScript代码的编程构造,现在我想为此编写一个基于JavaCC的解析器对应物。)

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

我有很好的英语学习经验,所以我在学习他们的语法。然而,这是一个3000+LoC文件,有点难以理解

我想把语法文件分成几个部分,以便更容易处理和理解。我在“javaccmodular”、“javaccinclude”、“javaccimport”上的谷歌搜索给我带来了一些神秘的结果,但没有多大帮助


具体来说,如何将
标识符的定义移动到另一个文件中?

JavaCC中没有内置的方法来模块化.jj文件。最好的做法是经常使用JJT,因为这允许您将所有操作移出语法文件。如果您不想使用JJT,下一个最好的方法可能是使用builder模式


如果您只是想要一个include工具,那么可以使用许多预处理器。

是的,您可以通过创建对象来创建各种类和传递参数,并将其发送到try catch inside javacc文件中的对象,通过该文件它将看起来是模块化的。

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

JavaCC的最高级版本是,javacc21(除其他外)确实有一个,我能猜到的,正是您想要的


实际上,JavaCC21还有很多其他特性,这些特性在遗留JavaCC项目中是不存在的。这里有一个大问题:嵌套的语法先行不能正确工作的长期缺陷已经被修复。请参见

实际上没有办法模块化.jj文件。最好的做法是经常使用JJT,因为这允许您将所有操作移出语法文件。如果你只是想要一个include工具,那么有很多预处理器可以使用。@TheodoreNorvell请你把你的答案贴出来好吗?谢谢。如果你不想使用JJT,下一个最好的方法可能是使用builder模式。你在读我的想法。我用的是建筑面糊。抱歉再次询问-您能告诉我一个支持包含的预处理器吗?不知何故,我没有找到一个…cpp或m4都做文件包含。您还可以使用cat或ANT的concat任务将多个文件连接在一起。那么,如何将JavaCC语法(.jj文件)模块化为多个文件呢?Sample.jj-->//begin class xyz{modularclass t=new modularclass(…);{try{s.o.pln(“Starting…”);abc();}catch(){}}解析器{END(xyz)跳过:{…}标记:{…}无效abc():{}{(a1())*}无效a1():{}{}{{{{{modularclass_1 t1=新的modularclass_1(…);}//结束---->modularclass.java-->modularclass_1.java->的单独文件,我想问的是如何将一个巨大的
Sample.jj
拆分为几个较小的
Sample01.jj
Sample02.jj
等。