4

私は自分のantlr文法をgradleでコンパイルしようとしています。私はgradleを初めて使用するため、問題の修正方法を見つけるのに苦労しています。

2.7 antlrを使用してコンパイルしようとしていると思います(間違ったバージョンを使用しているときに同様のエラーを報告している他の人が何人かいるのを見たので)、したがってエラーをスローします。

どうやって:

  1. どのバージョンのAntlrgradleが使用しようとしているのかを示しますか?
  2. 正しくコンパイルするためにgradleを入手しますか?

これが私の文法です:

grammar Test;

options {
  language = Java;
}

rule: ;

これが私のgradleスクリプトです:

apply plugin: 'java'
apply plugin: 'antlr'

repositories {
    mavenCentral()
}

dependencies {
    antlr 'org.antlr:antlr:3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

コンパイルしようとしている出力は次のとおりです。

$ gradle compileJava
:generateGrammarSource
/home/admin/workspace/BuildTools/src/main/antlr/Test.g:1:1: unexpected token: grammar
:compileJava UP-TO-DATE

BUILD SUCCESSFUL

Total time: 2.458 secs

編集:

Antlr3はまだgradleで直接サポートされていないようです。

ここで説明しているgradleにantlr3サポートを追加するプルリクエストがあります。

これは、 Antlr3のサポートを手動で含める別のバージョンです

4

3 に答える 3

5

完全を期すために、 tapestryjava blogspotからバージョンを取得し、コメントの一部を追加した、プロジェクト用の次のgradleビルドファイルを作成しました。

変更する必要があるのは、動的プロパティを使用して警告を削除しないことだけです。

apply plugin: 'java'

project.ext.grammarpackage = "eclipse"

repositories {
    mavenCentral()
}

configurations {
    antlr3
}

dependencies {
    compile 'org.antlr:antlr-runtime:3.2'
    antlr3 'org.antlr:antlr:3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

task antlrOutputDir << {
    mkdir(generateGrammarSource.destinationDir)
}

task generateGrammarSource(dependsOn: antlrOutputDir, type: JavaExec) {
    description = 'Generates Java sources from Antlr3 grammars.'

    destinationDir = "$buildDir/generated-sources/antlr"
    def antlrSource = 'src/main/antlr'

    inputs.dir file(antlrSource)
    outputs.dir file(destinationDir)

    def grammars = fileTree(antlrSource).include('**/*.g')

    main = 'org.antlr.Tool'
    classpath = configurations.antlr3
    args = ["-o", "${destinationDir}/${project.ext.grammarpackage}", grammars.files].flatten()
}

compileJava {
    dependsOn generateGrammarSource
    source generateGrammarSource.destinationDir
}
于 2012-05-17T13:33:57.170 に答える
4

Gradleについてはあまり知識がありませんが、generateGrammarSourceANTLR 2.7.xを使用しています(正確なバージョンはわかりません)。2.7文法で使用すると、.javaファイル適切に生成されるためです。

ANTLR 3とGradleを使用するには、いつでも次のようなことを行うことができます。

task generateWithANTLR3(type:Exec) { 
  commandLine = ['java', '-cp', 'antlr-3.2.jar', 'org.antlr.Tool', 'T.g']  
}

(ANTLR jarと文法ファイルがGradleビルドファイルと同じディレクトリにあると仮定します)

編集

Toolまた、生成されたソースファイルを特定のディレクトリに出力させることもできます。次のタスク:

task generateWithANTLR3(type:Exec) { 
  commandLine = ['java', '-cp', 'antlr-3.2.jar', 'org.antlr.Tool', '-o', 'src/x/y/generated/', 'T.g']  
} 

生成されたファイルをに配置しますsrc/x/y/generated/

于 2012-05-16T21:40:44.603 に答える
1

これは、依存関係からantlr jarを取得し、クラスパスに配置するMarkFisherとBartKiersの応答の組み合わせです。わたしにはできる:

configurations {
    antlr3
}

dependencies {
    antlr3 'org.antlr:antlr:3.4'
}


task generateWithANTLR3(type:Exec) { 
  commandLine = ['java', '-cp',  configurations.antlr3.getAsPath(), 'org.antlr.Tool', '-o', 'target/generated-sources/antlr3/t3', 'src/main/antlr3/t2/Exp.g']
}
于 2013-01-16T09:59:16.053 に答える