2016-04-27 24 views
1

私はこのルールを持っている:Antlr4 - 句の順序

query 
    : SELECT selectAttribute (',' selectAttribute)* 
     FROM from 
     (WHERE where=booleanExpression)? 
     (ORDER BY sortItem (',' sortItem)*)? 
     (LIMIT limit=(INTEGER_VALUE | ALL))? 
     (IGNOREHIDDENFILES ignoreHiddenFiles=booleanValue)? 
     (FOLLOWSYMLINKS followSymlinks=booleanValue)? 
     SEMICOLON 
    ; 

これは有効です。

SELECT name FROM /tmp 
IGNOREHIDDENFILES true 
FOLLOWSYMLINKS true 

しかし、これは有効ではありません。

SELECT name FROM /tmp 
FOLLOWSYMLINKS true 
IGNOREHIDDENFILES true 

私は順序がちょうど私の頭の上からIGNOREHIDDENFILESFOLLOWSYMLINKS

答えて

2

のために重要ではありませんルールを伝えたいです - サブルールを作成し、queryの*と一緒に使用します。

EDIT @NiloPaimコメントで指摘した後、私は次のように* wildcard.Somethingを使用しないように変更を加えた:ありがとう

query: query_first SEMICOLON 
    | query_first ignoreHiddenFilesPart (followSymlinksPArt)? SEMICOLON 
    | query_first followSymlinksPArt (ignoreHiddenFilesPart)? SEMICOLON 
    ; 
query_first : SELECT selectAttribute (',' selectAttribute)* 
     FROM from 
     (WHERE where=booleanExpression)? 
     (ORDER BY sortItem (',' sortItem)*)? 
     (LIMIT limit=(INTEGER_VALUE | ALL))? 
      ; 
ignoreHiddenFilesPart: IGNOREHIDDENFILES ignoreHiddenFiles=booleanValue ; 
followSymlinksPArt: FOLLOWSYMLINKS followSymlinks=booleanValue ; 
+0

!これで問題は解決しました – Flukey

+0

あなたは大歓迎です! – cantSleepNow

+1

1つのことに注意してください。パースエラーなしで入力に繰り返しIGNOREHIDDENFILESまたはFOLLOWSYMLINKS句を使用できます。多分あなたはリスナーや訪問者にこれをチェックしたいと思うかもしれません... –