Xtext将元素添加到父功能

时间:2017-01-27 00:08:11

标签: xtext

我想使用Xtext实现一个特定于域的语言,而且我在保持内容清洁和可重用方面遇到了一些麻烦。请考虑以下示例:

Spec:
    'spec' '(' attrs=AttrAsgnList? ')';
AttrAsgnList:
    attrs+=AttrAsgn (',' attrs+=AttrAsgn)*;
AttrAsgn:
    name=ID '=' value=INT;

在Xtend中使用它,现在可以访问像这样的单个属性(给定一个Spec对象):

for (a : spec.attrs.attrs) ...

如果我每次想要访问属性时都不需要经历两个级别,我会更喜欢它。防止这种情况的显而易见的方法是将整个 AttrAsgnList 规则内联到 Spec 中,以便 Spec attrs 功能>成为一个清单。但是,我需要在我的DSL中使用这样的结构,并且重复复制它是不好的风格。

我基本上在寻找一种方法将单个 AttrAsgn 元素直接输入到父 attrs 功能中。这是可能的,还是我坚持要么与间接生活在一起,要么通过内联来淹没一切?

1 个答案:

答案 0 :(得分:0)

在你的情况下应该没问题

displayBlock

并且没有没有直接的方法来阻止此副本和粘贴

唯一的机会是m2m到<style>,但这意味着你会有两次元素,所以你不得不混淆语法和元模型http://xtextcasts.org/episodes/18-model-optimization