2

Xtext 文法ファイルで次のように EnumRule を定義しました。

enum MySpec_directionEnum: left='"left"' | right='"right"' | none='"none"';

このルールでは、許可される列挙値は"left", "right" and "none"(すべて小文字) です。どのような場合でもこれらの値を許可できるようにしたい (大文字と小文字を区別しない)。たとえば、値なども許可したいと思います"left" or "Left" or "LEFT" or "LeFt"

しかし、MySpec_directionEnum列挙型の値を大文字と小文字を区別せず、文法ファイル内のすべての列挙型にする必要はありません。文法や何らかの検証によって可能ですか?

4

2 に答える 2

3

あなたの最善の選択肢は、列挙型ルールを通常のパーサールールに置き換えることだと思います。

MySpec_directionEnum:
    value=STRING;

valueバリデーターで許可されている文字列 (「左」、「右」、または「なし」の大文字と小文字を区別しないバリアント) であるかどうかを確認します。

@Check
public void check(MySpec_directionEnum e) {
    String lowercaseValue = e.getValue().toLowerCase();
    if (!lowercaseValue.equals("left")) {
        error("Expected \"left\".", e, 
            ArithmeticsPackage.Literals.MY_SPEC_DIRECTION_ENUM__VALUE,
            validationMessageAcceptor.INSIGNIFICANT_INDEX);
    }
}
于 2011-12-13T08:41:53.070 に答える
0

あなたが試すことができるすべての可能性を書くのに非常に勤勉であるなら

enum TestEnum:
    x='x'| x='X' | y='y' | y='Y'
;
于 2011-12-15T20:09:00.223 に答える