使用
我正在尝试使用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分为三部分的尝试:
此时我收到错误消息:
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。
答案 0 :(得分:1)
答案 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的基本功能(例如语法高亮,索引),但它不会为每个小的更改重新生成语法。