2014-11-19 7 views
0

У меня есть Ecore метамодель как этотXText перечисление значение настройки

Pattern 
    direction:Direction 
    patternDetail:Details 

Direction 
    BOTH=0 
    LEFT=1 
    RIGHT=2 

это упрощение, но это представление языка графа запросов, которые используют шаблоны. Узор как направление и некоторые детали (имя, что угодно)

В моих грамматиках я хочу разобрать некоторые материалы, где информация направления находится на 2-х местах, например

<-[patterndetails]-> (direction = BOTH) 
-[patterndetails]-> (direction = RIGHT) 
<-[patterndetails]- (direction = LEFT) 

Так что я создал это правило

Pattern returns Pattern: 
    '<-'patternDetails=PatternDetails'->' 
    |'<-'patternDetails=PatternDetails'-' 
    |'-'patternDetails=PatternDetails'->' 
    ; 

Но я не могу понять, как я могу установить связанное направление. Я пытаюсь добавить direction=Direction.BOTH в конце первой строки, но это невозможно. Это кажется странным, потому что можно влиять на значение для атрибута EString, например, но не для перечислений.

Я пропустил что-то в доступе enum или я делаю это неправильно?

ответ

2

Вы можете иметь несколько правил для одной и той же Enum

Pattern returns Pattern: 
    '<-' patternDetails=PatternDetails direction=Both 
    | '<-' patternDetails=PatternDetails direction=Left 
    | '-' patternDetails=PatternDetails direction=Right; 

enum Direction: 
    BOTH | 
    LEFT | 
    RIGHT; 

enum Both returns Direction: 
    BOTH='->'; 

enum Right returns Direction: 
    RIGHT='->'; 

enum Left returns Direction: 
    LEFT='-'; 
+0

спасибо! Я не знал, как это сделать – zelus

Смежные вопросы