【发布时间】:2012-05-01 05:05:18
【问题描述】:
我在从解析器语法迁移到树语法时遇到了问题,当我使用树运算符 (^,!) 而不是重写规则 (->) 时出现问题
where_clause
: 'where'! condition_or
;
condition_or
: condition_and ( 'or'^ condition_and )*
;
condition_and
: condition_expr ( 'and'^ condition_expr )*
;
condition_expr
: condition_comparision
// | condition_in
// | condition_like
;
condition_comparision
: column_identifier ('=' | '!=' | '>' | '<')^ sql_element
;
对于上面的解析器语法,树语法会是什么样子?由于这不是递归的,因此我无法将其折叠成树语法中的单个规则。
使用重写语法强制重写解析器语法的另一种方法
condition_or
: condition_and -> condition_and
( 'or' x=condition_and -> ^('or' condition_or $x))*
;
有没有更简单的方法?
谢谢
【问题讨论】:
标签: java tree antlr grammar abstract-syntax-tree