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验证器中是否是允许的字符串(“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);
    }
}
于 2011-12-13T08:41:53.070 回答
0

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

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