使用
- 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分为三部分:
- 解析器
- 双工器
- 进口基本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的基本功能(例如语法高亮显示、索引),但它不会为每个小的更改重新生成语法。