创建表达式以使用Xtext DSL从实体获取子元素

时间:2015-01-20 00:56:51

标签: eclipse dsl xtext

我想知道,如何使用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]作为特定元素的标识符,但我不知道如何从中获取这些子元素。

我该如何处理?

1 个答案:

答案 0 :(得分:2)

您正在使用nameEntity的{​​{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)*; 名称来标识变量。我刚试过它,开箱即用。