计算器升级
为计算器添加符号
符号, 比如 π, 我们还可以自定义一些符号, 比如 a=5, b = 10, a+b = 15 这样的功能
分析
SymbolTable // 符号表类, 维护符号表, 让符号和ID相对应
AddSymbol(str)
ID FindSymbol(str)
string GetSymbolName(ID)
Stroage // 仓库类, 让值和ID相对应
GetValue(ID)
SetValue(ID)
AddValue(ID)
AddConstants(SymbolTable&) // 增加常量
二者是一个依赖关系
依赖关系带来的是两步操作
1. AddSymbol
2. AddValue
新增一个Helper类, 统一封装1, 2步, 帮我们简便操作.
Helper // 组合了SymbolTable 和 Stroage, 他们是组合关系根据以上架构, 需要改造现有类
Scanner // 需要扫描变量, 等号
Parser // 需要解析变量
x = 5
一个表达式总是 一个Term + Expr
并且Factor的优先级高
所以 x 放到Factor中解析
现在, 剩下了 = 5, 所以回到Expr中进行解析
等号, 在Expr中解析
需要新增两个类
变量Node
等号Node
变量Node 其实是一个虚拟的Node, 只有在这个节点 等于一个值时, 它才有意义.
在变得有意义之后, Calc方法就会返回 Stroage 类中的值.UML图

图片太大, 看不清楚可以下载后进行放大查看, 原图为高清图.
程序效果

工程源码
暂不对外提供, 如果需要请留下邮箱.
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-02-23 at 05:13 pm