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



使用

  • ANTLR 4.7
  • ANTLR 4.7 maven插件
  • Eclipse霓虹灯4.6.2

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

  • https://github.com/BITPlan/com.bitplan.antlr

使用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. 进口基本lexer部件

此时我收到错误消息:

can't find or load grammar LexBasic

我检查了

  • ANTLR4在导入时找不到语法
  • Antlr4组合语法导入失败

并向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我发现一条评论说,构建助手maven插件不再需要了。我还是要试试这个。

在过去几天的试用中,我对不同的pom.xml配置有很多怪癖。我会收到错误消息,比如:

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

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

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

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

@Wolfgang,实际上我现在正在进行类似的任务。我不知道进口选项。谢谢你。通过使用Antlr4中引用的Maven配置,Maven插件在不同的目录中找不到语法文件,我能够像使用import语句一样成功地编译所有内容。然而,我认为问题出在ANTLR4IDE插件本身。语法可以编译,但Eclipse应该识别导入。还可以查看Sam在上面帖子中的评论。我知道他一直是ANTLR的贡献者,他的见解是正确的:也许我(和你)试图做的不值得付出努力。我会让你知道我还有什么发现。干杯

我在使用ANTLR 4.7、ANTLR v4 Maven插件、ANTLR 4 IDE Eclipse插件和Eclipse Oxygen时遇到了同样的问题。

如果您在Eclipse的problems视图中看到错误消息can't find or load grammar,则它来自ANTLR4IDEEclipse插件。因此,如果您遵循antlr4-maven文档的指导原则(例如,您将语法/lexer文件放在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-lexer,这似乎很烦人。我建议在项目设置中停用该工具(ANTLR4/Tool)。无论如何,您都将通过maven编译项目。因此,您仍然可以在项目中使用antlr4ide的基本功能(例如语法高亮显示、索引),但它不会为每个小的更改重新生成语法。

相关内容

  • 没有找到相关文章

最新更新