У меня есть собственное определение XText грамматики:XText - как использовать «импорт» в собственной грамматике
grammar org.xtext.example.mydsl.MyOtherDsl with org.eclipse.xtext.common.Terminals
generate myOtherDsl "http://www.xtext.org/example/mydsl/MyOtherDsl"
OtherModel:
Foo | Bar;
Foo: 'foo' name=ID;
Bar: 'bar' name=ID;
Теперь я хочу использовать эту грамматику в (стандартном примере) 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.xtext.org/example/mydsl/MyOtherDsl" as other
Model:
greetings+=Greeting*
foobars+=FooBar*;
Greeting: 'Hello' name=ID '!' foo=[other::Foo];
FooBar: other::Foo | other::Bar;
Хотя Greeting: 'Hello' name=ID '!' foo=[other::Foo];
работает, FooBar: other::Foo | other::Bar;
бросает ошибку: нет жизнеспособной альтернативы на входе 'другой'. В правиле Greeting
я использую ссылку для атрибута (foo
). В правиле FooBar
я просто хочу использовать его как тип. Как мне это сделать?
Любая помощь приветствуется.
Спасибо, Andreas
Привет, что ваше намеренное поведение? вы хотите вызвать правило из другой грамматики? это работает только с наследованием –
Привет, христианин, у меня очень большая грамматика DSL и вы хотите разбить ее на разные части (т. е. разделенные файлы .xtext в одном проекте). Например, грамматика разделяется на A.xtext, B.xtext и C.xtext и один общий G.xtext (для собственных терминалов и т. Д.). A, B и C используют грамматическое смешивание (ключевое слово «с») для наследования грамматики G. Но мне также нужно снова объединить A, B и C в одну грамматику, поэтому я хочу использовать здесь «import». – user3510462