当前位置:文档之家› 编译原理实验指导书

编译原理实验指导书

也即 enum workday。
-5-
编译原理实验指导书 请大家重点掌握第三种方法。
二、 文件 2.1 文件的打开
fopen()函数用来实现打开文件,其调用方式通常为: FILE *fp; fp=fopen(文件名,使用文件方式) 在打开一个文件时,通知编译系统 3 个信息:(1)需要打开的文件名;(2)使用 文件的方式,“读”还是“写”等;(3)让哪一个指针变量指向被打开的文件。例如: fp=fopen(“a.txt”, “r”); //r 代表 read,即读入 表示要打开名字为 a.txt 的文件,使用文件方式为读入,fopen 函数带回指向 a.txt 文件的指针并赋给 fp,这样 fp 就和文件 a.txt 相联系了,即 fp 指向文件 a.txt。
方法三:用 typedef 关键字将枚举类型定义成别名,并利用该别名进行变量声明 typedef enum workday {
saturday, sunday = 0, monday, tuesday, wednesday,
-4-
编译原理实验指导书
thursday, friday } workday; //此处的 workday 为枚举型 enum workday 的别名 workday today, tomorrow; //变量 today 和 tomorrow 的类型为枚举型 workday
二、实验内容及要求
1. 选择一种熟悉的高级语言(如 C 语言,C++,VB 或 VC 等),设计、编写、调 试一个词法分析子程序。
2. 待分析的源程序为一个简单的 C 语言程序,如下所示: main() { int x,a,b; float y,c,d;
- 10 -
编译原理实验指导书
x = a + b; y=c / d; if(x>y)
-1-
编译原理实验指导书
在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类 型叫枚举型。
1.1 定义一种新的数据类型 - 枚举型 以下代码定义了这种新的数据类型 - 枚举型
enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN };
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素 之间用逗号,隔开。 (2) DAY 是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可 无的项。 (3) 第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。 (4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。 (5) 枚举型是预处理指令#define 的替代。 (6) 类型定义以分号;结束。
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY
编译原理 实验指导书
梅琴、杨亚会撰写 唐海、周鹏审核
电气与信息工程学院计算机工程系
2013 年 12 月
前言
编译原理是计算机科学与技术、软件工程等专业的主干课和必修课,由于本课程 相对抽象且内容复杂,一直是比较难学的一门课程。在本课程的学习过程中,实践教 学非常重要,只有通过上机实验,才能对比较抽象的课程内容产生一个具体的感性认 识。但是,目前国内市场上很少有较详细且比较适合我校实际的实验指导书,为此, 特编了本指导书,希望能对我校的《编译原理》教学工作有所帮助。
实验者在实验过程中应该侧重写出自己在算法分析、设计思路、实现功能或程 序代码等方面的特色,写出设计和实现过程中遭遇到的难点和解决办法,可以不拘 泥于实验指导给出的参考性设计思路,尽可能在深度和广度上加以拓展。只有这种 各具特色的实验报告,才将更有利于体现实验者在创新思维和动手能力上的差异。
通过这些实验,能使学生对这些部份的工作机理有一个详细的了解,达到“知其 然,且知其所以然”的目的。由于实验代码较长,涉及到 C 语言中枚举类型和文件的 相关知识,特在此版实验指导书中加了一节预备知识。由于这门课实验难度较大,所 以希望相关教师在实验前安排好学生的预习工作,并要求学生写好实验预习报告。
方法二:类型定义与变量声明同时进行 enum //跟第一个定义不同的是,此处的标号 DAY 省略,这是允许的。 {
saturday, sunday = 0,
-3-
编译原理实验指导书
monday, tuesday, wednesday, thursday, friday } workday; //变量 workday 的类型为枚举型 enum DAY enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //变量 days 的类型 为枚举型 enum week enum BOOLEAN { false, true } end_flag, match_flag; //定义枚举类型并声明 了两个枚举型变量
// 也即 enum workday enum workday 中的 workday 可以省略:
typedef enum {
saturday, sunday = 0, monday, tuesday, wednesday, thursday, friday } workday; //此处的 workday 为枚举型 enum workday 的别名。 workday today, tomorrow; //变量 today 和 tomorrow 的类型为枚举型 workday,
-8-
fclose(out); }
编译原理实验指导书
2.5 fseek 函数 用 fseek 函数可以实现改变文件的位置指针。其调用形式为: fseek(文件类型指针,位移量,起始点); 下面是 fseek 函数调用的几个例子: fseek(fp,100L,SEEK_SET); //将位置指针移到离文件头 100 个字节处 fseek(fp,50L,SEEK_CUR); //将位置指针移到离当前位置 50 个字节处 fseek(fp,-10L,SEEK_END); //将位置指针从文件末尾向后退 10 个字节
象不是终端而是磁盘文件。其一般调用形式为: fprintf(文件指针,格式字符串,输出列表);
例如: fprintf(fp,“%d,%f”,i,t);
它的作用是将整型变量 i 和实型变量 t 的值按%d 和%f 的格式输出到 fp 指向的文 件上。
例子:将一个磁盘文件中的信息复制到另一个磁盘文件中。 #include <stdio.h> #include <stdlib.h>
三、实验预习提示
编者 2013 年 12 月
目录
预备知识................................................................ 1 实验一 词法分析器设计实验 ............................................ 10 实验二 用递归下降法分析表达式实验 .................................... 33 实验三 用算符优先法分析表达Байду номын сангаас实验 .................................... 39 参考文献............................................................... 50
本书中 C 程序均在 Microsoft Visual C++ 6.0 下调试通过。 由于编者水平有限,本书中必然存在着不少缺点,在此恳请大家给予批评和指正, 我们将尽力纠正。在此特对关心支持编写本书的院系领导表示感谢。本书中大量参考 代码引用了何炎祥老师主编,华中理工大学出版社出版的《编译原理》和刘铭主编, 电子工业出版社出版的《编译原理》书中内容,在此表示衷心的感谢。
2.2 文件的关闭 在使用完一个文件后应该关闭它,以防它再被误用。“关闭”就是使文件指
针变量不指向该文件。用 fclose()函数关闭文件,调用的一般形式为: fcloes(文件指针);
例如:fclose(fp);
-6-
编译原理实验指导书
2.3 fgetc 函数 从指定的文件读入一个字符,该文件必须是以读或读写的方式打开的。fgetc
编译原理实验指导书
预备知识
【目的】
1. 掌握 C 语言程序设计中枚举类型和文件的使用方法,加深对枚举类型和文件 的理解。 2. 本部分是编译原理知识的基础知识。
【预备知识内容及要求】
一、 枚举类型 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define
来完成这项工作,代码可能是: #define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6 #define SUN 7
本书实验环境主要为 C 环境(由于兼容性问题,建议使用 Microsoft Visual C++ 6.0),书中给出的参考源程序也是 C 源程序,但由于实验者熟悉精通的语言工具不尽 相同,因而强求采用统一的编程语言编程是不现实的。实验者在掌握了编译程序各个 阶段的功能和原理之后,不难借助使用其他自己熟悉的语言实现相关功能。
-9-
班号 选课班中的序号
编译原理实验指导书
湖北汽车工业学院实验报告
学号
姓名
完成日期


日至节
实验一 词法分析器实验
一、实验目的
1. 掌握生成词法分析器的方法,加深对词法分析原理的理解。 2. 掌握设计、编制并调试词法分析程序的思想和方法。 3. 本实验是高级语言程序设计、数据结构和编译原理中词法分析原理等知识的 综合。
x = 10; else
y=100; } 将该源程序的源文件经词法分析后输出以二元组形式表示的单词符号序列。 3. 编写的程序具有一定的查错能力。提交的实验报告中要有实验名称、实验目 的、实验内容、实验程序清单、调试过程和运行结果,程序的主要部分做出功能说 明,并有实验收获体会或改进意见等内容。 4. 实验前请仔细阅读实验预习提示,提示中程序仅供参考。 5. 本实验建议学时数为 4 学时。
相关主题