Простой редактор Xtext для части сложной грамматики

У меня есть сложная грамматика 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»? Определить ли это также в отдельной грамматике, а затем импортировать грамматику в обе грамматики? Есть ли другие идеи, как решить проблему?


person Michael    schedule 24.09.2012    source источник


Ответы (1)


Если эта небольшая часть грамматики самодостаточна, вы можете переместить ее в отдельное определение грамматики и импортировать ее в свою сложную грамматику (точно так же, как вы импортируете определение ecore).

Важной частью разделения сложной и упрощенной грамматики является то, что правила сложной грамматики могут ссылаться на типы и правила в упрощенной грамматике, но не наоборот.

И чтобы все это работало на практике, необходима некоторая настройка рабочего процесса MWE. Здесь я не могу ссылаться на конкретные инструкции, это может быть это изменение .

person Bananeweizen    schedule 24.09.2012
comment
Мне нравится ваша идея, но я не уверен, что смогу использовать ее для своего примера. Я отредактировал свой вопрос выше. Теперь вы видите, что это сложнее. Как вы думаете, это все еще будет работать? Похоже, мне пришлось бы создать несколько подграмматик, чтобы построить свою ComplexGrammar. Заранее спасибо. - person Michael; 24.09.2012
comment
Извините за этот лишний пост, но я не смог отредактировать свой комментарий: представьте, что я определяю RequiredPart --> GlobalPartA в сложной грамматике. Как я могу получить к этому доступ при разделении моей грамматики для FeatureY в отдельном редакторе? Вот почему я подумал, что могу использовать что-то вроде всей грамматики в фоновом режиме, но отображать редактор только для FeatureY - если это возможно. Тогда у него будут определенные необходимые части в фоновом режиме. - person Michael; 24.09.2012
comment
Я понятия не имею, можно ли заставить редактор xtext редактировать только подправило, а не корневое правило. Если вы хотите отредактировать эту FeatureY, вам нужна перекрестная ссылка на GlobalPart, но вы не можете создать ее в своем ограниченном редакторе. Я понятия не имею, как можно создать экземпляр в фоновом режиме. Похоже, вам следует задать свой вопрос на форуме xtext Eclipse или в списке рассылки, чтобы найти для этого эксперта. - person Bananeweizen; 25.09.2012