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?