2016-04-27 17 views
1

Ich habe diese Regel:Antlr4 - Bestellung von Klauseln

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 
    ; 

Dies gilt;

SELECT name FROM /tmp 
IGNOREHIDDENFILES true 
FOLLOWSYMLINKS true 

Dies ist jedoch nicht gültig: von der Oberseite meines Kopfes

SELECT name FROM /tmp 
FOLLOWSYMLINKS true 
IGNOREHIDDENFILES true 

ich der Regel sagen mag, dass die Reihenfolge keine Rolle spielt für IGNOREHIDDENFILES und FOLLOWSYMLINKS

Antwort

2

Just - Erstellen Sie eine Unterregel und verwenden Sie sie mit * in query.

EDIT Nach @NiloPaim im Kommentar erwähnt, habe ich die Änderung der * wildcard.Something wie nicht zu verwenden:

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

Vielen Dank! Das hat das Problem gelöst – Flukey

+0

Gern geschehen! – cantSleepNow

+1

Seien Sie bei einer Sache vorsichtig: Sie können IGNOREHIDDENFILES- oder FOLLOWSYMLINKS-Klauseln auf Ihrer Eingabe ohne Analysefehler wiederholt haben. Vielleicht möchten Sie dies auf einen Hörer oder einen Besucher überprüfen ... –