C++ C++;Spirit解析复杂布尔表达式并构造等价树
我们的输入表达式与此类似(甚至更复杂): ((?var1(?var2+10))| |!(?var1==?var3)) 注意:变量总是以“?”或“\u1”开头 我们的预期产出:C++ C++;Spirit解析复杂布尔表达式并构造等价树,c++,boost,boost-spirit,boost-spirit-qi,C++,Boost,Boost Spirit,Boost Spirit Qi,我们的输入表达式与此类似(甚至更复杂): ((?var1(?var2+10))| |!(?var1==?var3)) 注意:变量总是以“?”或“\u1”开头 我们的预期产出: || / \ / \ / \ /
||
/ \
/ \
/ \
/ \
/ \
&& !
/ \ |
/ \ |
/ \ ==
/ \ / \
/ \ ?var1 ?var3
<= >
/ \ / \
/ \ / \
/ \ / \
?var1 + ?var1 +
/ \ / \
/ \ / \
/ \ / \
?var2 125 ?var2 10
||
/ \
/ \
/ \
/ \
/ \
&& !
/ \ |
/ \ |
/ \ ==
/ \ / \
/\?var1?var3
/ \ / \
/ \ / \
/ \ / \
?var1+?var1+
/ \ / \
/ \ / \
/ \ / \
?VAR2125?VAR210
非常感谢您的帮助。也许您可以从这里开始,谢谢您。我以前看过你翔实而全面的回答。这个链接也很相关,但我刚刚开始学习Spirit,我不知道如何更改代码来检测额外的字符,例如“=”、“+”,等等。你应该试试,当你遇到困难时,你有一个问题要问。事实上,这不是很适合,因为它不是一个编码问题(我们倾向于避免那种“你能为我做”或“你能只给我展示”)吗?作为一个开始暗示,不要认为它是检测“额外的字符”,而是取代现有的令牌(“和”->“&”)。然后添加变量必须以特定字符开头的逻辑。最后,一些更丰富的语法基于这个答案,并继续计算表达式