我想知道,如何使用Xtext创建DSL。 这是我创建的代码:
Model:
(entities += Entity)*
(access += Acessing)*
;
Entity:
'entity' name = ID '{'
( variables += Variable )*
'}'
;
Variable:
'var' name=ID
;
Acessing:
'use' (entity = [Entity])'.'(variable = [Variable])
;
代码有点不完整,但是这样我还是按照以下方式执行此操作:
entity user {
var name
var phone
var address
}
use user.phone
我知道我可以使用此标记[Entity]
作为特定元素的标识符,但我不知道如何从中获取这些子元素。
我该如何处理?
答案 0 :(得分:2)
您正在使用name
和Entity
的{{1}}属性。这是Xtext自动用于创建名称空间并免费提供工作范围提供程序的特殊属性。元素由其限定名称标识。您只需要一个引用即可访问它们。
要解决您的问题,您只需修改Variable
语法规则并引入描述限定名称的规则。你的语法可能如下所示:
Use
如您所见,它现在使用Model:
(entities+=Entity)*
(access+=Acessing)*;
Entity:
'entity' name=ID '{'
(variables+=Variable)*
'}';
Variable:
'var' name=ID;
Acessing:
'use' var=[Variable|QualifiedName];
QualifiedName:
ID ('.' ID)*;
名称来标识变量。我刚试过它,开箱即用。