第4章表达式解析程序DEMO-Read.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章表达式解析程序DEMO-Read.doc

表达式解析程序 邵强 摘要: 本文主要利用C#作为编程语言作为工具,研究解决在.Net环境下表达式解析计算的方法,实现表达式的一般四则混合运算、字符串运算、函数运算、函数嵌套运算以及支持自定义函数运算。 全文共分四章。 第1章表达式解析原理。 首先阐述表达式构成;其次阐述表达式的解析约定,定义表达式各种语法错误;再研究表达式解析存在的问题,讨论表达式解析的复杂性;最后阐述表达式解析原理,提出计算机程序解决表达式解析算法规则。 第2章阐述实现表达式解析的各个环节的工作过程,譬如单元划分、加减运算、乘除运算、一元运算、字符串运算、函数运算、函数嵌套、支持自定义函数运算的接口。 第3章C#编写表达式解析程序源代码。 第4章 使用表达式解析程序的简单DEMO案例。 关键字:表达式、解析、C#、.Net。 目录 第1章 表达式解析原理 4 1.1 表达式构成 4 1.2 表达式解析约定 5 1.3 解析表达式:存在的问题 6 1.4 表达式递归解析算法规则 7 第2章 表达式解析实现 9 2.1 剖析表达式 9 2.2 表达式解析入口 12 2.3 剖析表达式运算过程 12 2.3.1 加减运算 13 2.3.2 乘除运算 13 2.3.3 函数运算 13 2.3.4 一元运算 20 2.3.5 嵌套(括号)运算 20 2.3.6 元数据处理 20 第3章 表达式解析程序源代码 21 3.1 代码结构 21 3.2 详细代码 21 3.2.1 Parser.cs类 21 3.2.2 ParserException.cs类 31 3.2.3 EventArgs.cs类 32 3.2.4 InterFunction.cs类 32 3.3 附表-内部函数表 39 第4章 表达式解析程序DEMO 41 4.1 编译成dll组件 41 4.2 建立DEMO程序 41 4.3 运行TestArithMetic.exe 46 后记 表达式解析程序的应用展望 第1章 表达式解析原理 我们编写的程序怎样采用包含一个数值表达式,如(10-5)*3的字符作为输入并且计算正确答案呢?另外,许多熟练的程序员被高级语言怎样把数学表达式转换成计算机能够执行的指令的方式所迷惑。此过程称为表达式解析(expression parsing),并且它是所有语言编译器和解析器、电子表格以及任何其他需要把数字表达式转换成计算机能够使用的形式的主要组成部分。 虽然表达式解析程序对于外行来说可能是很神秘,但它是一个定义明确的任务,具有相当不错的解决方案。这是因为表达式解析程序根据严格的算法规则进行工作。本文讲述通常所说的递归解析程序(recursive-descent parser),以及所有能够计算数值表达式的必要支持程序。一旦掌握了解析程序的运算,就可以容易地对它进行改进和修改以适合我们的需要。 此处开发的解析程序除了是一段有用代码外,还举例说明了C#语言的功能和范围。解析程序是“纯代码”应用程序,它不联系网络、使用GUI或利用有限的系统。它是在以前通常用C++编写的代码的类型。使用C#能够轻松地创建解析程序,这证明C#能够胜任任何编程任务。 1.1 表达式构成 因为表达式解析程序计算代数表达式的值,因此搞懂表达式的各组成部分是很重要的。虽然表达式可以由各种类型的信息构成,但本文只处理数值表达式。为此,数字表达式由下面几项构成: 数字 字符串(包含空字符) 数字运算符 +、-、/、* 字符串标识符 “” 字符串运算符 圆括号分隔符() 内部函数 自定义函数 函数参数分隔符逗号 , 可以把这几项按照算法规则组合在表达式中。下面是一些示例: 表达式 结果 -23 -23 10-8 2 (10-5)*14/6 11.6666666666667 ABS(-1) 1 (10-5)*14/6+ABS(-1) 12.6666666666667 SQRT(ABS(-2)) 1.4142135623731 “Hello” Hello “Hello”” World ! “ Hello World ! SUBSTRING(“Hello World”,2,5) llo W AREA(2) 12.5663706143592,自定义函数,实现求圆面积πR2 每一个运算符的优先级顺序为: 最高级 + - 一元 函数 内部函数或外部自定义函数 * / 乘除 最低级 + - 加减、字符串连接 相同优先级的运算符的计算顺序为从左到右。 1.2 表达式解析约定 本文讨论的表达式必须符合以下约定: 分隔符约定。合法分隔符包括运算符为+、-、*、/、,圆括号分隔符(),字符串标识符””,函数参数分

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档