Xtext类型系统多维数组支持

时间:2012-09-16 12:23:56

标签: multidimensional-array xtext

我目前正在使用Xtext编写域特定语言的解析器。为了检查表达式中数据类型用法的有效性,我还使用Xtext typesystem Framework

我想在我的语法中包含多维数组,就Xtext而言,我已经完成了它,但是我遇到了类型系统的问题。

我在Xtext中关于数组的语法如下:

ArrayType:
{ArrayType}(basetype=BaseType  (dim+=Dimensions)+)
;

BaseType:
PrimaryType | StructuredType
;

Dimensions:
{Dimensions}'['size=Expr ']'
;

上述语法的一个例子是int [5] name; (好的名字实际上不包括在这部分语法中)。

现在,让我们根据this tutorial(类型递归功能部分)继续我在类型系统中所做的工作,以声明ArrayTypes。

public EObject type(ArrayType a_t, TypeCalculationTrace trace)
{
    ArrayType arraytype= (ArrayType) Utils.create(lang.getArrayType());
    EObject basetype = typeof(a_t.getBasetype(),trace);
    arraytype.setBasetype((BaseType) basetype);
    return arraytype;
}
declareTypeRecursionFeature(lang.getArrayType(), lang.getArrayType_Basetype());

所以如果我声明一个变量int [5] k;返回的类型是ArrayType(int)。

我想要做的是,我不能在类型中包含数组维度的数量。例如,

int[3][2] k; //this should be of type ArrayType(int)[][]
int[5] g;    //this should be of type ArrayType(int)[]
k[3][1]=3;    //must be right
k[3]=g;      //must be right
k=g;       //must be wrong

我很抱歉这条长信息,但我不知道我怎么能更好地向你解释。我会感激任何想法!

提前谢谢!
凯特

0 个答案:

没有答案