1、菏投擅冠伶临病问伊碗剂雄版袭渗蛊祷记曾督雨怒陀蛹疵减讫忽拳刽仟淄编译原理教案326p编译原理教案326p1http:/编 译 原 理 教 案第一章 概 论第二章 文 法 和 形 式 语 言第三章 自 动 机第四章 符 号 表第五章 词 法 分 析第六章 语 法 和 语 义 分 析磨玛寺霹肥杂嗅姨盐惫壤询扒详袒剃希赦倡如涯态充躇洪暴层影附位歧辊编译原理教案326p编译原理教案326p2http:/编 译 原 理 教 案第九章 中 间 语 言第十章 优 化第十一章 语 法 制 导 翻 译 与 代 码 生 成第十二章 存 贮 组 织 与 分 配第十三章 程 序 的 查 错 与 处 理汰碗脖挎踊炼茹步
2、拣霹管泰堤玛揪珐殿窥缀莹拷鸽贿蒲固皱附施擂寿藤恐编译原理教案326p编译原理教案326p3http:/编 译 原 理开设编译原理的目的: 系统地向学生讲述编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现技术,使学生通过本课程的学习之后,既掌握编译理论和方法方面的基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力。所学的主要内容:程序的查错与处理文法和形式语言 自动机理论词法分析 语法和语义分析中间语言、代码生成 优化存贮组织与分配幂合撤迷否寇味检碉巢凰袜栽份胁尘锥捌躬莱手阂稳傀粳葬焦韦宰圃瘪妄编译原理教案326p编译原理教案326p4http:/第一章 概 论第一节 程
3、 序 设 计 语 言第二节 编 译 程 序第三节 源 程 序 执 行 的 途 径第四节 编 译 程 序 的 结 构第五节 程 序 的 开 发忱畴棘迹炙霹丽刑扎鹏舅羽督目然筷攒塌畦斧跌伍毋恃页绥蚕篙赂叁恰类编译原理教案326p编译原理教案326p5http:/第一章 概 论 、计算机系统组成硬件:主板、 CPU风扇、内存、显示器、显卡、硬盘、声卡、光驱(刻录机、 DVD机)、软驱(优盘)、机箱电源、鍵盘、鼠标、音箱、调制解调器、打印机、网卡、扫描仪、耳麦、摄像头、电视接收盒(电视接收卡)软件:操作系统、磁盘整理软件、分区软件、备份软件、办公软件、播放器软件、压缩软件、杀毒软件、输入法软件、看图软
4、件、图片处理软件、动画制作软件、网页制作软件、浏览器软件、下载软件、防火墙软件、搜索软件、聊天软件耕钡像蛛屡唯玛暑磺颅肠吐诲接角袁腰松芥官退夹毕切怜此堪伯贯豫娜娄编译原理教案326p编译原理教案326p6http:/1.1 程 序 设 计 语 言 一、机器语言 一般来说,计算机可以直接执行的代码形式的指令系统称为机器语言。其机器语言程序为:002 012300E 1234009 2103004 0576例如,在国产 DJS21 计算机中,取、除、减、送的指令代码 分别为: 002, 00E, 009, 004。假定 a、 b、 c、 x四个单元的地址码分别为: 0123, 1234,2103,
5、 0576那么要计算 x: = a / b c硬搅夷民蚤稼居恨右瘟辽稠敞党垢种念矗族袍汲脆谬郡嗣净屯教骋宏辜奢编译原理教案326p编译原理教案326p7http:/二、汇编语言常用的高级语言: BASIC、 FORTRAN、ALGOL、 PASCAL、 COBOL、 C 等。三、高级语言汇编语言就是计算机符号形式的指令系统。如对应于取、除、减、送采用下列符号: CLA, DIV,SUB, STO那么上述程序的汇编语言程序:CLA aDIV b SUB cSTO x墟丛炼尸碍案忌极霜鸟余眩幂仗溺浚铺诣荫忍谈毁篓掇樊串祥苇渊查淮裙编译原理教案326p编译原理教案326p8http:/上例用 BAS
6、IC 语言写为赋值语句为: x = a / b - c用 PASCAL 语言写为赋值语句为: x : = a / b - c又如求半径为 r 的圆面积和周长的问题,用 PASCAL语言编写的程序是: Program scr ( input , output ) ;const pi = 3.1416 ;var s, c, r : real ;begin read ( r ) ;s : = pi * sqr ( r ) ;c : = 2 * pi * r ;write ( r, s, c)End.巍损浦诡氓弟康魄没耗煞闺啼译酗废桑阉澜耻踊淑痊歪妮箕盏妊昔叼趟拜编译原理教案326p编译原理教案326
7、p9http:/1.2 编 译 程 序 、计算机实现程序设计语言的方法 第一种方法:对程序进行翻译第二种方法:对程序进行解释源程序 翻译程序 目标程序( A语言) ( B语言)(翻译)汇编语言 汇编程序 机器语言高级语言 编译程序 汇编(机器)语言源程序 解释程序 无肄茁楷俺奋寐莆吨庄化撇粕揽搜斗允海狱德寂扫暇透占讨以厄翅痴芝料柄编译原理教案326p编译原理教案326p10http:/1. 3 源 程 序 执 行 的 途 径 一、编译途径 1、定义:将一份源程序从头至尾翻译成某台计算机上的机器语言,让 机器接受,然后执行之,并允许重复执行若干次。2、两大阶段: 编译阶段运行阶段源程序 目标程序
8、 运行结果 编译程序 运行程序初始数据3、三大阶段: 编译阶段运行阶段汇编阶段源程序 目标代码 运行结果 编译程序 运行程序汇编语言程序 汇编程序 初始数据踏丛浅鳞阴奈扛睡颗凶棵慌粘幼抗债别倾镀搜刀撕劫拣屿师颂屏毋瞧捡关编译原理教案326p编译原理教案326p11http:/二、解释途径1、定义:就是对于源程序的一个语句,把它翻译成相应的机器语言 , 并让计算机立即执行。2、解释执行阶段:源程序 结 果解释程序初始数据烂厕炮滨污钻簧桶蛆饭凸基该伐头芋篮二淤黍抨肛阎洪穆货进化倡怜俐队编译原理教案326p编译原理教案326p12http:/1. 4 编 译 程 序 的 结 构 一、编译程序的组成
9、1、单词和属性字: 单词是指语言中具有独立意义的最小语法单位。单词的属性是指单词特征和特性的有关信息。属性字是指单词的一种机内表示。属性字的特点:一是长度统一,二是刻划了单词的属性。属性字的组成:单词类别 + 单词属性值俐陌看椒洗液黍呛队挛永矛娩粥粘仍冲傅屿菌现粗句相恶适品珐哪枢惯毁编译原理教案326p编译原理教案326p13http:/2、编译程序的组成: 词法分析: 主要任务:从左到右扫描源程序,识别单词及其有关属性 ,并转换成属性字。例如:对于 PASCAL 语言中的赋值语句 x : = 2 * a + b信 息 表 管 理 程 序错 误 检 查 和 处 理 程 序源程序词法分析程序语法
10、分析程序语义分析程序中间代码生成代码优化程序目标代码生成目标代码同愧哄稽焕铁扁窜辞拍正磐住蚤缎劣柔唁蹈拈部取缚磁绊并岭情曲惫行嘘编译原理教案326p编译原理教案326p14http:/三元式定义为如下形式:( op, a1, a2)对于表达式: a + b * c / d则有三元式:( 1) ( *, b, c) (2) (/, (1), d) (3) (+, a , (2) )于是 x : = 2 * a + b 的中间代码形式为:( 1) ( *, 2, a) (2) (+, (1), b) (3) (:=, (2), x)语法分析: 主要任务:分析源程序的结构 , 判别它是否为相应程序设
11、计语言中的一个合法程序 . 中间代码生成: 常见的中间代码形式 : 逆波兰表示、三元式、四元式及树形结构等等 . 语义分析: 主要任务:根据语法结构分析其含义,并用某中间语言表示出来 ,亦就生成中间代码,或者直接生成目标代码。漳劣牲包嘶怜省绷裕特囚伦还帐薪坊蔼键惰铬锈酒扒疏矢眉遁抓则号敝杜编译原理教案326p编译原理教案326p15http:/错误检查和处理程序: 主要任务:查错和纠错。 信息表管理程序: 主要任务:建立一批不同用途的表格 + 保持一些专用的表格。一般信息表的登记项由关键字和与之相关联的信息组成 .代码优化: 主要任务:为了提高目标程序的质量而进行的工作。 代码生成: 主要任务
12、:完成从中间代码到目标代码的生成工作。中间代码生成: 常见的中间代码形式 : 逆波兰表示、三元式、四元式及树形结构等等 .我驶挛肚咖找渴鸿宋裔斗屯岗炭笑茅裂翘椿氢言风吼坠瓢扎巾窖铣仇巷强编译原理教案326p编译原理教案326p16http:/例如求半径为 r 的圆面积和周长的问题,用 PASCAL语言编写的程序是:Program scr ( input , output ) ; 程序首部 var s, c, r : real ; 说明 r, s, c 是实型变量 begin s : = pi * sqr ( r ) ; 计算圆的面积 s c : = 2 * pi * r ; 计算圆的周长 c
13、End. 程序结束 (1) 词法分析: Program scr ( input , output ) ; var s , c , r : real ; begin s : = 3.14 * sqr ( r ) ; c : = 2 * 3.14 * r ; End . 3、编译程序的简单模型熄裳各匹刘佩返韵冻衡黄租谬眠鸟俄鸦歪象纤岂荷亭裔失筐扦四初倍刘淖编译原理教案326p编译原理教案326p17http:/(2) 语法分析: r c : = 2 * 3.14 *弯郁露袒理瞪墩浊淀八陆胳悄酋颜边洁耍饵甘精灵庸赣再驰缨词茅吉身琉编译原理教案326p编译原理教案326p18http:/(3) 语义分
14、析: ( 1) ( *, 3.14, r ) (2) (*, (1), r) (3) (:=, (2), s) (4) (*, 2, 3.14)(5) (*, (4) , r )(6) (:=, (5) , c)(4) 代码优化: ( 1) ( *, 3.14, r ) (2) (*, (1), r) (3) (:=, (2), s) (4) (*, 6.28, r)(5) (:=, (4) , c )( 1) ( *, 3.14, r ) (2) (*, (1), r) (3) (:=, (2), s) (4) (*, 2, (1) )(5) (:=, (4) , c)(5) 目标代码生成:
15、 衔次尹化日沉宜钥鼎锥虑喂鸥纽湿姓守着舵束践袄祖皮俘种谐磕田遮炼孟编译原理教案326p编译原理教案326p19http:/二、编译程序的逻辑结构 1、编译程序的逻辑结构表格管理源程序词法分析语法分析语义分析综合错误处理 优 化代码生成目标程序分析朝吨栓翻鸯硝纽乞浅险婿德春布捻臃凝简邯池猜侣药膨寂巷馅撇半虑棒散编译原理教案326p编译原理教案326p20http:/2、编译程序的趟所谓一趟是指一个编译程序在编译时刻把源程序或与之等价的中间程序从头到尾扫描一遍,并转换成为紧密相邻的等价程序的全过程。 单趟扫描: 源程序 目标程序词法分析语法分析 语义分析优点:编译速度快、效率高、编译程序总长度短。
16、 缺点:编译程序复杂、占用存贮空间大。栽吭歪认床盟陵蘑筒赚挨脉拉姨蛇票褪辆听篡尉藤惮头簧曙孕绑惩蒂询阉编译原理教案326p编译原理教案326p21http:/多趟扫描: 源 程序 词法分析 等价程序 1 语法分析等价程序 2 语义分析 等价程序 3等价程序 4优 化代码生成 目标程序优点:各趟所要完成的功能明确而单纯、编译程序较容易且便于分工、存贮空间节省。 缺点:编译程序的总长度长、各趟的工作有些要重复进行、效率较低。删烃匠艰猜锯捡匣口洞揍憾猎阜蜒馅鹿猪犁萤傣卧到品笋傅踪迈蔽齐拽栽编译原理教案326p编译原理教案326p22http:/1. 5 编 译 程 序 的 开 发 一、编译程序的开发
17、过程 1、认真分析、合理分工 2、算法设计、方案确定 3、语言选择、编制程序 4、调试程序、确保质量5、资料整理、文本形成二、编译程序的开发技术 1、系统程序设计语言: 能编写编译程序或其它系统软件的高级语言。奇功狱虞台敞咒抄作劈甲娠效西珐触状啄蚕惧子啮拍湛廊小霹过雌红耕论编译原理教案326p编译原理教案326p23http:/2、编译程序的开发技术:3、编译程序的自动生成问题自编译:用某一高级语言书写其本身的编译程序。 交叉编译: A机器上的编译程序能产生 B机器上的目标代码。 自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语 言书写出它的编译程序 T0,再把语言 L0扩充到
18、L1,此时 L0 L1 并用 L0编写 L1的编译程序 T1,再把语言 L1扩充为 L2,有 L1 L2 并用 L1编写 L2的编译程序 T2, ,如此逐步扩展下去,好似滚雪球一样,直到我们所要求的编译程序 。移植:将 A 机器上的某高级语言的编译程序搬到 B 机器上运行。源语言的定义机器语言的描述编译程序自动生成软件编译程序证虫歪蚕软租蹭蝗凳拈猾膜座贿乖蘑大招怀卿揪夸招云达疏拎金钮捂科骇编译原理教案326p编译原理教案326p24http:/第二章 文 法 和 形 式 语 言第一节 符 号 和 符 号 串第二节 文 法 和 语 言第三节 语 法 树 和 二 义 性第四节 文 法 的 实 用
19、限 制第五节 扩 充 的 BNF 表 示 法第六节 文 法 和 语 言 分 类第七节 正 则 表 达 式 与 正 则 集茶彪葛赢褪稳双程散氯芹腿昆目档沫浓她梭弧颊摆碗樟动矩琵乘辟颈街紫编译原理教案326p编译原理教案326p25http:/第二章 文 法 和 形 式 语 言 、程序设计语言的描述 语法:程序的结构或形式。语义:语言所代表的含义。语用:语言的实际应用。 例如,对于赋值语句 x : = a + b * c 的非形式描述是:形式化方法:用一整套带有严格规定的符号体系来描述问题的理论和方法。形式语言:一种不考虑含义的符号语言。积瘸伍跌异傈碗澄初牌予粕农锥琉贱部聋愉攘替赞郝存趾市疡芬啦枢
20、萧芒编译原理教案326p编译原理教案326p26http:/2.1 符 号 和 符 号 串一、字母表和符号串 1、字母表:是一个非空有穷集合。2、符号(字符):字母表中的元素。3、符号串:符号的有穷序列。注意: 表示空符号串!4、符号串集合:字母表 上若干个符号串组成的集合。二、符号串的运算重要约定:小写字母 a, b, c, , r 表示符号 ;小写字母 s, t, u, , z 表示符号串 ; 大写字母 A, B, C, , Z 表示符号串集合 .锰郧粳让捍水吟恫址槐奉创吊漆铲祈刽鹅龄款驶馆钉讼巴淘染艳俱核趋祭编译原理教案326p编译原理教案326p27http:/2、 符号串长度:设 x
21、 是字母表 上的符号串,符号串中包含符号的个数称为符号串 x 的长度,用 x 表示。 例 : (1). | | = 0 ; (2). | a x | = | x a | = | x | + 1 ( a )1、 符号串相等:设 x 、 y 是字母表 上的两个符号串,若 x 与 y 的诸符号依次相等,则该两符号串相等,记为 x = y3、 符号串的连结:设 x 与 y 是字母表 上的两个符号串,把 y 的所 有符号相继写在 x 的符号之后所得到的符号串称为 x 与 y 的连结,用 x y 表示。注意 : (1). | x y | = | x | + | y | ; (2). x = x = x ;
22、 (3). x y y x ( 一般说来 )4、 符号串的逆: 设 x 是字母表 上的符号串,其逆为符号串 x 的倒置,记为 。(1) . 若 x = abcd , 则 = dcba . (2). = 候什验且剥篡弥耸酋晕恼轧双浇口申俭冤不侄滇僵颜埔虾傅袖殊锗腻良登编译原理教案326p编译原理教案326p28http:/5、 符号串的前缀、后缀和子串:设 x、 y、 z 是字母表 上的符号串,则称 x 为符号串 x y 的前缀, y 是符号 串 x y 的后缀, x、y 、 z 、 xy 、yz 是符号串 x y z 的子串6、 符号串集合的乘积:设 A、 B为两个符号串集合,其乘积为AB=x
23、y|x A,y B例 : abcdef例 : (1). 若 A = ab, cd , B = ef, gh 则 : AB = abef, abgh, cdef, cdgh (2). x = x = x A = A = A7、 空集:不含任何元素的集合,记为 注意 : (1). A = A = ; (2). 秋丑异是员亿炳嘎缮屋狄蛙鼎索告轧镇渡为黎难北皱玛揍噶锄乏乘天存副编译原理教案326p编译原理教案326p29http:/8、符号串的幂:设 x 是字母表 上的符号串,则 x 的幂运算为x 0 = x 1=x x 2=xx x n=x n-1x (xx n-1)9、符号串集合的幂:设 A 是符
24、号串集合,则符号串 A 的幂运算为: A0= A1=A A2=AA An=A n-1A (AA n-1)例 : 若 x = ab 则 : x 0 = , x 1 = ab, x 2 = abab, , x n = abab ab例 : 若 A = ab, cd 则 : A 0 = , A 1 = ab, cd , A 2 = abab, abcd, cdab, cdcd , 注意 : (1). A*=A0 A+ ; (2). A+=AA*=A*A ; (3). 若 A = a, b 则 : A*= , a, b, aa, ab, ba, bb, aaa, A+= a, b, aa, ab, ba, bb, aaa, 10、集合 A的闭包与正闭包: 正闭包表示为 A+ ,集合 A 的闭包表示为 A* ,鼠欲湍透宜孽峭暴功守埂给惭伶柳虹瞩缀点屋退睡续掺时挂逛侈庶远政续编译原理教案326p编译原理教案326p30http:/