【发布时间】:2018-06-25 12:23:07
【问题描述】:
我正在尝试使用以下规则匹配持续时间字符串,例如 for 30 minutes 或 for 2 hours:
durationPhrase: FOR_STR (MINUTE_DURATION | HOUR_DURATION);
MINUTE_DURATION: NONZERO_NUMBER MINUTE_STR;
HOUR_DURATION: NONZERO_NUMBER HOUR_STR;
MINUTE_STR: 'minute'('s')?;
HOUR_STR: 'hour'('s')?;
FOR_STR: 'for';
NONZERO_NUMBER: [0-9]+;
WS: (' '|[\n\t\r]) -> skip;
使用以下输入:
for 30 minutes
尝试调试/匹配 durationPhrase 规则时,出现错误:
line 1:4 mismatched input '30' expecting {MINUTE_DURATION, HOUR_DURATION}
但我似乎无法弄清楚“30”匹配的是什么词法分析器规则?我的印象是“最长”的词法分析器规则会胜出,这将是MINUTE_DURATION 规则。
是不是先匹配NONZERO_NUMBER?如果是这样,为什么?
【问题讨论】: