作为一个新手,我在语法谓词方面有很多问题。我一直试图转换这个语法,它是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访问者模式的简单算术示例
- https://github.com/antlr/antlr4/blob/master/doc/tree-matching.md
所以,你发布的规则在ANTLR4中看起来像这样:
date_time
: date ( date_time_separator explicit_time )?
| explicit_time ( time_date_separator date )?
| relative_time
;