Xtext枚举值设置

时间:2014-11-19 15:21:28

标签: enums xtext

我有像这样的ecore元模型

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属性的值,例如,但不能影响枚举。

我是否在枚举访问中遗漏了某些内容,或者我做错了什么?

1 个答案:

答案 0 :(得分:2)

您可以为同一个枚举

设置多个规则
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='-';