1

我目前正在使用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

对于这么长的信息,我真的很抱歉,但我不知道我还能如何更好地向你解释。我会感激任何想法!

先感谢您!
凯特

4

0 回答 0