2017-09-03 10 views
1

ANTLR4文法を複数のファイルに分割しようとしていますので、より簡単にテストできます。私は、Javaプロジェクトの構築ツールとしてgradleを使っています。ANTLR4はインポート時に文法を見つけません

両文法は別々で正しくコンパイルが、私は私のメインの文法にインポートを追加したときに、私は次のコンパイルエラーに取得

エラー(110):kanekotic/specflow /ライダー/ SpecflowFeature.g4:3:7 :

grammar SpecflowScenario; 

@header { 
    package kanekotic.specflow.rider; 
} 

scenario 
    : 'Scenario: '; 

と:inherited文法がどのように見える

を見つけたり、負荷文法SpecflowScenario

することはできません文法は次のようになります。

grammar SpecflowFeature; 

import SpecflowScenario; 

@header { 
    package kanekotic.specflow.rider; 
} 

file returns [List<String> values] 
    @init { $values = new ArrayList<String>(); } 
    : 'Feature: ' EOF; 

私は間違っていますか?これは許されないのですか?

編集:

gradle.build次のようになります。それはオープンソースであるよう

plugins { 
    id "org.jetbrains.intellij" version "0.1.10" 
} 

apply plugin: 'org.jetbrains.intellij' 
apply plugin: 'java' 
apply plugin: 'antlr' 

sourceCompatibility = JavaVersion.VERSION_1_8 
targetCompatibility = JavaVersion.VERSION_1_8 

intellij { 
    version '143.2370.31' 
    pluginName 'Specflow Rider' 
} 

group 'kanekotic.specflow.rider' 
version '0.1' 

repositories { 
    mavenCentral() 
    jcenter() 
} 

dependencies { 
    antlr "org.antlr:antlr4:4.5" 
    testCompile 'junit:junit:4.12' 
    testCompile "org.mockito:mockito-core:2.+" 
} 

すべてのコードは、この次のリンクである:https://github.com/kanekotic/Specflow.Rider/tree/antlr4_multiple_grammar

+0

同じフォルダのファイル 'SpecflowScenario.g4'に文法がありますか?多分あなたのgradleファイルの部分を投稿してください。 – user3151902

+0

@ user3151902あなたの回答に感謝します。はい、それらは同じディレクトリにあり、私のgradleは編集上で見ることができます。また、オープンソースとしてレポを追加しました。 – Kanekotic

答えて

2

ANTLRプラグインはsrc/main/antlrとしてのlibを使用していますデフォルトではディレクトリです。

generateGrammarSource { 
    arguments << "-lib" << "src/main/antlr/kanekotic/specflow/rider" 
} 

this gradle thread参照:含まれるように文法ファイルがkanekotic/specflow/riderであるように、この場所を含めるためにあなたのGradleファイルに次のコードを使用します。

+1

私は実際にソリューションに向かって指してくれてありがとう。 'src/main/antlr'ではなく' 'src/main/antlr/kanekotic/specflow/rider''に小さな変更を加えて受け入れますので、おそらく答えは' 'src/main/antlr/ ''、そして' src/main/antlr'は、実際に働いたルートに移動した場合のようなデフォルトのlibパスだと私は信じています。 – Kanekotic

+0

それを指摘してくれてありがとう!私はそれに応じて私の答えを編集しました。 – user3151902

関連する問題