首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gradle构建如何同时处理antlr3和antlr4语法?

gradle构建如何同时处理antlr3和antlr4语法?
EN

Stack Overflow用户
提问于 2018-08-19 20:31:56
回答 1查看 391关注 0票数 0

我有一个遗留项目,其中使用了ANTLR3和ANTLR4语法。我们希望将ant构建系统更新为gradle。有一个支持ANTLR2 2/3/4的antlr级插件,但是很明显,它一次只支持这三个中的一个(取决于所添加的依赖项)。

在我们的项目中,antlr3文件的后缀是.g,而antlr4语法的后缀是.g4

有选择的插件或替代插件,允许我使用语法的两个ANTLR版本在同一时间?

谢谢你的暗示。

代码语言:javascript
复制
plugins {
    id 'java-library'
    id 'antlr'
}

dependencies {
    // ...

    // If both are mentioned, then "X.g" is also treated as antlr4
    antlr "org.antlr:antlr:3.5.2" // use ANTLR version 3
    antlr "org.antlr:antlr4:4.5" // use ANTLR version 4
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-07 19:46:45

目前,antlr插件不支持多个版本。解决办法是使用JavaExec任务调用antlr3或antlr4。这里有一个方法来做这件事。

  1. 创建用于使用gradle依赖关系管理检索antlr3或antlr4的配置。
代码语言:javascript
复制
configurations{
  antlr3,
  antlr4
}

dependencies {
    antlr3 "org.antlr:antlr:3.5.2"
    antlr4 "org.antlr:antlr4:4.7.1" 

    compile "org.antlr:antlr-runtime:3.5.2"
    compile "org.antlr:antlr4-runtime:4.7.1" 
}
  1. 定义任务。
代码语言:javascript
复制
task runAntlr4(type:JavaExec) {
   //see incremental task api, prevents rerun if nothing has changed.
   inputs.dir "src/main/antlr4/"
   outputs.dir "$projectDir/build/generated/antlr/main/"

   classpath = configurations.antlr4

   main = "org.antlr.v4.Tool" 

   args = [ "-verbose", "-visitor", 
            "-o",  "$projectDir/build/generated/antlr/main/",  
            "-package", <my-package>,
            "src/main/antlr4/MyLanguage.g4"]
}

compileJava.dependsOn runAntlr4
  • 模拟antlr3configurations.antlr3和"org.antlr.Tool“。
  • 将输出目录添加到sourceSets.main.java
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51921617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档