0

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

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

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

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

我想将语法文件分成几个部分,以便于处理和理解。我在“javacc 模块化”、“javacc 包含”、“javacc 导入”上的谷歌搜索给我带来了一些没有太大帮助的神秘结果。

具体来说,我将如何将IDENTIFIER第 380-1081 行)的定义移动到另一个文件?

4

3 回答 3

1

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

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

于 2014-11-03T20:13:52.273 回答
0

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

于 2019-02-22T08:51:45.313 回答
0

我知道这个问题是在将近六年前提出的,但即使如此,我也会回答,因为人们会不时地寻找这个问题的答案。

JavaCC 的最高级版本是JavaCC 21,JavaCC 21 确实有(除其他外)一个INCLUDE 指令,据我所知,这正是您正在寻找的。

实际上,JavaCC21 的许多其他功能在旧版 JavaCC 项目中并不存在。这是一个大问题:嵌套语法前瞻无法正常工作的长期错误已得到修复。见这里。

于 2020-09-13T10:41:31.597 回答