java - Antlr4 - 子句的排序

标签 java parsing antlr 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 来说,顺序并不重要

最佳答案

我突然想到 - 创建一个子规则,并在 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/

相关文章:

java - 自定义 ToggleButton setChecked(..) 问题

java.lang.ClassCastException : java. lang.String 无法转换为 Category 类型

Java Jackson json 对象反序列化。如何处理 OWASP 不安全的反序列化?

java - 如何执行 parse() 并返回正确的值

javascript - 解析小文件性能

java - XText 验证 - 在验证期间获取原始输入

regex - Antlr 解析器是贪婪的吗?

Java固定内存映射

c# - 如何从网页中的链接读取 url 参数的内容?

java - 将 ANTLR 解析树转换为 JSON