不接受 XText 中的数字

Numbers in XText not accepted

我有以下规则:

terminal MIDI_VALUE: 
 (             '0'..'9') |
 (    '1'..'9' '0'..'9') |
 ('1' '0'..'1' '0'..'9') |
 ('1' '2'      '0'..'7');

此规则旨在读取 [0..127] 中的值。

但是,它不接受来自 [1..16] 的值,而接受 0 和 17 到 127。

当我将鼠标悬停在错误上时,我得到:

mismatched input: '16' expecting RULE_MIDI_VALUE.

我该如何解决这个问题?

第二个例子

这个例子可能更简单:

DmxDelayTimeSubCommand:
    'DelayTime' time=Time;

Time:
    time=INT type=('ms' | 's' );

同时输入

    AllFrontBlue AllGroupsAll Mode loop DelayTime 255 ms;

将鼠标悬停在上面时显示超过 255 的错误:

Mismatched input '255' expecting RULE_INT

虽然 RULE_INT 是预定义的终端:

terminal INT returns ecore::EInt: ('0'..'9')+;

对于低于 256 的所有值(来自 [0..255] 的所有值),我都会收到此错误。

规则 MIDI_VALUEINT 相互重叠。

可能的解决方案

  1. 使用 INT + 验证器(对所有这些)
  2. 使用像 MIDI_CHANNEL: INT 这样的数据类型规则(没有终端关键字)+ 值转换器
  3. 使用不重叠的终端规则和数据类型规则MIDI_CHANNEL: TERMINAL1|TERMINAL2| ....