Вопрос: Я хотел бы иметь блок выполнения в моей грамматике, который позволяет использовать любую допустимую строку java (или любую строку, это тоже будет хорошо) в пределах своих границ:Как разрешить строку Java-кода в грамматике Xtext
Execution:
{Execution} 'execute {'
(lines+=(JavaLine | Referral))*
'}'
;
Referral:
inReferal | outReferal
;
inReferal:
name=ID '<=' port=ID
;
outReferal:
name=ID '=>' port=ID
;
JavaLine:
{JavaLine}(words+=ID)* ';' // this doesn't fit quite its needs, no . - { etc allowed
;
Это соответствующая часть грамматики, как бы я должен построить JavaLine для того, чтобы получить какую-либо строку?
Бонус Вопрос: У меня есть другие правила, такие как OutPort или Parameter, как я могу предотвратить их использование в моем блоке выполнения? (Я получаю синтаксис выделен из ключевых слов в пределах моих ява линий)
Model:
stages+=Stage*;
Stage:
'stage' name=ID (('implements' interfaces=List)? & ('extends' extension=ID)?) '{'
lines+=StageItems*
'}';
List: items+=ID (',' items+=ID)*;
StageItems:
InPort | OutPort | Parameter | Execution
;
Parameter:
'param' type=ID name=ID
;
InPort:
'in' type=ID name=ID
;
OutPort:
'out' type=ID name=ID
;
Спасибо за ваш ответ. Могу ли я каким-то образом импортировать существующую java-грамматику? Единственное, что я хотел бы сделать, это полностью скопировать содержимое в блок выполнения. –