我需要一些关于 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
)
;
用于解析连接表达式:它吃光了
(table/query) (join (table/query) on (field=field))*
但我需要处理每个连接周围的“()”,所以它可以解析如下内容:
((((table1 JOIN table2 ON field1=field2) JOIN table3 ON field2=field3) JOIN...)
没有括号它可以正常工作,但我不知道如何将左右括号添加到规则中,因为multijoinexpression *