我目前正在使用Xtext为域特定语言编写解析器。为了检查表达式中数据类型使用的有效性,我还使用了Xtext 类型系统框架。
我想在我的语法中包含多维数组,并且就 Xtext 而言我已经做到了,但是我在类型系统方面遇到了问题。
我在 Xtext 中关于数组的语法如下:
ArrayType:
{ArrayType}(basetype=BaseType (dim+=Dimensions)+)
;
BaseType:
PrimaryType | StructuredType
;
Dimensions:
{Dimensions}'['size=Expr ']'
;
上述语法的一个例子是 int[5] name; (井名实际上不包含在这部分语法中)。
现在,让我们看看我在类型系统中所做的事情,以便根据本教程(类型递归特性部分)声明 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
对于这么长的信息,我真的很抱歉,但我不知道我还能如何更好地向你解释。我会感激任何想法!
先感谢您!
凯特