私は複雑な 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" を定義できますか? これも別の文法で定義し、その文法を両方の文法にインポートしますか? 問題を解決する他のアイデアはありますか?