通过真值树解析布尔表达式(eg:A&B|C)

2018-06-17 21:30:51来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

  第一步:求出一个表达式的truth tree

  1.生成真值表

  2.根据真值表生成真值树(合并短路产生相同的两个子树)

  第二步:计算表达式  

  同时按层深度索引真值树,遍历表达式的变量(按需求值),当能走到树的叶子节点时说明本次表达式为true

 

  数据结构:

  1.真值树:是一个二叉树,每层依次对应A,B,C...表达式成员;用真值表作为参数构造;提供Creat();Empty();Root()等常见接口

  2.表达式类:专门负责解析字符串(eg:A&B|C),提供接口:获取{表达式成员序列,真值树};通过{表达式成员序列,真值树}+成员求值函数对象 计算表达式值

 

  备注:

  1.参照http://www.cppblog.com/vczh/archive/2008/06/15/53373.html和《C++沉思录》第八章写出eval::IcomputeBoolExpr()接口  

  2.真值树的层数最好在16层以内,过大可能过于增加构造树的时间;对于过大的表达式建议不考虑用真值树实现表达式短路。

  3.真值树的思路相当于预先把所有可能的值都求一遍,缓存起来;需要读编译原理,了解GCC语法树,可能有更好的思路实现表达式短路。

 

  

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入

下一篇:简单重写容器vector