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

在用Maven构建时,如何在Antlr4中导入一个语法?

有骏祥
2023-03-14

我正在尝试用Maven构建一个ANTLR项目,项目结构如下所示

src/main +
      |-antlr4
             |-fo/bar
                   |-G1.g4
                   |-G2.g4
             |-imports

其中G1导入G2,类似于:

grammar G1;
import G2;

然而,当我使用Maven构建时,我得到以下错误:

[ERROR] Message{errorType=CANNOT_FIND_IMPORTED_GRAMMAR, args=[G2, fo\bar\G1.g4], e=null, fileName='null', line=-1, charPosition=-1}

如果我将g1.g4g2.g4直接放在antlr4目录下,则不会有问题。在我看来,当把语法文件放在一个包中时,它需要在import语句中使用特殊的语法。

我注意到了一个问题,Antlr4 maven插件无法在不同的目录中找到语法文件,但在这里,语法在一个目录中。

共有1个答案

巫马修为
2023-03-14

我认为您需要在imports包(src/main/antlr4/imports)中使用G2.g4语法,但您会重复您的语法。要避免这种情况,请如下所示更改ANTLR插件的导入设置:

<build>
  <plugins>
    <plugin>
      <groupId>org.antlr</groupId>
      <artifactId>antlr4-maven-plugin</artifactId>
      <version>4.1</version>
      <!-- vvv key part here vvv -->
      <configuration>
        <libDirectory>${basedir}/src/main/antlr4/fo/bar</libDirectory>
      </configuration>
      <!-- ^^^ key part here ^^^ -->
      <executions>
        <execution>
          <goals>
            <goal>antlr4</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

请注意配置libdirectory

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

  • 我可以从maven Projects窗格(在IDE屏幕的左侧)执行maven目标。例如,我可以使用compile目标很好地编译项目。 现在,我想使用BuildMake项目选项从UI构建项目。然而,它不起作用。它抱怨丢失的应用程序包,就好像它没有看到依赖关系一样。这些依赖关系在各自的pom.xml文件中定义,但是从IDE中创建项目似乎忽略了它。 我要做什么才能让它起作用? 项目flyout在括号中显

  • 我想知道我们是否可以使用Antlr版本4构建一个AST。我找不到任何关于使用ANTLR4构建它的参考。一个答案是,使用antlr4会很容易,它只产生解析树,但我的问题是效率如何? 它迫使我们只能爬取整个解析树而不是抽象的语法树,这对于遍历整个解析树和使用访问者执行任务是不有效的。

  • 问题内容: 我有一个项目,我现在开始作为Maven项目,但是由于某种原因,它无法正常工作。这是我的pom.xml: 问题答案: 实际上,您的POM看起来有点奇怪: 它缺少Webapp项目的权利。 Maven War插件配置看起来不正确,您只是不需要添加的额外内容。 这是最小pom的样子: 因此,要么修改它,然后更新项目配置( 右键单击 您的项目,然后 右键单击 Maven >更新项目配置)。 或者

  • 我有一个(命令行)基于maven的项目,非常好用(mvn清理、mvn验证、安装都很完美)!我现在想把它导入eclipse,不是作为maven项目,而是常规的eclipse项目。 我做到了,但我有一个依赖性问题,我只需将创建的所有jar复制到。m2文件夹到我的eclipse工作区中的另一个文件夹。然后我将所有这些罐子添加到我的项目中。 一切都好! 问题是:我觉得这不是在eclipse中管理依赖关系的

  • 我的pom.xml中有两个配置文件。一个默认值和另一个用于构建swagger客户端库。我在另一个maven项目中导入了这个库。问题是它使用了第一个项目的所有依赖项,甚至是默认概要文件中提到的依赖项。解决问题的最佳方法是什么?生成jar时,是否可以在pom文件中只放入一个配置文件?或者在导入依赖项时可以选择配置文件吗?