[英]ANTLR Rule Not Matching
这应该是一个简单的问题。 给定此解析器规则:
ifStatement
: expr3b=IF logical (~(THEN)) expression* (ELSE expression *)? ENDIF // missing THEN
;
为什么这不匹配此字符串?
"IF CODE=\"10\" DUE_DATE < YESTERDAY ENDIF"
( IF
, THEN
, ELSE
和ENDIF
是完全定义为您假设的标记。 logical
和expression
是其他规则)。
我认为以下行是您的语法中的惯用语。
ifStatement : expr3b=IF logical (~(THEN)) expression* (ELSE expression *)? ENDIF;
如果是这种情况,那么您需要将其更改为:
ifStatement : expr3b=IF logical expression* (ELSE expression *)? ENDIF;
实际上, (~(THEN))
说“匹配任何一个令牌,只要它不是THEN
。” logical
结束后的第一个标记是DUE_DATE
ID
(或类似值)。 ifStatement
它来实现(~(THEN))
。 这使得< YESTERDAY
可以满足expression
,但失败。
由于ENDIF
满足(~(THEN))
,因此ifStatement
将接受以下输入:
IF CODE=\"10\" ENDIF DUE_DATE < YESTERDAY ENDIF
这将按预期工作,因为第一个ENDIF
仅用于匹配(~(THEN))
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.