从Antr3到Antr4的语义谓语的翻译

时间:2013-03-14 17:28:11

标签: antlr antlr4

在我的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

这也不成功。

有人可以帮我翻译新格式吗?

杰森

1 个答案:

答案 0 :(得分:2)

示例词法分析器规则使用语法谓词,而不是语义谓词。这些在ANTLR 4中是不必要的,因为它的前瞻能力大大提高。您所要做的就是删除它们:

DATE_PERIOD_CONSTANT (' '+ DATE_PERIOD_CONSTANT)*