2016-12-28 6 views
0

をインポートします。私は何をしたいかのXtext、私は次のようにルールが含まれている私の文法では私自身のmydslファイル

Script: 
    includes+=(Include)* assignments+=(Assignment)* clock=Clock? tests+=Test* 
; 

Include: 
    'INCLUDE' importURI=STRING 
; 

は、「メイン」ファイルと同じファイルをインクルードすることです。

私はinterpreterで、.mydslファイルをハンドリングしています。

/* Main exec methode */ 

def dispatch void exec(Script s) { 

    s.includes.forEach[ i | i.exec] 
    s.assignments.forEach[a | a.exec] 
    s.clock.exec 
    s.tests.forEach[t|t.exec] 
} 

/* include methode */ 
def dispatch void exec(Include i) { 

    System.out.println(i.importURI + " included") 

} 
+0

が見えて基準に従うことができ、その後

public class MyDslQNP extends DefaultDeclarativeQualifiedNameProvider { QualifiedName qualifiedName(Script script) { return QualifiedName.create(script.eResource().getURI().trimFileExtension().lastSegment(), script.eResource().getURI().fileExtension()); } } 

Script: includes+=(Include)* ; Include: 'INCLUDE' includedScript=[Script|STRING] ; 

と名前プロバイダー: 'INCLUDE' includedScript = [Script | STRING]; +スクリプトリソースuriから名前を計算した名前プロバイダ。 –

+0

私は –

答えて

0

Xtextのインポートは含まれません。 Xtextはインクルードをまったくサポートしていません。 Xtextがサポートしているのはすべて相互参照です。名前空間ベースまたはインポートuriベースのグローバルスコープを使用して、他のファイルの要素がどのように見つかるかを判断できます。あなたが本当にあなたのインタプリタ内のファイルを含んでフォローしたいと仮定し、あなたがより多くの `含めるようなあなたのインタプリタ

class MyDslRuntimeModule extends AbstractMyDslRuntimeModule { 

    override bindIQualifiedNameProvider() { 
     MyDslQNP 
    } 

} 
+0

が私のことを分かっているとは思いませんが、私の通訳ではどのように参照するのですか? MyDslQnpクラスを私がインタープリタを持っているパッケージに作成しました、そうですか? –

+0

noooooo。ランタイムモジュールでnameproviderをバインドし、その周りのどこかに作成します。あなたのintepreterに単にmyInclude.getIncludedScriptは、() ' –

+0

私は、このクラスのMyDslRuntimeModuleような何かを行います呼び出す bindIQualifiedNameProvider(){ \t \t戻りMyDslQNP.class \t}} が、ランタイムはXTENDおよびJavaで、このコードです。私は、私は修正することはできませんエラー、任意のアイデアを持っていますか? –

関連する問題