現在、 Xtextを使用してドメイン固有言語のパーサーを作成しています。式で使用されているデータ型の有効性を確認するために、 Xtext typesystem Frameworkも使用します。
文法に多次元配列を含めたいと思っており、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
長いメッセージで本当に申し訳ありませんが、他にどのように説明すればよいかわかりません。どんなアイデアでも大歓迎です!
前もって感謝します!
ケイト