- 1、本文档共58页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 小型编译程序介绍 9.1 小型编译程序结构 编译程序的工作贯穿于从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。一般来说,整个过程可以划分成五个阶段:词法分析、语法分析、中间代码生成、优化和目标代码生成。 第一阶段为词法分析。词法分析的任务是输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号,如保留字、标识符、常数、算符和界符等。 第二阶段为语法分析。语法分析的任务是在词法分析的基础上,根据语言的语法规则(文法规则)把单词符号串分解成各类语法单位(语法范畴),如“短语”、“子句”、“句子”、“程序段”和“程序”。通过语法分析确定整个输入串是否构成一个语法上正确的“程序”。 第三阶段为中间代码产生。按语言的语义将语法分析出来的语法单位翻译成中间代码。一般而言,中间代码是一种独立于具体硬件的记号系统,但它与计算机的指令形式有某种程度的接近,或者能够比较容易地把它变换成计算机的机器指令。常用的中间代码有四元式、三元式、间接三元式和逆波兰记号等。 第四阶段为优化。优化的任务在于对前阶段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(节省时间和空间)的目标代码。 第五阶段为目标代码生成。这一阶段的任务是把中间代码(或经优化处理之后)变换成特定机器上的绝对指令代码或可重新定位的指令代码或汇编指令代码。这一阶段实现了最后的翻译,它的工作有赖于硬件系统结构和机器指令含义。 上述编译过程的五个阶段是编译程序工作时的动态特征,编译程序的结构可以按照这五个阶段的任务分模块进行设计。编译程序的结构示意如图9-1所示。 我们设计的小型编译程序包含除优化以外的其余各阶段。 9.2 小型编译程序关于高级语言的规定 高级语言程序具有四种基本结构:顺序结构﹑选择结构﹑循环结构和过程。为了便于掌握编译的核心内容,突出重点,简化编译程序的结构,同时又涵盖高级语言程序的基本结构,我们选取赋值语句﹑if语句和while语句作为前三种结构的代表,略去了过程结构。实际上,上述三种语句已经基本满足了高级语言的程序设计。因此,我们仅考虑由下面产生式所定义的程序语句: S→if B then S else S ︱while B do S ︱begin L end︱A L→S;L︱S A→i:=E B→B∧B︱B∨B︱??B︱(B) ︱i rop i︱i E→E+E︱E*E︱(E) ︱i 其中,各非终结符的含义如下: S——语句; L——语句串; A——赋值句; B——布尔表达式; E——算术表达式。 各终结符的含义如下: i?——整型变量或常数,布尔变量或常数; rop?——六种关系运算符的代表; ;?——起语句分隔符作用; :=?——赋值符号; ??——逻辑非运算符“not”; ∧?——逻辑与运算符“and”; ∨?——逻辑或运算符“or”; +?——算术加运算符; *?——算术乘运算符; (?——左括号; )?——右括号。 注意,六种关系运算符分别为 :小于 =:小于等于 :不等于 :大于 =:大于等于 =:等于 关于表达式的运算,我们规定由高到低优先顺序为算术运算、关系运算、布尔运算;并且服丛左结合规则。算术运算符优先级的顺序依次为“( )”﹑“*” ﹑“+” ;布尔运算符优先级的顺序依次为“??”﹑“∧”﹑“∨”;六个关系运算符优先级相同。 我们规定的程序是由一条语句或由begin和end嵌套起来的复合语句组成的,并且规定在语句末要加上“#~”表示程序结束。下面给出的是符合规定的程序示例: begin A:=A+B*C; C:=A+2; while AC and BD do while AB do if M=N then C:=D else while A=D do A:=D end#~ 9.3 小型编译程序关于单词的内部定义 由于我们规定的程序语句中涉及单词较少,故在词法分析阶段忽略了单词输入错误的检查,而将编译程序的重点放在中间代码生成阶段。词法分析器的功能是输入源程序,输出单词符号。我们规定输出的单词符号格式为如下的二元式: (单词种别,单词自身的值) 我们对常量,
您可能关注的文档
- 边做边学——会声会影 X3视频编辑案例教程 教学课件 作者 王世宏 陈娟 02.ppt
- 边做边学——会声会影 X3视频编辑案例教程 教学课件 作者 王世宏 陈娟 03.ppt
- 边做边学——会声会影 X3视频编辑案例教程 教学课件 作者 王世宏 陈娟 04.ppt
- 边做边学——会声会影 X3视频编辑案例教程 教学课件 作者 王世宏 陈娟 05.ppt
- 边做边学——会声会影 X3视频编辑案例教程 教学课件 作者 王世宏 陈娟 06.ppt
- 边做边学——会声会影 X3视频编辑案例教程 教学课件 作者 王世宏 陈娟 07.ppt
- 边做边学——会声会影 X3视频编辑案例教程 教学课件 作者 王世宏 陈娟 08.ppt
- 边做边学——会声会影 X3视频编辑案例教程 教学课件 作者 王世宏 陈娟 09.ppt
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第1 3章 第1章.ppt
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第1 3章 第2章.ppt
文档评论(0)