欢迎来到天天文库
浏览记录
ID:22989029
大小:412.50 KB
页数:23页
时间:2018-11-02
《自定义语言的实现——解释器模式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、自定义语言的实现——解释器模式http://blog.csdn.net/lovelion/article/details/7713567有朋友一直在等待我的解释器模式文稿,,现把某个版本发在博客上,欢迎大家讨论! 虽然目前计算机编程语言有好几百种,但有时候我们还是希望能用一些简单的语言来实现一些特定的操作,我们只要向计算机输入一个句子或文件,它就能够按照预先定义的文法规则来对句子或文件进行解释,从而实现相应的功能。例如提供一个简单的加法/减法解释器,只要输入一个加法/减法表达式,它就能够计算出表达式结果,如图18-1所示,当输入字符串表达式为“1+2+3–4+1”时
2、,将输出计算结果为3。图18-1 加法/减法解释器示意图 我们知道,像C++、Java和C#等语言无法直接解释类似“1+2+3–4+1”这样的字符串(如果直接作为数值表达式时可以解释),我们必须自己定义一套文法规则来实现对这些语句的解释,即设计一个自定义语言。在实际开发中,这些简单的自定义语言可以基于现有的编程语言来设计,如果所基于的编程语言是面向对象语言,此时可以使用解释器模式来实现自定义语言。18.1机器人控制程序 Sunny软件公司欲为某玩具公司开发一套机器人控制程序,在该机器人控制程序中包含一些简单的英文控制指令,每一个指令对应一个表达式(expr
3、ession),该表达式可以是简单表达式也可以是复合表达式,每一个简单表达式由移动方向(direction),移动方式(action)和移动距离(distance)三部分组成,其中移动方向包括上(up)、下(down)、左(left)、右(right);移动方式包括移动(move)和快速移动(run);移动距离为一个正整数。两个表达式之间可以通过与(and)连接,形成复合(composite)表达式。 用户通过对图形化的设置界面进行操作可以创建一个机器人控制指令,机器人在收到指令后将按照指令的设置进行移动,例如输入控制指令:upmove5,则“向上移动5个单位”;输
4、入控制指令:down run10andleftmove20,则“向下快速移动10个单位再向左移动20个单位”。 Sunny软件公司开发人员决定自定义一个简单的语言来解释机器人控制指令,根据上述需求描述,用形式化语言来表示该简单语言的文法规则如下:expression::=directionactiondistance
5、composite//表达式composite::=expression'and'expression//复合表达式direction::='up'
6、'down'
7、'left'
8、'right'//移动方向action::='move'
9、'run'//移
10、动方式distance::=aninteger//移动距离 上述语言一共定义了五条文法规则,对应五个语言单位,这些语言单位可以分为两类,一类为终结符(也称为终结符表达式),例如direction、action和distance,它们是语言的最小组成单位,不能再进行拆分;另一类为非终结符(也称为非终结符表达式),例如expression和composite,它们都是一个完整的句子,包含一系列终结符或非终结符。 我们根据上述规则定义出的语言可以构成很多语句,计算机程序将根据这些语句进行某种操作。为了实现对语句的解释,可以使用解释器模式,在解释器模式中每一个文法
11、规则都将对应一个类,扩展、改变文法以及增加新的文法规则都很方便,下面就让我们正式进入解释器模式的学习,看看使用解释器模式如何来实现对机器人控制指令的处理。18.2文法规则和抽象语法树 解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。在正式分析解释器模式结构之前,我们先来学习如何表示一个语言的文法规则以及如何构造一棵抽象语法树。 在前面所提到的加法/减法解释器中,每一个输入表达式,例如“1+2+3–4+1”,都包含了三个语言单位,可以使用如下文法规则来定义:expression::=value
12、operatio
13、noperation::=expression'+'expression
14、expression'-' expressionvalue::=aninteger//一个整数值 该文法规则包含三条语句,第一条表示表达式的组成方式,其中value和operation是后面两个语言单位的定义,每一条语句所定义的字符串如operation和value称为语言构造成分或语言单位,符号“::=”表示“定义为”的意思,其左边的语言单位通过右边来进行说明和定义,语言单位对应终结符表达式和非终结符表达式。如本规则中
此文档下载收益归作者所有