Antlr4 Natty从anlr3转换为antlr 4

Antlr4 Natty从anlr3转换为antlr 4,antlr4,antlr3,natty,Antlr4,Antlr3,Natty,由于我是antlr的新手,我在语法谓词方面有很多问题。 我一直在尝试转换这个语法,这是natty语法的一部分,为了用antlr4解析它,我真的很困惑如何以有意义的方式更改它 date_time : ( (date)=>date (date_time_separator explicit_time)? | explicit_time (time_date_separator date)? ) -> ^(DATE_TIME date? explicit_

由于我是antlr的新手,我在语法谓词方面有很多问题。 我一直在尝试转换这个语法,这是natty语法的一部分,为了用antlr4解析它,我真的很困惑如何以有意义的方式更改它

date_time
 : (
      (date)=>date (date_time_separator explicit_time)?
      | explicit_time (time_date_separator date)?
    ) -> ^(DATE_TIME date? explicit_time?)
  | relative_time -> ^(DATE_TIME relative_time?)
  ;`

ANTLR4不再支持语法谓词和重写规则。ANTLR4的解析算法应该足够强大,不需要语法谓词,如果您想遍历解析树,请查看以下链接:

因此,您发布的规则在ANTLR4中如下所示:

date_time
 : date ( date_time_separator explicit_time )?
 | explicit_time ( time_date_separator date )?
 | relative_time
 ;