我正在学习编译器构造,并希望使用JavaCC实现JavaScript语法。
(我已经编写了自己的JavaScript CodeModel,允许以编程方式构建JavaScript代码,现在我想为此编写一个基于JavaCC的解析器。)
我的问题是,有没有办法将JavaCC语法(.jj
- 文件)模块化为多个文件?
我对JavaParser有非常好的经验,所以我正在学习他们的java_1_5.jj
语法。但是,这是一个3000+ LoC文件,有点难以理解。
我想将语法文件分成几个部分,以便更容易理解和理解。我的谷歌" javacc modular"," javacc包括"," javacc import"给我带来了一些神秘的结果,并没有多大帮助。
具体而言,我如何将IDENTIFIER
(lines 380-1081)的定义移至另一个文件?
答案 0 :(得分:1)
JavaCC无法内置模块化.jj文件。最好的办法通常是使用JJT,因为这允许您将所有操作移出语法文件。如果您不想使用JJT,那么下一个最好的方法可能是使用构建器模式。
如果您只想要一个包含工具,可以使用许多预处理器。
答案 1 :(得分:0)
是的,您可以通过创建对象来创建各种类并传递参数,并在javacc文件内的try catch中将其发送到对象,从而使它们看起来像模块化。
答案 2 :(得分:0)
我知道这个问题是六年前提出的,但是我会回答,因为人们会不时地寻找答案。
JavaCC的最高级版本是JavaCC 21,而JavaCC 21确实(其中包括)INCLUDE directive正是您正在寻找的{3}}。
JavaCC21实际上还有许多其他功能,这些功能在旧版JavaCC项目中不存在。这是一个大问题:修复了长期存在的嵌套嵌套先行无法正常工作的错误。参见here.