2
我无法从语法分析器移动到树文法
,问题是当我使用树运算符(^,!),而不是重写规则( - >)ANTLR的树语法
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))*
;
有没有什么简单的方法来做到这一点有力地改写解析器语法?
感谢
你使它看起来那么容易。再次感谢。 –