繁体   English   中英

ANTLR规则不匹配

[英]ANTLR Rule Not Matching

这应该是一个简单的问题。 给定此解析器规则:

ifStatement
 : expr3b=IF logical (~(THEN)) expression* (ELSE expression *)? ENDIF // missing THEN
 ;

为什么这不匹配此字符串?

"IF CODE=\"10\" DUE_DATE < YESTERDAY ENDIF"

IFTHENELSEENDIF是完全定义为您假设的标记。 logicalexpression是其他规则)。

我认为以下行是您的语法中的惯用语。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM