gpt4 book ai didi

java - Antlr4 - 子句的排序

转载 作者:行者123 更新时间:2023-11-30 02:57:13 24 4
gpt4 key购买 nike

我有这个规则:

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 ;

关于java - Antlr4 - 子句的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36890878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com