使用Lex, Yacc 编写的算术表达式的解析器和计算器工具

本文介绍了一款基于Lex和Yacc开发的算术表达式解析器和计算器工具,能够处理复杂的数学表达式,包括括号和未知数。讨论了声明型编程模式的优势及调试难点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整理旧机器,看到自己刚工作不久时做的算术表达式的解析器和计算器工具。那是头一次使用Lex, Yacc 来开发东西,挺喜欢这种编程模式。对比过程式的编程,这类声明型的编程只需要编写若干规则,词法语法产生式,由引擎按这些规则来做逻辑处理。抽象一些说, 只定义对象的内在和外在的反应规则,由对象自己去按这些规则去生活;而不是强制地让对象做一系列的反应,让这些对象只能是死的对象。

开发这类程序的关键是要对所有的状态迁移,状态机模型有清晰,准确的了解,不能有不应该出现的环路,不能有冲突的规则优先级。另外当运行结果与设计 不符合的时候,调试并且发现错误也比较麻烦,一些工具提供了调试器,但对比过程式的编程,声明型程序的调试还是要麻烦一些,更依赖于编程者的功力。

如今,声明型编程的规则引擎运用逐渐普遍,在业务活动监控,风险控制,算法交易方面,声明型编程的应用会越来越广。需要在这方面多多积累。

源代码,文档都上传至 http://download.youkuaiyun.com/source/2457085 。 传统的计算器工具都是从左至右单步计算的,这里开发的工具可以输入完整的算术表达式( 包含括号) ,一次计算求值,表达式里还可以带未知数,在表达式后面给 未知数赋值即可。使用试例如下,

>expression (5+3)*9-(10/2)
>The value of result is 67

 

>expression (x+y)*z-a/b x=10 y=20 z=5 a=10 b=2
>The value of result is 145

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值