在我的Antlr3语法中,我使用以下词法分析器规则来识别一个不变的日期,例如“1年4个月”:
(DATE_PERIOD_CONSTANT)=> DATE_PERIOD_CONSTANT ((' '+ DATE_PERIOD_CONSTANT)=> ' '+ DATE_PERIOD_CONSTANT)*
(信用到期,来自Bart Kiers)。
不幸的是,ANTLR4中的语法已经消失了。所以,我没有成功尝试以下方法:
DATE_PERIOD_CONSTANT
: (INTEGER ' '+ (YEAR | MONTH | WEEK | DAY))+
| {getText().matches("(\\d+ (YEAR(S)?|MONTH(S)?|WEEK(S)?|DAY(S)?))+")}? INTEGER
;
INTEGER
: DIGIT+
;
fragment DIGIT:'0'..'9';
// YEAR/MONTH/WEEK/DAY definition
这也不成功。
有人可以帮我翻译新格式吗?
杰森
答案 0 :(得分:2)
示例词法分析器规则使用语法谓词,而不是语义谓词。这些在ANTLR 4中是不必要的,因为它的前瞻能力大大提高。您所要做的就是删除它们:
DATE_PERIOD_CONSTANT (' '+ DATE_PERIOD_CONSTANT)*