ANTLRについて助けが必要です。次のルールがあります。
datasource
@init{boolean joinexpr = false;}
:
(s1=datasourceelement (joinclause1=joinclause joinelement1=datasourceelement onclause1=onclause (multijoinexpression)* {joinexpr=true;})?)
-> {joinexpr}? ^(JOINEXPRESSION
^(LEFTEXPR $s1?)
$joinclause1?
^(RIGHTEXPR $joinelement1?) $onclause1? multijoinexpression*
)
-> $s1
;
multijoinexpression
:
joinclause datasourceelement onclause
->
^(MULTIJOINEXPRESSION
joinclause
^(RIGHTEXPR datasourceelement) onclause
)
;
これは、結合式を解析するためのものです。それは食べ尽くします
(テーブル/クエリ) ((フィールド=フィールド) で (テーブル/クエリ) を結合)*
しかし、各結合の周りの「()」を処理する必要があるため、次のように解析できます。
((( table1 JOIN table2 ON field1=field2) JOIN table3 ON field2=field3 ) JOIN...)
角かっこがなくても問題なく動作しますが、左右の角かっこをルールに追加する方法がわかりません。