Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;Spirit解析复杂布尔表达式并构造等价树_C++_Boost_Boost Spirit_Boost Spirit Qi - Fatal编程技术网

C++ C++;Spirit解析复杂布尔表达式并构造等价树

C++ C++;Spirit解析复杂布尔表达式并构造等价树,c++,boost,boost-spirit,boost-spirit-qi,C++,Boost,Boost Spirit,Boost Spirit Qi,我们的输入表达式与此类似(甚至更复杂): ((?var1(?var2+10))| |!(?var1==?var3)) 注意:变量总是以“?”或“\u1”开头 我们的预期产出: || / \ / \ / \ /

我们的输入表达式与此类似(甚至更复杂):

((?var1(?var2+10))| |!(?var1==?var3))

注意:变量总是以“?”或“\u1”开头

我们的预期产出:

                            ||
                          /   \
                        /      \  
                      /          \
                    /              \ 
                   /                 \ 
                 &&                   ! 
                /  \                  |
              /     \                 | 
            /        \                ==
          /            \             /  \
        /                \      ?var1    ?var3
      <=                   >
     / \                  / \
    /   \                /   \
   /     \              /     \
?var1      +        ?var1      +
          / \                 / \
         /   \               /   \
        /     \             /     \
      ?var2   125         ?var2   10
||
/   \
/      \  
/          \
/              \ 
/                 \ 
&&                   ! 
/  \                  |
/     \                 | 
/        \                ==
/            \             /  \
/\?var1?var3
/ \                  / \
/   \                /   \
/     \              /     \
?var1+?var1+
/ \                 / \
/   \               /   \
/     \             /     \
?VAR2125?VAR210

非常感谢您的帮助。

也许您可以从这里开始,谢谢您。我以前看过你翔实而全面的回答。这个链接也很相关,但我刚刚开始学习Spirit,我不知道如何更改代码来检测额外的字符,例如“=”、“+”,等等。你应该试试,当你遇到困难时,你有一个问题要问。事实上,这不是很适合,因为它不是一个编码问题(我们倾向于避免那种“你能为我做”或“你能只给我展示”)吗?作为一个开始暗示,不要认为它是检测“额外的字符”,而是取代现有的令牌(“和”->“&”)。然后添加变量必须以特定字符开头的逻辑。最后,一些更丰富的语法基于这个答案,并继续计算表达式