7

所以我一直在使用 ANTLR v3.4 在 Eclipse 中制作语法,并且我已经制作了一个有效的语法,我想确保当我编辑它时一切仍然有效。我每次都可以进入口译员,但这似乎是在浪费时间。

问题:我已经阅读了有关 gunit 的信息,但它提供的下载 gUnit 的链接:(http://antlr.org/hudson/job/gUnit/org.antlr $gunit/lastSuccessfulBuild/ )不起作用。我怎样才能得到 gUnit。测试语法的最佳方法是什么?它实际上是 gUnit 还是我应该像 jUnit 测试那样做 java 测试?

4

4 回答 4

5

我最近使用 Eclipse 完成了两项 ANTLR3 作业(我正在攻读计算机科学硕士学位)。我发现没有一个文档包含在 Eclipse 中安装、配置、编写和调试语法的过程。因此,在解决了各种问题之后,我发现最简单的方法就是留在 Eclipse 中进行测试。

要使用我开始使用的过程(如下所述),您必须首先安装 ANTLR IDE v2.1.2。直接从 Eclipse Indigo 中添加它:http: //antlrv3ide.sourceforge.net/updates。这个站点也有一些关于使用 ANTLR IDE 的有用文档。安装后,必须配置 IDE。视频教程有点过时,但很有帮助。请参阅如何在 Eclipse中配置 ANTLR IDE 的详细指南。主要配置项是java输出文件夹。在 Eclipse 中通过转到 Windows、首选项、ANTLR、代码生成器,检查项目相关文件夹并在输出文件夹名称框中键入文件夹名称(我的称为“antlr-java”,其他使用“生成”)。

使用 ANTLR IDE 在 Eclipse Indigo 中测试/调试 ANTLR

  1. 创建新项目后,右键单击它,选择配置,转换为 ANTLR 项目...
  2. 在 .g 文件中创建语法并保存。注意:文件名必须与语法名称匹配。
  3. 如果有重大错误,请调试语法。Eclipse 显示 ANTLR 错误以及受影响的行。起初,这些错误似乎难以理解,但可以通过使用各种资源来解决它们: - 编写 ANTLR 的人 Terence Parr 的权威 ANTLR 参考 - ANTLR 参考手册 - 谷歌错误;很多时候你会在 stackoverflow 结束;特别是,Bart Kiers 知识渊博,乐于助人(Bart:谢谢你不知道你给了我的帮助)
  4. 在解决严重的 ANTLR 错误后的第一次保存时,您在 Eclipse 中配置的 java 输出文件夹将被创建,并且该文件夹中的 java 文件也将被创建。
  5. 右键单击 java 输出文件夹,选择 Build Path,Use As a Source Folder。这告诉 Eclipse 在哪里寻找项目的 java 源代码。
  6. 新的 java 文件中可能有错误。选择它,然后搜索查找 java 错误。返回您的语法或 java 文件,更正错误,然后重新保存语法,直到语法和 java 文件都没有错误,然后运行它。
  7. 从这一点开始,这是通常的修改-运行-调试周期。
  8. 我需要的唯一其他 Eclipse 更改是创建一些运行配置来测试命令行参数。
于 2012-06-04T19:08:36.663 回答
5

这个问题很老,但我留下一个完整的参考:

对我来说,gUnit 没用。所以我设法找到了如何只测试 Lexer,然后只测试解析器。

我在这里回答:https ://stackoverflow.com/a/53884851/976948

基本上,有两篇关于如何测试它的文章的链接:

于 2018-12-21T12:39:20.680 回答
1

您可以在那里下载 gUnit 但我认为没有最新版本...

试试Jarvana ... 最新版本是 3.4:http ://repo1.maven.org/maven2/org/antlr/gunit/3.4/gunit-3.4.jar

@Dave Newton 是对的。从 ANTLR v3.1 开始,gUnit 包含在主 ANTLR 工具 jar 中,如该处所述。


直到现在我才知道 gUnit。它看起来很适合语法测试,但我认为 JUnit 测试将完成他们的工作......

于 2012-05-31T17:18:55.077 回答
0

这是我第一次听说 gUinit 并阅读了它。(我很少使用 ANTLR。)这听起来很有趣,但有一半没用。

我验证语法的方法是使用“正常”单元测试来实际验证整个解析器。问题是,无论如何你都应该有单元测试,而检查语法回归的测试你只需将它添加到那里。根据我的经验,大多数错误来自语义分析和还原,而不是语法。

于 2012-06-01T13:06:43.373 回答