不接受 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_VALUE
和 INT
相互重叠。
可能的解决方案
- 使用
INT
+ 验证器(对所有这些)
- 使用像
MIDI_CHANNEL: INT
这样的数据类型规则(没有终端关键字)+ 值转换器
- 使用不重叠的终端规则和数据类型规则
MIDI_CHANNEL: TERMINAL1|TERMINAL2| ....
我有以下规则:
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_VALUE
和 INT
相互重叠。
可能的解决方案
- 使用
INT
+ 验证器(对所有这些) - 使用像
MIDI_CHANNEL: INT
这样的数据类型规则(没有终端关键字)+ 值转换器 - 使用不重叠的终端规则和数据类型规则
MIDI_CHANNEL: TERMINAL1|TERMINAL2| ....