antlr4导入maven eclipse组合不起作用找不到或加载语法

时间:2017-10-22 09:15:15

标签: eclipse maven maven-plugin antlr4

使用

  • ANTLR 4.7
  • ANTLR 4.7 maven插件
  • Eclipse Neon 4.6.2

我正在尝试使用ANTLR4的语法导入功能。 见

以示例iri语法 https://github.com/BITPlan/com.bitplan.antlr/tree/master/src/main/antlr4/com/bitplan/iri

该语法基本上是将https://github.com/antlr/grammars-v4/blob/master/iri/IRI.g4分为三部分的尝试:

  1. 解析器
  2. 词法分析
  3. 导入基本词法分析器
  4. 此时我收到错误消息:

    can't find or load grammar LexBasic

    我检查了

    并提交了一份错误报告 https://github.com/antlr/antlr4/issues/2061

    并撰写了一篇wiki文章: http://wiki.bitplan.com/index.php/ANTLR_maven_plugin

    然后我将LexBasic.g4文件放入src / main / antlr4 / imports目录中 错误仍然存​​在。只有当我把LexBasic.g4放入src / main / antlr4时 在命令行上,事情会很好地运作。但这似乎与http://www.antlr.org/api/maven-plugin/latest/上的文档所说的不同。

    https://gist.github.com/sharwell/4979017 我发现一条评论说不再需要build-helper maven插件了。我还是要试试这个。

    在我最近几天的试验中,我有很多不同的pom.xml配置的怪癖。我会收到如下错误消息:

    • can't find or load grammar LexBasic
    • reference to undefined rule

    或eclipse环境将开始从非结束循环中的.g4文件重新生成java源文件。我必须从菜单中调用maven build来停止这样的循环。

    我仍然不确定使用解析器词法分析器和导入的lexer文件设置项目的正确方法是使用antlr4,maven和eclipse。

    • 设置此功能的正确方法是什么?
    • 我在哪里可以找到示例项目?

2 个答案:

答案 0 :(得分:1)

@Wolfgang,我现在正处于类似任务的中间。我不知道进口选项。感谢那。通过使用Antlr4 maven plugin cannot find grammar files in different directories中引用的Maven配置,我能够像使用import语句一样成功编译所有内容。但是,我认为问题在于ANTLR4 IDE插件本身。语法编译,但Eclipse应该识别导入。另请查看Sam在上述帖子中的评论。我知道他是ANTLR的贡献者,他的洞察力是合理的:也许我(和你)想要做的事情是不值得的。我会告诉你我还能找到什么。欢呼声。

答案 1 :(得分:1)

我在ANTLR 4.7,ANTLR v4 Maven插件,ANTLR 4 IDE Eclipse插件和Eclipse Oxygen方面遇到了同样的问题。

如果在Eclipse的问题视图中看到错误消息can't find or load grammar,则它来自 ANTLR 4 IDE Eclipse插件。因此,如果您遵循antlr4 maven documentation的准则(例如,将您的语法/词法分析器文件放在src/main/antlr4目录下),那很好,您的maven项目应该编译没有错误。正如我从你的问题中理解的那样,你也是如此。为了摆脱eclipse插件的错误信息,我还需要将同一目录作为源目录添加到我的项目中(即转到project settings/Java Build Path/(Source tab),并将src/main/antlr4/.../(YourGrammar.g)的文件夹添加到源文件夹。

<强>更新

我试图编译你的github repo,你的pom看起来很好,不管有些缺少依赖。我还注意到你在示例中使用了org.antlr.v4.runtime.tree.gui.TreeViewer,这是自antlr 4.5.1以来不可用的,所以你要么使用更早的antlr版本(例如4.5),要么取消注释这段代码。我为您创建了拉取请求,因此您可以看到我的更改。

另一个通知(当我正在玩你的项目时)是antlr4ide插件将生成LexBasic.g4词法分析器每个语法文件中的每个小变化(取决于它),这似乎很烦人。我建议在项目设置中停用该工具(ANTLR4/Tool)。无论如何,您将通过maven编译项目。因此,您仍然可以为项目使用antlr4ide的基本功能(例如语法高亮,索引),但它不会为每个小的更改重新生成语法。