Как сделать Enum буквально нечувствительным к регистру в Xtext - PullRequest
2 голосов
/ 13 декабря 2011

Я определил EnumRule следующим образом в моем файле грамматики Xtext:

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

С этим правилом допустимые значения перечисления "left", "right" and "none" (все в нижнем регистре).Я хочу иметь возможность разрешить эти значения в любом случае (без учета регистра).Например, я хочу также разрешить значения "left" or "Left" or "LEFT" or "LeFt" и так далее.

Но я просто хочу, чтобы значения MySpec_directionEnum enum не учитывали регистр, и не все перечисления в моем файле грамматики.Это возможно с помощью грамматики или какой-то проверки?

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Я думаю, что ваш лучший вариант - заменить правило enum обычным правилом синтаксического анализа, например

MySpec_directionEnum:
    value=STRING;

и проверьте, является ли value допустимой строкой (нечувствительный к регистру вариант «left», «right» или «none») в валидаторе:

@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);
    }
}
0 голосов
/ 16 декабря 2011

, если вы очень трудолюбивы, чтобы описать все возможности, которые вы можете попробовать

enum TestEnum:
    x='x'| x='X' | y='y' | y='Y'
;
...