对于练习,我目前正在为简单的SELECT语句定义语法,例如
SELECT * FROM table1 as t1 JOIN table 2 AS t2 ON (t1.field1=t2.field2);
为此,我使用XText。以下是语法的摘录,在FROM部分中定义表:
table:
name=ID (('AS')? alias=ID)?
|
join
;
join:
left_table=table (type=join_type)? 'JOIN' right_table=table 'ON' condition=predicate
;
显然,规则“表”是递归的。 我已经阅读了所有指南,描述了如何在XText(或分别是ANTLR)中解析左递归。但我不明白,或者至少,我无法将解释映射到我的特定代码......
我的定义有什么问题,如何解决左递归?
答案 0 :(得分:1)
这对你的语法来说是一个很大的操作。
为什么它是左递归的?
如何解决这个问题?
join: ('JOIN' table)*