1

私は複雑な Xtext 文法を持っています。単純化されたバージョンは次のようになります。

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals
generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
import "http://www.eclipse.org/emf/2002/Ecore" as ecore

ComplexGrammar:
    'Define Complex Grammar'
    (
        'Define Some Value {' someValues+=SomeValue+ '}'
        & 'Define Parts {' requiredParts+=RequiredPart+ '}'
        & 'Define FeatureX {' xfeatures+=FeatureX+ '}'
        & 'Define FeatureY {' yfeatures+=FeatureY+ '}'
    )
    'End'
;

RequiredPart:
    'Part' name=ID ';'
;

FeatureX:
    // I need this part of the grammar in a single editor.
    // It should support the Xtext validation to show errors.
    // The editor should only use FeatureX instead of the whole grammar.
    // But it also needs RequiredPart which is necessary for the complex grammar, too.
    'Here it requires' requiredPart = [RequiredPart]
;

FeatureY:
    // The same like FeatureX, but for FeatureY
    'Requires' requires = [RequiredPart] 'for FeatureY, too!'
;

SomeValue:
    // This part is not required by FeatureX or FeatureY
    // But it is required for the ComplexGrammar
    'Unimportant' name=ID 'Value' value=Double ';'
;

Double returns ecore::EDouble:
    '-'? INT? '.' INT
;

今、エディターをEclipse FormPageに統合したいと思っています。ユーザーにとって複雑すぎるため、文法全体を編集するためのエディターは必要ありません。

必要なのは、「FeatureX」と「FeatureY」のエディターです。どちらもエディターを分離する必要があり、「FeatureX」のエディターでの Xtext 検証は、文法部分「FeatureX」のエラーをチェックするだけです。つまり、特定の文法部分のエラーのみをチェックし、単純な自動補完をサポートする必要がある、文法の一部のエディターが必要です。

「ComplexGrammar」のダミーのようなものを使用して、残りの文法に違反しないようにする考えがありますが、現在、ダミーリソースを使用してエディターを開き、「」のエディターを表示する方法がわかりませフィーチャーX」。

アイデアや例を教えていただければ幸いです。前もって感謝します。

マイケル

[編集]上記の例では必要な機能が 1 つ示されていなかったため、上記の文法を少し変更しました。私の「ComplexGrammar」では、「FeatureX」と「FeatureY」にも必要な「RequiredPart」が定義されています。

まず、「ComplexGrammar」文法の完全な例:

Define Complex Grammar
    Define Parts {
        Part GlobalPartA ;
        Part GlobalPartB ;
    }

    Define FeatureX {
        Here it requires GlobalPartA  
    }

    Define FeatureY {
        Requires GlobalPartA for FeatureY, too!

        Requires GlobalPartB for FeatureY, too!
    }

    Define Some Value {
        Unimportant ObjName Value 1.0 ;
    }

End

しかし、私のエディターは、この文法の一部、たとえば "FeatureY" に対してのみ機能するはずです。

Define FeatureY {
    Requires GlobalPartA for FeatureY, too!

    Requires GlobalPartB for FeatureY, too!
}

文法を分離すると (Bananeweizen が言ったように)、どのように "RequiredPart" を定義できますか? これも別の文法で定義し、その文法を両方の文法にインポートしますか? 問題を解決する他のアイデアはありますか?

4

1 に答える 1

1

If that small part of the grammar is self-contained, then you can move it into its own separate grammar definition and have your complex grammar import it (just like you import the ecore definition).

The important part in separating the complex and the simplified grammar is that the complex grammar rules are allowed to refer to types and rules in the simplified grammar, but not the other way around.

And to make that all work in practice, some tweaking of the MWE workflow is necessary. Here I cannot really refer to specific instructions, it might be this change.

于 2012-09-24T16:06:55.580 に答える