我有这个规则:

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顺序无关紧要

最佳答案

从我的头顶开始-创建一个子规则,并在query中将其与*一起使用。

编辑@NiloPaim在注释中指出之后,我进行了更改以不使用*通配符。

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 ;

10-06 10:25