我需要有人帮我。我有以下规则:
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
)
;用于解析联接表达式:它消耗殆尽。
(表/查询)(连接(表/查询) on (field=field))*
但是我需要处理每个联接周围的"( )“,这样它就可以解析如下所示的内容:
( table1 table2 ON field1=field2)加入table3 ON field2=field3 )联接.)
如果没有括号,它就能正常工作,但我不知道如何将左括号和右括号添加到规则中,因为使用了多重连接表达式*
发布于 2013-02-01 11:19:28
这解决了问题。我也觉得它很丑,但很管用。
(
//1-2
(LPARAM simplejoin RPARAM) multijoinexpression?
|//2-3
(LPARAM (LPARAM simplejoin RPARAM) multijoinexpression RPARAM) multijoinexpression?
|//3-4
(LPARAM (LPARAM (LPARAM simplejoin RPARAM) multijoinexpression RPARAM) multijoinexpression RPARAM)
multijoinexpression?
|//4-5
(LPARAM
(LPARAM (LPARAM (LPARAM simplejoin RPARAM) multijoinexpression RPARAM) multijoinexpression RPARAM)
multijoinexpression RPARAM) multijoinexpression?
) ->^(JOINEXPRESSION simplejoin multijoinexpression* ) https://stackoverflow.com/questions/14444079
复制相似问题