3
我使用升压精神的序列,例如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?