【发布时间】:2014-12-28 15:03:43
【问题描述】:
我正在解析类似 SQL 的语言。
我想解析完整的 SQL 语句,例如:SELECT .. FROM .. WHERE 以及一个简单的 expr 行,它可以是函数、where 子句、expr 和算术。
这是语法的重要部分:
// main rule
parse : (statments)* EOF;
// All optional statements
statments : select_statement
| virtual_column_statement
;
select_statement :
SELECT select_item ( ',' select_item )*
FROM from_cluase ( ',' from_cluase )*
(WHERE where_clause )?
( GROUP BY group_by_item (',' group_by_item)* )?
( HAVING having_condition (AND having_condition)* )?
( ORDER BY order_clause (',' order_clause)* )?
( LIMIT limit_clause)?
| '(' select_statement ')'
virtual_column_statement:
virtual_column_expression
;
virtual_column_expression :
expr
| where_clause
| function
| virtual_column_expression arithmetichOp=('*'|'/'|'+'|'-'|'%') virtual_column_expression
| '(' virtual_column_expression ')'
;
virtual_columns 效果很好。
选择查询也可以,但完成后,它也会转到 virtual_column_statement。
我希望它选择一个。
我该如何解决这个问题?
编辑: 经过一番研究,我发现 antlr 将我的查询分为两个不同的部分。
我该如何解决这个问题?
谢谢, 身份证
【问题讨论】:
标签: antlr4