Natty 从 anlr3 转换为 antlr 4
Natty converting from anlr3 to antlr 4
因为我是 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 visitor pattern on simple arithmetic example
- 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
;
因为我是 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 visitor pattern on simple arithmetic example
- 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
;