java - Antlr树语法

标签 java tree antlr grammar abstract-syntax-tree

我在从解析器语法转移到树语法时遇到问题,当我使用树运算符 (^,!) 而不是重写规则 (->) 时,问题就出现了

where_clause
    :   'where'! condition_or
    ;

condition_or
    :   condition_and ( 'or'^ condition_and )*
    ;

condition_and
    :   condition_expr ( 'and'^ condition_expr )*
    ;

condition_expr
    :   condition_comparision
//  |   condition_in
//  |   condition_like
    ;

condition_comparision
    :   column_identifier ('=' | '!=' | '>' | '<')^ sql_element
    ;

对于上面的解析器语法,树语法器会是什么样子?由于这不是递归的,我无法将其折叠成树语法中的单个规则。

使用重写语法强制重写解析器语法的另一种选择

condition_or
    :   condition_and -> condition_and 
     ( 'or' x=condition_and -> ^('or' condition_or $x))*
    ;

有没有更简单的方法来做到这一点?

谢谢

最佳答案

相应的树语法如下所示:

where_clause
    :   condition_or
    ;

condition_or
    :   ^('or' condition_and condition_and)
    ;

condition_and
    :   ^('and' condition_expr condition_expr)
    ;

condition_expr
    :   condition_comparision
    ;

condition_comparision
    :   ^('=' column_identifier sql_element)
    |   ^('!=' column_identifier sql_element)
    |   ^('>' column_identifier sql_element)
    |   ^('<' column_identifier sql_element)
    ;

关于java - Antlr树语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10393786/

相关文章:

java - 在 Java 中解析 YAML Front matter

c - 在循环中使用递归时如何展开?

c++ - 使用尾递归访问树或图形结构

java - 我应该如何针对 "expression+"模式运行操作?

java - 递归遍历树的深度优先问题

java - XStream 使用 toXML(Object, StreamWriter) 缺少换行符

java - 多次返回的递归混淆

java - java中 "this"和没有 "this"之间的区别

java - "Count Complete Tree Nodes"- 如何优化解决方案?

java - 采用 "not"但不采用 "not like"的词法分析器