如何在Xtext中使Enum文字区不敏感

时间:2011-12-13 08:04:28

标签: validation grammar case-insensitive rule xtext

我在我的Xtext语法文件中定义了一个EnumRule:

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

使用此规则,允许的枚举值为"left", "right" and "none"(全部为小写)。我希望能够在任何情况下允许这些值(不区分大小写)。例如,我想也允许值为"left" or "Left" or "LEFT" or "LeFt",依此类推。

但我只想要 MySpec_directionEnum 枚举的值不区分大小写,而不是我的语法文件中的所有枚举。是否可以通过语法或某种验证?

2 个答案:

答案 0 :(得分:3)

我认为您最好的选择是使用普通的解析器规则替换枚举规则,例如

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);
    }
}

答案 1 :(得分:0)

如果你非常努力地写下你可以尝试的所有可能性

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