注册 登录
编程论坛 数据结构与算法

[原创]用LR(0)写的计算器

stnlcd 发布于 2005-11-05 23:21, 2915 次点击
只有本站会员才能查看附件,请 登录

完全按照LR(0)语法设计要求写的表达式计算器,
源代码包含词法分析程序和语法分析(LR(0))程序。
目前该计算器可以计算如:
cos,sin,tg,lg,ln等常用的表达式,
或计算统计数据:
avg(3,4,5)=4(求平均值)
如:
求coscos1:
输入coscos1然后输入'='就可以求得如下:
coscos1=0.857553

求lglg1000:
输入lglg1000然后输入'='就可以求得如下:
lglg1000= 0.477121

求2^2^2:
输入2^2^2然后输入'='就可以求得如下:
2^2^2 = 16.000000

求10,20,30的平均数:
输入avg(10,20,30)后输入'='就可以得到:
2^2^2 = 16.000000

求3+4*(5-3):
输入该表达式后输入'='得到:
3+4*(5-3) = 11.000000

★输入表达式后不要忘了输入'='(不要习惯性的打回车!),如果表达式有问题(词法或语法错误)那么输入‘=’后不会有任何反映,只要表达式输入正确就会得到正确的值!目前该计算器还不支持除10进制以外的其他进制(本人的疏忽)
★lr0.h为词法分析和语法分析程序!本人是先用c语言写程序,然后在用类封装的,所以封装的比较差,就将就看吧,
c语言版文件今天不能上传了(因为今天我已经洗?个文件了),改天吧!

[此贴子已经被作者于2005-11-5 23:51:06编辑过]

8 回复
#2
stnlcd2005-11-05 23:50

以上程序写给那些对编译原理感兴趣的同学。
如果想写表达式计算器而严格的用编译原理的产生式系统来分析(词法分析-》语法分析-》语法制导)。这样太麻烦了!可以用数据结构的方法来写,那样简单多了,但没有我这个功能强大!
以上计算器的产生式系统如下:
E->E+E|E-E|E*E|E/E|(E)|id|PoneE|avg(F)
Pone->cos|sin|lg|ln...
F->id,F|id
当然可以加入更多的功能,比如方差分析,统计功能等,这样这个计算器就完善了,本人比较懒,对这类算法不是很熟悉,就不加了!

#3
激情依旧2005-11-08 08:25
呵呵。看起来很不错。我还没运行。不知道是否正确。不过都先设为精华
#4
stnlcd2005-11-09 12:12
谢谢激情依旧
如果这个可以为精华的话,那么我的“图最短路径的动态规划算法和A*算法”可以为超精华了。
麻烦大家看看,要不我讲了也白讲。
#5
热情依然2005-11-10 22:36
强人,有机会一定要学编译原理.
#6
打豆豆2006-01-04 09:31
先谢谢楼主分享啊
#7
modern_roc2006-04-28 01:36



够厉害。。。佩服
顶 。顶顶顶顶
#8
高阁逆风2006-06-09 14:19
够精致!!!
#9
light0012013-01-06 21:32
谢谢了。。。。不错啊
1