我希望能够创建包含块的库,将库导入单独的文件,然后在blockUse语句中使用库中的块。
我创建了以下语法:
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals
generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
Program:
(imports+=Import)*
(libraries+=Library)*
(customBlocks+= Block)*
(blockUses+= BlockUse)*
;
Import:
'import' importedNamespace=QualifiedNameWithWildcard
;
QualifiedNameWithWildcard:
QualifiedName '.*'?
;
QualifiedName:
ID ('.' ID)*
;
Library:
'Library' name=QualifiedName
(blocks+=Block)+
'EndLibrary'
;
Block:
'block' name=ID
;
BlockUse:
'show' block=[Block|QualifiedName]
;
我的最终目标是我可以创建两个文件,一个使用库,另一个使用该库中的块,如下所示:
文件1:
Library lib1
block block1
block block2
EndLibrary
文件2:
import lib1.*
show block1
我认为我的大部分困惑来自importedNamespace
背后的含义并使用cross references
这些是我已经尝试过的一些例子:
http://www.eclipse.org/Xtext/documentation/102_domainmodelwalkthrough.html#add-imports http://blog2.vorburger.ch/2013/05/xtext-dsl-with-epackage-namespace.html https://blogs.itemis.com/en/in-five-minutes-to-transitive-imports-within-a-dsl-with-xtext
答案 0 :(得分:0)