使用Qt和Interpreter设计模式开发计算器(附源码)
计算器软件其实有很多种,但是基本上都是模仿计算器,用鼠标点击按键来操作,这次我们反其道而行之,采用类似文本输入的操作方式。
功能
1.键盘输入算式,回车后计算结果。
2.根据当前输入的函数的一部分,自动找到备选函数。这时可以用上/下键选择需要的函数后,按空格键确定输入。在整个过程中一直可以表示函数的帮助信息。我们可以参考帮助信息,选择合适的函数。
3.支持三角函数,反三角函数,求和,平均值,乘方,开方,对数,当然还有包含嵌套的四则运算。
相关资源下载(包括可执行文件,可直接在WindowsXP,Windows7环境下执行及源代码,工程文件)下载地址:
具体下载目录在 /pub/2011/10/30/使用Qt和Interpreter设计模式开发计算器源码/
执行画面如下
技术要点:
除了操作界面以外,实际我们是要做这样一个解析器,就面临这一个如何描述我们所面的需求的问题。在这里我们使用EBNF的一种形式,它由W3C定义。我们可以在XML Path Language (XPath) 2.0 (Second Edition)中找到它的细节。
一下是我们在计算器中输入的表达式的描述。
- [1]Expr::= AdditiveExpr
- [2] AdditiveExpr::=MultiplicativeExpr ( ("+" | "-") MultiplicativeExpr )*
- [3]MultiplicativeExpr::= UnaryExpr ( ("*" | "/" | "%" ) UnaryExpr)*
- [4]UnaryExpr::=("-" | "+")* PrimaryExpr
- [5]PrimaryExpr::= NumericLiteral | ParenthesizedExpr | FunctionCall
- [6]NumericLiteral::=IntegerLiteral | DecimalLiteral | DoubleLiteral
- [7]ParenthesizedExpr::="(" Expr? ")"
- [8]FunctionCall::=FunctionName "(" (Expr(","Expr)*)? ")"
- [9]IntegerLiteral ::=Digits
- [10]DecimalLiteral ::=("." Digits) | (Digits "." [0-9]*)
- [11]DoubleLiteral::=(("." Digits) | (Digits ("." [0-9]*)?)) [eE] [+-]? Digits
- [12]Digits ::=[0-9]+
- [13] FunctionName=sinr
- |sind
- |cosr
- |sind
- |tanr
- |tand
- |asinr
- |asind
- |acosr
- |acosd
- |atanr
- |atand
- |power
- |root
相关推荐
瓜牛呱呱 2020-11-12
柳木木的IT 2020-11-04
yifouhu 2020-11-02
lei0 2020-11-02
源码zanqunet 2020-10-28
源码zanqunet 2020-10-26
一叶梧桐 2020-10-14
码代码的陈同学 2020-10-14
lukezhong 2020-10-14
lzzyok 2020-10-10
anchongnanzi 2020-09-21
clh0 2020-09-18
changcongying 2020-09-17
星辰大海的路上 2020-09-13
abfdada 2020-08-26
mzy000 2020-08-24
shenlanse 2020-08-18
zhujiangtaotaise 2020-08-18
xiemanR 2020-08-17