У меня есть сложная грамматика 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". Оба редактора должны быть разделены, и проверка Xtext в редакторе для «FeatureX» должна просто проверять наличие ошибок в грамматической части «FeatureX». Другими словами: мне нужен редактор для части грамматики, который проверяет только наличие ошибок в данной части грамматики и должен поддерживать простое автодополнение.
У меня есть идея использовать что-то вроде макета моей "ComplexGrammar", чтобы гарантировать, что остальная часть грамматики не будет нарушена, но в настоящее время я понятия не имею, как я могу открыть свой редактор с помощью ресурса-пустышки. и просто покажите редактор для "FeatureX".
Надеюсь, вы можете дать мне несколько идей или примеров. Заранее спасибо.
Майкл
[EDIT] Я немного изменил приведенную выше грамматику, потому что в примере не показана одна обязательная функция: Моя «ComplexGrammar» определяет «RequiredPart», которая также требуется для «FeatureX» и «FeatureY». ".
Прежде всего полный пример грамматики "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
Но мой редактор должен просто работать над частью этой грамматики, например. "Функция Y":
Define FeatureY {
Requires GlobalPartA for FeatureY, too!
Requires GlobalPartB for FeatureY, too!
}
Если я разделю свою грамматику (как сказал Бананевейзен), как я могу определить «RequiredPart»? Определить ли это также в отдельной грамматике, а затем импортировать грамматику в обе грамматики? Есть ли другие идеи, как решить проблему?