Pregunta

I have defined an EnumRule like following in my Xtext grammar file:

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

With this rule the allowed enum values are "left", "right" and "none" (all in lower case). I want to be able to allow these values in any case(case insensitive). For example I want to also allow the values to be "left" or "Left" or "LEFT" or "LeFt" and so on.

But I just want values of MySpec_directionEnum enum to be case insensitive and not all enums in my grammar file. Is it possible through grammar or some kind of validation?

¿Fue útil?

Solución

I think your best option is to replace the enum rule with an ordinary parser rule, like

MySpec_directionEnum:
    value=STRING;

and check if value is a permitted string (case-insensitive variant of "left", "right" or "none") in the validator:

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

Otros consejos

if you are very hardworking to write up all possibilities you could try

enum TestEnum:
    x='x'| x='X' | y='y' | y='Y'
;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top