繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM