Antlr 语义谓词从Antr3到Antr4的翻译
在我的Antlr3语法中,我使用以下lexer规则来识别固定的日期周期,例如“1年4个月”: (来自巴特·基尔斯的,应该得到的信贷) 不幸的是,这种语法在ANTLR4中已经消失了。因此,我尝试了以下方法,但没有成功:Antlr 语义谓词从Antr3到Antr4的翻译,antlr,antlr4,Antlr,Antlr4,在我的Antlr3语法中,我使用以下lexer规则来识别固定的日期周期,例如“1年4个月”: (来自巴特·基尔斯的,应该得到的信贷) 不幸的是,这种语法在ANTLR4中已经消失了。因此,我尝试了以下方法,但没有成功: DATE_PERIOD_CONSTANT : (INTEGER ' '+ (YEAR | MONTH | WEEK | DAY))+ | {getText().matches("(\\d+ (YEAR(S)?|MONTH(S)?|WEEK(S)?|DAY(S)?))+")}? IN
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
这也是不成功的
有人能帮我翻译成新格式吗
Jason示例lexer规则使用语法谓词,而不是语义谓词。这些在ANTLR 4中是不必要的,因为它大大提高了前瞻能力。您只需删除它们:
DATE_PERIOD_CONSTANT (' '+ DATE_PERIOD_CONSTANT)*
DATE_PERIOD_CONSTANT (' '+ DATE_PERIOD_CONSTANT)*