1

現在、 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

長いメッセージで本当に申し訳ありませんが、他にどのように説明すればよいかわかりません。どんなアイデアでも大歓迎です!

前もって感謝します!
ケイト

4

0 に答える 0