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))*
;
有沒有什麼簡單的方法來做到這一點有力地改寫解析器語法?
感謝
你使它看起來那麼容易。再次感謝。 –