在使用Maven构建时如何在Antlr4中导入语法?

Wud*_*ong 7 antlr maven

我正在尝试用Maven构建一个ANTLR项目,项目结构就像

src/main +
      |-antlr4
             |-fo/bar
                   |-G1.g4
                   |-G2.g4
             |-imports
Run Code Online (Sandbox Code Playgroud)

其中G1进口G2如:

grammar G1;
import G2;
Run Code Online (Sandbox Code Playgroud)

但是,当我使用Maven构建时,我收到以下错误:

[ERROR] Message{errorType=CANNOT_FIND_IMPORTED_GRAMMAR, args=[G2, fo\bar\G1.g4], e=null, fileName='null', line=-1, charPosition=-1}
Run Code Online (Sandbox Code Playgroud)

它的工作原理没有问题,如果我把G1.g4G2.g4直属antlr4目录.在我看来,当将Grammar文件放在一个包中时,它需要在import语句中使用特殊语法.

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

小智 11

我认为你需要G2.g4import package(src/main/antlr4/imports)中的语法,但你会复制你的语法.要避免这种情况,请更改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>
Run Code Online (Sandbox Code Playgroud)

请注意配置libDirectory.