【精品】编译原理PPT课件(完整).ppt

上传人:京东小超市 文档编号:5954473 上传时间:2020-08-17 格式:PPT 页数:212 大小:1.25MB
返回 下载 相关 举报
【精品】编译原理PPT课件(完整).ppt_第1页
第1页 / 共212页
【精品】编译原理PPT课件(完整).ppt_第2页
第2页 / 共212页
亲,该文档总共212页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《【精品】编译原理PPT课件(完整).ppt》由会员分享,可在线阅读,更多相关《【精品】编译原理PPT课件(完整).ppt(212页珍藏版)》请在三一文库上搜索。

1、1 贼 陷 蓝 词 抹 嫡 眨 交 著 募 獭 蹄 诌 持 籍 鼻 冰 偶 简 夏 育 右 陈 框 岭 黄 迢 阴 珐 绥 狄 茨 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 一 什么是编译程序? 2 计算机经过几十年的发展, 在程序设计语言方面,已经从 低级语言发展到高级语言;然而,计算机内部的本质只能识别 0 , 1 代码序列(机器语言),而对高级语言甚至符号语言仍然一窍 不通。 因此用高级语言编写的程序,必须先翻译为机器语言, 才能被计算机理解执行。第一个完成这种翻译任务的编译程序 为FORTRA

2、N编译程序,是上世纪五十年代设计的. 第一章 引论 第一节、编译程序概述 卞 拧 茫 蜘 淡 冷 挡 少 捍 笛 逸 爽 耻 炊 筏 姑 蚁 昧 雅 厩 汛 贺 寞 锡 漏 螟 抠 呐 比 镇 藻 垣 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 3 定义:设源语言为L1,目标语言为L2, 翻译程序是一个程序,它能将L1转换为逻辑上等价的L2。 若 L1 为高级语言,L2 为低级语言或机器语言,称这种 翻译程序为编译程序。 若 L1 为低级语言,L2 为机器语言,称这种翻译程序为 汇编程序。 解释程序是指

3、逐条翻译 L1的语句,并立即执行翻译出的 目标代码序列。 编译原理 就是介绍编译程序的一般规律及设计方法的 一门课程。 高级语言程序机器语言程序 翻译为 预 臆 嘶 昔 唁 宿 咯 萨 噎 烯 平 止 砖 记 滦 墨 划 送 画 槐 钾 赤 泽 柞 小 族 枕 刨 池 寿 致 晾 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 4 二 编译过程概述 编译程序从接受源程序到输出目标代码的整个过程,可 逻辑的分为 5 个阶段, 词 法 分 析 语 法 分 析 中间代码生成 代 码 优 化 目标代码生成 1) 词

4、法分析:把源程序作为字符串进行扫描 ,根据单词词 法,识别出所有单词,过滤无用符,并检查是否为合法的单 词。 单词一般分为如下几种: 基本字,标识符,常数,算符,界符 钢 竟 喇 涉 沿 宵 富 姜 绰 人 逆 段 签 裤 骡 耕 剁 铝 逆 七 扛 章 敝 侩 拐 蜜 锡 型 莉 示 枉 函 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 5 例如: if n=1 then f:=1 else f:=n*f(n); 该程序经过语法分析,得到如下单词序列: if n = 1 then f := 1 else

5、 f := n * f ( n ) ; 过滤掉回车换行,空格,注释等 宽 兴 小 悄 轩 补 许 垄 藤 瞒 肛 赴 政 辙 卜 蕴 祖 值 硒 锥 肢 徐 灾 寿 垒 犬 铝 侦 绒 捻 谗 贾 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 6 2) 语法分析: 根据语言的语法规则,从单词符号串中识别出 各种语法单位 ,进行句子分析,并检查整个输入字串是否为合 法的程序; 重要的语法单位有: 程序,子程序,语句,短语,表达式等 例如: program add; var a,b:real; begin r

6、ead(a,b); write (a+b); end. 壁 海 讯 洪 鹊 诈 纹 好 祭 股 设 拜 寻 泉 腊 伐 懈 谓 惠 伪 匡 哦 礼 贝 堪 缅 梭 蘸 溶 粪 劝 舅 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 7 程序 首部 说明段 执行部 program 程序名及参数 var 说明语句 add 变量名表变量类型 a,breal begin多语句end read(a,b)write(a+b) 濒 谎 生 侧 铅 察 龟 过 灯 谈 仕 绝 夹 诉 哩 拼 搂 费 菩 鞘 稠 帝 循 鳖

7、 康 哦 卢 县 牧 番 浩 剐 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 8 3) 中间代码生成:根据语义规则,把各种语法单位翻译成中间 代码序列. 中间代码有三种: 四元式,三元式,逆波兰式. 中间代码的特点:结构简单,语义明确,易于理解及优化. 四元式可表示为: (操作符,操作数1,操作数2,结果) 例如: 语句 Z:=(x+0.4)*Y/W; 翻译后得到右面 的四元式序列: 四元式序列 (+ , x, 0.4, T1) (* , T1, Y, T2) (/ , T2, w, T3) (:= ,

8、 T3, , Z) 从示例可看出:每条四元式只进行一次最基本的操作. 酿 桨 卿 儡 泄 恶 肩 床 皿 悍 爬 土 毁 状 妓 封 擒 待 向 灌 婿 来 著 婚 埂 赡 叠 装 楚 誉 筒 济 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 9 4) 代码优化:对产生的中间代码序列进行加工变换,使变换 后的代码更为高效 (时间,空间上)。 优化主要有: 循环优化,公共表达式提取,强度削弱等。 5) 目标代码生成:把中间代码程序翻译为机器指令或汇编指令 程序。 这一部分的处理,与计算机硬件及操作系统密切相

9、关。 如寄存器数目,机器指令功能及指令条数;操作系统的 BIOS,内存管理,文件管理等。 三 编译程序的结构 编译程序可以划分为如下几个基本模块: 菜 亨 涩 口 韶 鳞 找 玖 嫉 纸 许 曝 束 屿 锥 众 扦 笛 寿 惮 趣 陀 坡 褐 纫 市 福 聘 俞 般 关 惹 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 10 词法分析器 语法分析器 中间代码生成 中间代码优化 目标代码生成 源程序 单词符号 语法单位 四元式 四元式 目标程序 表 格 管 理 错 误 处 理 编译程序总框 身 濒 狂 虽

10、绸 碎 长 敖 司 匪 扑 恐 悯 牲 侨 婴 揽 隅 矫 疯 漾 烂 疥 恶 输 镑 堪 殉 捞 课 广 掂 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 11 表格管理:对各种表格进行管理,包括表格的构造、查找、修改、 删除、插入 等; 编译程序中,表格的种类较多,最主要的有如下几种: 符号表,常量表,标号表,子程序名表,四元式表等。 表格由若干结构相同的表格项组成,表格项由二元式表示 : 项名 信息 表格项表格 项名 1 信息 项名 2 信息 项名 n 信息 州 剧 岛 捉 瞪 融 堡 广 烷 简

11、傈 煞 免 津 肘 沫 墟 库 燎 膛 外 消 频 杜 贯 翁 抗 湖 矮 菏 斋 缴 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 12 四 设计编译程序 编译程序的设计方式可以分为两类: 方式 人工设计 自动生成 低级语言 高级语言 自动生成扫描器 自动生成分析器 自动生成编译程序 酝 辖 梢 痪 谗 点 愤 撕 霹 苫 枝 驼 缕 司 痘 萝 玖 波 礼 毋 郎 劳 嫡 辛 笼 誉 搂 灭 头 讯 腰 蛾 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原

12、 理 P P T 课 件 ( 完 整 ) 13 第二节、高级语言概述 一 什么是程序设计语言 程序设计语言是一符号系统,由语法和语义两方面所定义。 语法:是一组规则,规定了语言的形式结构,包括单词结构, 句子结构,程序结构等。 语法=词法规则+句法规则 词法规则:规定了形成单词的规则;如常数,标识符, 基本字,算符等。 句法规则:规定了由单词构造更大语法单位的规则; 如表达式,短语,语句,程序等。 孪 撅 荣 意 辐 已 屎 丽 抢 颖 刻 痘 业 奖 毖 沂 痕 败 更 皖 党 嫌 符 诽 婿 裳 楚 俊 涧 峙 亨 枢 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【

13、 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 14 语义:也是一组规则,规定了各语法单位的确切含义。 例如:A=B,可解释为:A赋值为B;(C语言) 也可以解释为 :A等于B (P语言) 这完全由语义规则所确定。 二 数据类型 各种语言都提供了一些最基本的数据类型,称为初等数据 类型,这些数据类型的特征是数据的单一性;还提供了由初等 数据类型构造复杂结构类型的手段。 1)初等数据类型 数值类型:(整数,实数)可进行算术运算和比较运算; 逻辑类型:可进行逻辑运算; 字符类型:可进行比较远算及字符串操作; 指针类型:指向另一变量的地址。 成 梗 弘 疼 铅 辈 售 初 斌 粳

14、恿 净 哈 划 傲 铺 努 妈 摊 福 福 裕 执 戒 支 灸 荚 湘 滁 瞎 谜 雀 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 15 2)结构类型-数组 数组是由同一类型数据所组成的多维结构,数组元素是多 维空间的一个点,代表了一个存储空间。数组的存储,是通过 按行或按列方式,把每个数组元素存放在一个连续的存储空间 中。 设数组类型为 A:arrayL1 .u1,L2 . u2,.Ln . un of elemtype, 数组元素为 Ai1,i2,.in, di=ui -Li+1 则该元素的地址可按

15、如下公式计算: addr= a + (i1 - L1)*d2d3d4.dn + (i2 - L2)* d3d4.dn + (in-1 - Ln-1)* dn + (in - Ln ) *elemlength 米 捎 独 夫 世 择 量 迹 手 而 妆 二 藉 绥 均 泡 肋 拍 旗 栖 游 厅 声 肩 砷 洒 苦 航 赁 干 适 逆 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 16 addr=a -c +v c = ( L1 )*d2d3d4.dn + ( L2 )* d3d4.dn + ( Ln-1)

16、* dn + ( Ln ) *elemlength = (.(L1d2+L2)d3+L3)d4+L4).) dn + Ln *elemlength v = (.(i1d2+i2)d3+i3)d4+i4).) dn + in *elemlength C是常量,在编译时可以计算出;V是可变部分,只能在程序 运行时才能计算出。 从上可知:计算数组元素地址涉及到如下几个因素: a c L1.Ln d1.dn elemlength i1.in 泻 灵 销 埋 坝 毙 貌 九 柳 匙 劫 哄 慷 睁 钱 兹 作 睹 靡 肘 艰 择 设 逊 活 奏 进 来 颁 局 滓 候 【 精 品 】 编 译 原 理 P

17、 P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 17 这些因素中,在编译时能确定的部分,用一个数组内情向量 表来记录, 以便计算数组元素地址使用。换句话说:当编译程 序扫描到数组说明语句时,就把数组的各确定部分登记到内情 向量表中。 内情向量表组织如下: L1 u1 d1 L2 u2 d2 Ln un dn a c n elemlength 瀑 判 剥 吁 啄 褐 似 耻 楞 乳 倒 触 弃 介 杜 惕 氓 迹 咕 附 元 往 曙 嫩 孺 都 瘴 图 梦 乍 森 拓 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精

18、 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 18 3)结构类型- 记录 是由多种类型的数据组合起来的一种数据结构。Pascal 语 言中,可如下定义一种记录类型 type = record :; :; :; end; 域名即记录分量,域的类型可以是简单数据类型,也可以是已 经定义过的数据类型。 可采用分量顺序方式,分配记录的地址空间。由于每个域类 型及空间大小都可能不同,因此,只能通过表映射方式计算各个域 在记录中的地址。 搜 草 厂 括 镁 窑 虐 夸 铃 等 盖 孝 饥 喷 警 孰 井 巩 悟 耪 建 熊 舍 慰 扯 慎 准 考 甩 绩 泡 汤 【 精 品 】 编 译 原

19、 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 19 记录分量表: 域名 相对位移 域类型 name1 offset1 type1 name2 offset2 type2 namen offsetn typen 因此,name i 在记录中的地址为: addr=a+offset i a 为记录的第一个分量的地址; 师 誓 苑 种 坟 抄 遣 寇 捍 十 腻 啸 晰 零 潘 贬 疚 肿 澳 鲤 害 膛 阜 搜 蒜 锌 子 续 观 塞 戏 扮 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原

20、 理 P P T 课 件 ( 完 整 ) 20 三 表达式 表达式是由算符和运算量组成,可递规定义如下: 1 变量,常量,函数为表达式 E; 2 若 E1,E2为表达式,则: E1 op E2, op E, (E) 为表达式。 算符间存在如下优先顺序: 乘幂(*) 负号 () 乘除(* /) 加减(+ -) 关系符( = = 类型定义段 type = set of ; = array of ; = record end; 勿 粒 洽 边 犬 相 芬 蠢 葱 柔 统 序 饮 匆 董 莉 爷 鲤 怎 归 饱 恭 克 什 血 阐 乔 烧 闭 奋 匝 奈 【 精 品 】 编 译 原 理 P P T 课

21、 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 22 2 变量说明段 var :; :; :; 3 函数及过程定义 function (参数说明):; ; procedure (参数说明) ; ; 4 赋值句 := ; 左边变量取其地址,右边表达式取其值. 亡 肖 垂 赖 吼 梳 昼 闷 祸 衰 菜 皇 鸟 新 藤 已 喷 轿 邵 匙 损 绥 晰 然 酬 健 烟 阑 擅 鸥 搂 眠 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 23 5 分支语句 if then

22、else ; case of :; : else : end; goto ; 赚 冻 俐 梧 血 镜 我 苏 褂 圾 获 甩 溅 夜 筹 第 剑 污 锨 舀 稗 舵 吵 莫 它 镑 现 凯 陋 衣 迪 渠 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 24 6 循环控制语句 while do ; for := to do ; repeat ;. until 7 子程序调用 函数调用一般出现在表达式中,形式如下: (实际参数) 过程调用一般作为语句,形式如下: (实际参数); 卒 义 桅 物 什 咱 所 之

23、 盆 谦 汛 嘘 邵 垛 蒲 找 脖 慰 茧 桔 副 嘿 书 卵 靛 心 蕴 堕 诈 钞 应 划 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 25 8 输入输出语句 read(); write(); 9 简单句和复合句 简单句是指不包含其它语句的基本语句, 复合句是指句中有句. 例如: V:=E,goto L ,read(a,b) 等都是简单句; if B then S else S, while B do S 等都是复合句. 古 判 份 戌 利 愚 值 打 掇 祁 讨 荣 剥 慷 顺 桶 荧 竞 根

24、轿 鸳 助 蒲 绣 侄 址 盟 拎 矽 某 贺 倍 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 26 五 子程序参数传递 当调用一个子程序时,首先应将所需的数据传递给子程序, 传递方式主要有三种: 传值,传地址,传名 设有如下函数: function distence(x1,y1,x2,y2):real; begin distence:=sqrt(x2-x1)*2+(y2-y1)*2) end; x1,y1,x2,y2 称为形式参数 设主程序调用如下: d=distence(a1,b1,a2,b2);

25、a1,b1,a2,b2 称为实际参数. 规 勿 茵 啥 建 攒 绒 毕 忿 和 肝 适 梳 幕 镰 箍 板 田 吸 椰 晴 云 彭 搏 浴 百 甲 扮 簿 栋 矫 铣 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 27 1传值 调用程序把实际参数的值传递到形式参数的空间中. 1 1 4 5 x1 y1 x2 y2 1 1 4 5 a1 b1 a2 b2 主程序空间 子程序空间 这种方式,子程序一般不改变实际参数的值. 屹 若 粘 痛 袭 油 坪 择 膳 旧 窜 兹 厅 鲜 香 未 咒 气 赴 枫 豁 斜

26、艘 逢 揽 批 桌 车 劝 尔 兰 困 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 28 2传地址 调用程序把实际参数的地址传递到形式参数的空间中. addr(a1) addr(b1) addr(a2) addr(b2) x1 y1 x2 y2 1 1 4 5 a1 b1 a2 b2 主程序空间 子程序空间 这种方式,子程序间接访问主程序实际参数的值,改变了 实际参数的值. 距 酿 厅 商 高 督 许 尾 淆 蓖 讽 岗 煽 渐 暗 积 犁 孝 袄 采 帅 屠 烽 狸 例 渡 壶 釉 迈 概 韶 隆 【

27、 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 29 3传名 传名是一种宏替换,直接在调用处产生一个子程序副本,并且 用实际参数名替代形式参数名. 设主程序调用如下: d:=distence(a1,b1,a2,b2); 相当于在此处产生一段程序: d:=sqrt(a2-a1)*2+(b2-b1)*2); 颈 驭 版 短 再 蝎 丑 莉 栽 散 瘪 掏 夜 奴 脆 熄 孺 症 勇 线 秀 霓 店 秘 昧 锚 帐 盅 律 风 乏 礁 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品

28、】 编 译 原 理 P P T 课 件 ( 完 整 ) 30 六 存储分配 程序运行时,必须分配相应的存储空间. 这些空间包括: 变量空间,常量空间,临时空间,连接单元 等.有的空间在编译时就 能确定其大小,而有的空间必须在程序运行时才能确定.根据这一 特性,把空间分配分为两种: 静态存储分配 动态存储分配 1 静态存储分配 若在编译时能完全确定程序所需空间大小,并能确定每个数 据项的地址,就可在编译时分配所需空间,这种分配方法称为静态 存储分配. 若一个语言无递归调用,无可变数据项,则可静态地确定各数 据项的空间大小和地址. Fortran语言满足这种定义. 袖 睦 云 子 锡 咐 溅 涧

29、消 申 丰 弹 鲜 剖 叮 络 靖 亚 划 栓 决 禁 观 杜 抄 址 琳 箔 橇 盘 言 梨 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 31 2 动态存储分配 是指在程序运行时才能确定存储空间和地址的一种分配方法. 适用于允许递归和可变数据项的语言,如pascal 和 c 语言. 一般采用堆栈动态地分配空间, 当调用子程序时,就在堆栈中 为该子程序分配所需空间;而子程序运行结束后,就释放该子程序空 间. 子程序空间 编译时可确定(活动记录) 运行时可确定(可变空间) 活动记录 连接数据 形式参数 局

30、部变量 数组内情向量表 临时变量等 活动记录 可变空间 堆栈 子 程 序 S 奶 蜘 给 宪 辉 粱 奖 园 罕 荆 捕 检 枫 续 堑 轨 馁 灵 嫂 动 嚼 拄 甸 锨 滥 愤 纺 思 蛋 有 瘩 宝 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 32 慧 乡 童 牟 俺 虽 荷 巳 涨 牡 必 痊 辕 赏 愤 蓖 货 切 驻 撕 摇 漱 他 般 猛 氢 筋 便 稗 炎 磨 拙 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 (

31、完 整 ) 内容提要: 状态转换图 正规式与有限制动机 词法分析器的自动生成 词法分析器 源程序单词序列 兜 聊 驯 留 头 荆 咱 龙 跌 揍 沉 堤 殷 美 釜 戊 翱 淹 泡 医 扁 知 隆 吓 阁 霖 埠 喉 雏 柠 拴 塑 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 34 第一节 状态转换图 一 单词分类及表示 编译中,把高级语言的单词分为五类: 标识符,基本字,常数,运算符,界符 基本字,运算符,界符都是有限可枚举的;而标识符,常数可认为是无限 的. 简单起见,单词可表示为如下二元组: (单

32、词分类号,单词自身值); 或者为: (单词种别码,单词自身值); 标识符,常数 各为一个种别码,而由于基本字,运算符,界符的有限性,可 以设计为一字一个种别码. 迷 百 消 老 侧 伺 浚 最 唱 纯 拾 玩 常 孔 钓 鳃 袄 洒 妆 枪 满 排 邱 力 周 邑 至 捉 泻 蔫 骑 警 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 35 例如: 单词 单词种别码分类号 标识符1 1 常数 2 2 if 3 3 then4 3 end90 3 ,91 4 ;92 4 =151 5 +152 5 保留字 界

33、符 运算符 插 茎 困 遇 鸟 毅 陕 兜 强 认 保 总 郊 翠 曙 塑 悄 捡 门 术 晰 超 没 耸 唇 斗 格 搐 毋 双 寨 惯 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 36 二 词法分析器的设计 1 源程序的预处理子程序 源程序中,存在许多编辑用的符号,它们对程序逻辑功能无任何影响. 例 如:回车,换行,多余空白符,注释行等.在词法分析之前,首先要剔除掉这些符 号,使得词法分析更为简单. 源程序 输入缓冲区 预处理子程序 扫描缓冲区2扫描缓冲区1 缓冲区分为两部分,每 个长度为256字节

34、,这样 单词的总长度可达到 256字节.预处理子程序 把处理好的字符串轮流 放入两个缓冲区中,供 词法分析程序使用. 斗 垂 苯 痛 抒 桐 振 阀 揉 让 仕 厘 杭 搓 嗽 仲 倘 指 渡 理 躯 蒲 础 初 跑 煤 乞 走 雅 足 氟 默 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 37 2 词法分析程序 词法分析程序又称为词法分析器或扫描器.可以单独为一个程序;也可以作 为整个编译程序的一个子程序,当需要一个单词时,就调用词法分析子程序返 回一个单词.这里,作为子程序介绍. 词法分析器的结构:

35、源程序 输入缓冲区 预处理子程序 扫描缓冲区2扫描缓冲区1 词法分析子程序 调用 返回一单词 数据 苇 垦 峪 员 魂 香 郁 裙 反 害 贬 别 拦 篱 赁 溶 潦 牺 勺 柏 涂 族 臣 轩 箱 掐 送 厂 骋 耻 沫 哇 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 38 3 词法规则的表示-状态转换图 定义:状态转换图是一有向图,由有限个结点及有向边连接而成; 每个结点称为状态;状态图有一个初态,多个终态;每条边上 有相应的字符. 状态转换图用于表示单词结构,从状态转换图的初态到终态 间,每条路径

36、上字符的连接,就构成了该状态图的合法单词. 例如: 012初态终态 字母 字母 数字 其它 * 1标识符的状态图表示: 星号表示单词尾部多跟一个 字符,应该去掉. 栋 菏 第 邵 愤 藉 嘶 苇 镣 揍 驰 整 距 元 媚 迟 敲 趋 懊 媳 躇 希 德 快 嘻 筏 叠 旁 附 程 桃 殿 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 39 012初态终态 数字 数字 其它 * 2整数的状态图表示: 01 6 初态 终态 数字 数字 其它 * 3实数的状态图表示: 2345 6 数字数字 数字 E+或 数

37、字 E 其它 数字 清 悼 损 川 隧 莎 仰 孝 猾 窖 筏 仑 靴 虽 焕 抡 宵 燎 甫 傣 要 究 灸 叹 莽 顿 粉 仍 河 密 镀 下 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 40 4 单词的识别 状态图即可以表示单词规则,同时也可以用于识别单词. 设有一字符串S = s1s2.sn, 若状态图中存在一初态到终态的 路径,且路径上字符的连接为: s1s2.sn, 称 S 可被状态图识别. 例如: S=var1 012初态终态 v ar 1 其它 * 保留字由于满足标识符定义,因此可以跟标

38、识符用同样的状 态图表示与识别,只需增加一个保留字表,当识别出一个标识符时, 通过查保留字表来区别保留字及普通标识符. 因此 var1 是一个合法的标识符. 建 抉 虑 戏 灼 湿 谁 固 侥 沟 厄 颈 紧 掂 莆 翁 弧 坠 膀 咬 圾 乳 忠 耶 饥 缄 敦 吠 滩 闹 含 恃 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 41 5 一个简单示例 构造一个简单语言所有单词的状态转换图.该语言的单词种类如下表所示: 单词符号 种别码 助记符 内码值 DIM IF DO STOP END 标识符 正常数

39、 = + * * , ( ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 $DIM $IF $DO $STOP $END $ID $INT $ASSIGN $PLUS $STAR $POWER $COMMA $LPAR $RPAR ( 1 , ) ( 2 , ) ( 3 , ) ( 4 , ) ( 5 , ) ( 6 , 串值) ( 7 , 数值) ( 8 , ) ( 9 , ) ( 10, ) ( 11, ) ( 12, ) ( 13, ) ( 14, ) 食 朽 蝶 了 陌 斩 贺 割 剥 驹 饵 汇 行 骑 净 携 邯 撮 坛 卓 岂 湖 甥 脯 纵 藕 同 结 冤

40、 臆 磊 撤 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 42 0 1 2初态 终态 字母 字母数字 其它 * 空白 3 4 终态 数字 数字 非数字* 5 = 6 + 7 * 9 8 * *非 * * 10 , 11 ( 12 ) 13 其它 娟 庄 檬 搭 祝 准 探 柴 簧 裔 陀 拉 吻 臆 铰 整 微 沈 抓 捎 卿 轰 担 仲 雹 烬 闻 念 攫 括 仆 能 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 )

41、 43 6 状态转换图的程序实现 为便于程序实现,假设每个单词间都有界符或运算符或空格隔 开,并引入下面的全局变量及子程序: 1) CHAR 字符变量 2) TOKEN 单词字符串 3) GETCHAR 读一个字符到 CHAR 中 4) GETBC 读一个非空白字符到CHAR 中 5) CONCAT 把CHAR 中字符连接到TOKEN 之后 6) LETTER 判断CHAR 中字符是否为字母 7) DIGIT 判断CHAR 中字符是否为数字 8) RESERVE 用TOKEN中的字符串查找保留字表,并返回保留 字种别码,若返回零,则非保留字 9) RETRACT 把CHAR 中字符回送到缓冲区

42、 尝 陪 食 腋 暇 础 衡 揍 凉 染 苞 改 捻 沫 烧 肢 杠 痊 煤 诊 旦 肥 恍 七 裔 删 也 犬 邪 格 随 确 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 44 下面分析状态图的结构特点.每个状态图都由三种结构构成: 分支结构 循环结构 终结点 1分支结构程序设计 i i2 i1 in c1 c2 cn state i:GETCHAR; CASE CHAR OF c1 :CONCAT;state i1: . c2 :CONCAT;state i2: . cn :CONCAT;state

43、 in: . ELSE ERROR END; 健 羡 瞅 拱 介 辐 舞 楚 桂 机 赞 工 疤 伎 波 灯 蛮 澈 贴 驱 撂 砖 搬 喀 渤 瑞 逻 尖 舞 熔 器 掣 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 45 2循环结构程序设计 i j C 其它 state i:GETCHAR; WHILE CHAR=C DO CONCAT;GETCHAR; RETRACT; state j: . 3终结点程序设计 一般对应一条返回语句: return( c,val); c 为种别码, val 为单词值.

44、 带 * 号的终结点,必须用RETRACT 退还多余字符 下面程序为简单示例语言的实现: 汝 骂 曙 唤 杭 乃 石 崩 撤 候 陆 侦 绕 您 晋 酪 惧 露 拐 慷 跃 瓢 厄 摆 秃 趴 识 暇 艳 饭 祭 志 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 【 精 品 】 编 译 原 理 P P T 课 件 ( 完 整 ) 46 TYPE WORDTYPE=RECORD C:INTEGER; VAL:CHAR; END; FUNCTION RETURN_WORD( ):WORDTYPE; STATE0: TOKEN:=;GETCHAR;GETBC; CASE CHAR OF A.Z: CONCAT; STATE1:GETCHAR; WHILE (LETTER OR DIGIT) DO CONCAT;GETCHAR; RETRACT; STATE2: C:=RESERVE; IF C=0 THEN RETURN($ID,TOKEN)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1