我尝试使用gradle antlr插件,但遇到了几个问题.
我有一个语法文件叫wls.g4:
grammar WlsScript;
@header {
package hu.pmi.wls.antlr.ws;
}
program
: 'statementList'? EOF
;
// Several more grammar and lexer rules
Run Code Online (Sandbox Code Playgroud)
(注意:我将statementList设为一个关键字,只是为了制作一个正确的语法而不包括整个语法.;-))
该文件位于/ src/main/antlr(作为antlr生成语法文件的默认源文件夹).
以下是来自的代码段build.gradle:
project('common') {
apply plugin: 'antlr'
dependencies {
// Some dependencies
antlr "org.antlr:antlr4:4.5"
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用generateGrammarSourcegradle任务(从antlr插件中提交)生成源文件时,它会生成build/generated-src/antlr/main默认文件夹中的文件.
出了什么问题,它没有创建java包的文件夹(hu/pmi/wls/antlr/ws在我们的例子中),因此源将错误地定位在Eclipse中.
我的主要问题是如何强制任务以包结构的方式生成源文件?换句话说,如何配置gradle任务以使用语法中的包声明?
谢谢!
Nag*_*rla 13
我有完全相同的问题,我能够更改outputDirectoryAntlrTask使用的包,以获取包名称.
generateGrammarSource {
outputDirectory = new File("${project.buildDir}/generated-src/antlr/main/net/example".toString())
}
Run Code Online (Sandbox Code Playgroud)
我发现没有简单的方法从文件中提取语法包,因此必须在任务中对其进行硬编码.
将其添加到子项目build.gradle中
generateGrammarSource {
outputDirectory = file("src/main/java/com/example/parser")
}
Run Code Online (Sandbox Code Playgroud)
在你的"语法"之后将它添加到你的语法中;
@header {
package com.example.parser;
}
Run Code Online (Sandbox Code Playgroud)
测试并使用来自antlr示例语法的Java8语法
其他链接:
以下是docs.gradle.org的Antlr插件的简短指南
我没有在将它放在父项目中时进行测试,就像你看起来那样,但应该很容易扩展到这样做.(我尝试将父项目保留为空,而不是使用存储库.)
| 归档时间: |
|
| 查看次数: |
5427 次 |
| 最近记录: |