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

来源:互联网 发布:软件著作权真伪查询 编辑:程序博客网 时间:2024/04/28 10:18

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

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

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

源代码,文档都上传至 http://download.csdn.net/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

原创粉丝点击