我目前正在使用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
我很抱歉这条长信息,但我不知道我怎么能更好地向你解释。我会感激任何想法!
提前谢谢!
凯特