【发布时间】:2014-08-16 23:46:00
【问题描述】:
我需要实现一种特定领域的语言。我有一个面板和一些形状。
'panel' name = ID '(' title = STRING',' bgcolor = Color',' width = INT',' height = INT ')''{'((rects += Rect)| (ellipse += Ellipse)|(arcs += Arc)|)*'}'
每个形状都有一个独特的规则和一些其他特征。例如:
RoundRect:
'roundrectangle' name = ID '{'
(fill ?= 'filled' (fillpattern?='fillpattern' fillpaint=Paint)?)?
(stroke?='stroke' str=Stroke)?
'paint' paint=Paint
'coordination' x=INT ',' y=INT
'dimention' height=INT ',' width=INT
'arc' archeight=INT ',' arcwidth=INT
'}'
在这个 DSL 中很明显,我使用了一些参考资料。但我不知道这条规则是否正确,或者我应该在这些规则中使用交叉引用? 此规则工作正常,我收到了我期望的正确输出。但我知道当一个特性不是基本类型(字符串、整数等)时,它是 实际上是一个引用(EReference 的一个实例),这是一个包含引用,尽管对于非包含引用,被引用的对象存储在其他地方, 例如,在同一资源的另一个对象中,甚至在不同的资源中。 重点是交叉引用被实现为非包含引用。 我需要知道何时应该使用交叉引用以及何时使用包含引用?
【问题讨论】:
标签: dsl xtext emf cross-reference