BOOST SPIRIT解析 - 创建正确的AST树
问题描述:
我使用升压精神的序列,例如BOOST SPIRIT解析 - 创建正确的AST树
t1 JOIN t2 JOIN t3 JOIN ... JOIN tn
分析和结果应该是AST树与语义
((...((t1 JOIN t2) JOIN t3) JOIN ...) JOIN tn)
我试图用规则如:
source = singleTable | (source >> JOIN >> singleTable);
但是,根据Boost Spirit设计,解析过程仅使用规则a的第一部分nd仅解析表达式中的第一项(“t1”),并将剩余的序列解析为不连续(“JOIN t2 JOIN t3 JOIN ... JOIN tn”)。
哪个是解决这个问题的最好方法?
我可以重写喜欢
source = (singleTable >> JOIN >> source) | singleTable;
但在这种情况下,规则的创建AST的样子
(t1 JOIN (t2 JOIN (t3 JOIN (... JOIN tn)...))).
所以我需要补充处理步骤,以获得AST所需表格。
解析后是否有其他方法提供正确的AST?
答
* Aside数据库引擎不会像这样盲目地创建它们的AST。更可能的是,他们可能会创建一个无序的行源列表((连接到)表/视图),并让查询优化器计算出如何优化计划执行。
除非您的实际AST的一个更好的例子,下面是更接近一个规则:
singleTable >> - ("JOIN" >> source)