在xtext中键入“inheritance”

时间:2014-02-01 18:53:56

标签: xtext

作为我大学课程的一部分,我必须使用XText构建一个简单的DSL。目前我遇到静态类型检查的问题。让我们假设我的语言有两种类型的变量,即圆形和三角形。 两者都有自己的一组参数,例如半径或高度/宽度。但是,两者都有共同的参数,如x / y(位置)。因此,我必须遵循xtext代码:

//CircleAttributesInit makes sure, that the correct parameter are used
CircleDecl:
    'circle' name = ID '(' (attributes += CircleAttributesInit)* ')'
;

//triangleAttributesInit makes sure, that the correct parameter are used
TriangleDecl:
    'triangle' name = ID '(' (attributes += triangleAttributesInit)* ')'
;

CircleAccess returns INT:
    circle = [CircleDecl] '.' ('radius') 
;

TriangleAccess returns INT:
    triangle = [TriangleDecl] '.' ('height' | 'width') 
;

ObjectDecl:
    name = (CircleDecl | TriangleDecl)
;

ObjectAccess returns INT:
    objName = [ObjectDecl] '.' ('x' | 'y')
;

在我的简单程序中,我现在可以输入类似的内容:

triangle tri (...)
circle  c (...)
tri.height = ...
c.radius = ...

但访问超类型变量,如:

tri.x = ....
c.y =....

不起作用。错误消息是:“无法解析对ObjectDecl'tri / c'的引用。” 这种方式对我来说很有意义,因为我从未告诉过xtext,每个TriangleDecl / CircleDecl对象也是一个ObjectDecl。但是我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

看起来你混淆了一些元级别。只要属性仅存在于语法级别,您就必须自己照顾