当前位置: 首页 > 知识库问答 >
问题:

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

百里鸿祯
2023-03-14

具有

  • ANTLR 4.7

我正在尝试使用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. 解析器

此时,我收到了错误消息:

无法找到或加载语法LexBasic

我查过了

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

并向https://github.com/antlr/antlr4/issues/2061

并在以下网站上发表了一篇维基文章:http://wiki.bitplan.com/index.php/ANTLR_maven_plugin

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

在https://gist.github.com/sharwell/4979017我发现了一个评论,即构建助手maven插件不再需要了。我仍然必须尝试这个。

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

  • 无法找到或加载语法LexBasic

或者eclipse环境将开始从源代码重新生成java源文件。g4文件处于无结束循环中。我必须从菜单中调用maven build来停止这种循环。

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

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

共有2个答案

桓宜
2023-03-14

我对ANTLR 4.7、ANTLR v4 Maven插件、ANTLR 4 IDE Eclipse插件和Eclipse Oxygen也有同样的问题。

如果在Eclipse的problems视图中看到错误消息找不到或加载语法,那么它来自ANTLR 4 IDE Eclipse插件。因此,如果您遵循antlr4 maven文档的指导原则(例如,您将语法/词法文件放在src/main/antlr4目录下),这很好,您的maven项目应该编译无误。我从你的问题中了解到,你也是这样。为了消除eclipse插件的错误消息,我还需要将与源目录相同的目录添加到我的项目中(即,转到project settings/Java Build Path/(source tab),并添加src/main/antl4//(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的基本功能(例如语法高亮、索引),但它不会为每一个小变化重新生成语法。

曾洲
2023-03-14

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

 类似资料:
  • 我正在尝试将我的ANTLR4语法拆分到多个文件中,这样我可以更容易地测试它们,我正在使用gradle作为java项目中的构建工具。 如下所示: 所有开源的代码都在下一个链接中:https://github.com/kanekotic/specflow.rider/tree/antlr4_multiple_grammar

  • 我现在得到了... lexer语法的导入似乎正在加载。以下文件提供了该问题。 AQLCommentTest.G4 如何检查是否以及如何实际应用了antlr4导入语句?

  • 我已经安装了菲奥娜,Shauley,GDAL,RTER和PYPRJ的WHL文件。Geopandas也通过pip安装。但在导入时,我会遇到以下错误: 以及以下错误: 有人能帮我吗?我不知道如何解决这个问题。谢谢和问候。

  • 我最近不得不使用解析器来做一个项目。我下载了,并按照《最终ANTLR4Reference》一书中描述的步骤进行操作。以下是我在命令行中键入的步骤: 所有事情都很好,它生成我需要的java文件。但是,在我输入之后 它报告说 无法将Hello作为lexer或分析器加载。 我谷歌了一些信息,但仍然不知道发生了什么。

  • 问题内容: 我正在尝试使用Gradle运行一个非常简单的项目,并在使用时遇到以下错误: 这是我的文件结构: 我排除了libs和tmp文件夹的内容,因为我认为这与该问题无关,但是我可以在需要时添加它。 这是我的build.gradle文件: 关于如何解决此问题的任何想法?我已经为mainClassName属性尝试了各种方法,但似乎没有任何效果。 问题答案: 我在这里看到两个问题,一个与另一个有关。

  • 我的java应用程序编译有问题。 编译器说: