编 译 原 理
实验与课程设计指导书
2016年10月
《编译原理》实验指导书
目录
一、课程简介 ...................................................................................... 2 二、实验目的 ...................................................................................... 2 三、实验环境 ...................................................................................... 2 四、实验任务 ...................................................................................... 2 五、实验项目 ...................................................................................... 2 实验一. 词法分析 ......................................................................... 2 实验二. 自顶向下语法分析 ......................................................... 8 实验三. 自底向上语法分析 ....................................................... 10 实验四. 语义分析 ....................................................................... 11 实验五. 中间代码生成 ............................................................... 12 六、课程设计 .................................................................................... 13 七、考核方式 .................................................................................... 13 八、参考文献 .................................................................................... 14 九、附录——PL0语言编译源程序清单(部分) ........................ 15
《编译原理》课程组 1 of 37
《编译原理》实验指导书
编译原理实验与课程设计指导
一、课程简介
1. 课程名称:编译原理(Principle of Compiler)
2. 课程总学时: 64 学时[理论: 48 学时;实验: 16 学时 3. 课程总学分: 4 学分
二、实验目的
编译原理是计算机类专业特别是计算机软件专业的一门重要专业课。设置该课程的目的在于系统地向学生讲述编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现技术,使学生通过学习既掌握编译理论和方法方面的基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力。编译原理是一门理论性和实践性都比较强的课程。进行上机实验的目的是使学生通过完成上机实验题目加深对课堂教学内容的理解。同时培养学生实际动手能力。
三、实验环境
微机CPU P4以上,256M以上内存,安装好C语言,或C++,或Visual C++开发环境。
四、实验任务
用C/C++/Visual C++语言编写某语言的词法分析程序、语法分析程序、语义分析程序、中间代码生成程序。
五、实验项目
实验一. 词法分析 1. 实验目的
《编译原理》课程组 2 of 37
《编译原理》实验指导书
? 根据PL/0语言的文法规范,编写PL/0语言的词法分析程序。 ? 通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;
加深对课堂教学的理解;提高词法分析方法的实践能力。 ? 掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示
文件的法。 ? 掌握词法分析的实现方法。 ? 上机调试编出的词法分析程序。
2. 实验准备
微机CPU P4以上,256M以上内存,安装好C语言,或C++,或Visual C++.
3. 实验时间
4学时
4. 实验内容
(1) 试用手工编码方式构造识别以下给定单词的某一语言的词法分析
程序。 (2) 语言中具有的单词包括五个有代表性的关键字begin、end、if、
then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。 (3) 单词的分类:构造上述语言中的各类单词符号及其分类码表。
表1 语言中的各类单词符号及其分类码表
单词符号 类别编码 类别码的助记符 begin end if then else 标识符 整常数 < <= = <> > >= 1 2 3 4 5 6 7 8 9 10 11 12 13 BEGIN END IF THEN ELSE ID INT LT LE EQ NE GT GE 单词值 字母打头的字母数字串 数字串 《编译原理》课程组 3 of 37
《编译原理》实验指导书
:= + - * / 14 15 16 17 18 IS PL MI MU DI
5、 实验方法与处理过程
在一个程序设计语言中,一般都含有若干类单词符号,为此可首先为每类单词建立一张状态转换图,然后将这些状态转换图合并成一张统一的状态图,即得到了一个有限自动机,再进行必要的确定化和状态数最小化处理,最后据此构造词法分析程序。在此为了使词法分析程序结构比较清晰,且尽量避免某些枝节问题的纠缠,假定要编译的语言中,全部关键字都是保留字,程序员不得将它们作为源程序中的标识符;在源程序的输入文本中,关键字、标识符、整常数之间,若未出现关系和算术运算符以及赋值符,则至少须用一个空白字符加以分隔。作了这些限制以后,就可以把关键字和标识符的识别统一进行处理。即每当开始识别一个单词时,若扫视到的第一个字符为字母,则把后续输入的字母或数字字符依次进行拼接,直至扫视到非字母、数字字符为止,以期获得一个尽可能长的字母数字字符串,然后以此字符串查所谓保留字表(此保留字表已事先造好),若查到此字符串,则取出相应的类别码;反之,则表明该字符串应为一标识符。采用上述策略后,针对表I中部分单词可以构造一个如图1所示的有限自动机(以状态转换图表示)。在图1中添加了当进行状态转移时,词法分析程序应执行的语义动作。根据图1,可用C语言编写出符合以上几项要求的一个相应的扫描器程序,如程序一所示。
《编译原理》课程组 4 of 37