编译原理实验报告
姓名:
学号:
班级:
学院:
南昌大学信息工程学院计算机系
2014 年 6 月
1
目录
实验一……………………………………………………… 3
实验二……………………………………………………… 8
实验三……………………………………………………… 15
2
学生姓名:
实验类型:□ 验证
一、实验目的
实验 1 词法分析程序的设计
学 号: 专业班级:
□ 综合 □ 设计 □ 创新 实验日期: 实验成绩:
掌握计算机语言的词法分析程序的开发方法。
二、实验内容
编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。
三、实验要求
1、根据以下的正规式,编制正规文法,画出状态图;
标识符
十进制整数
字母(字母 |数字字符 )*
0 |(1|2|3|4|5|6|7|8|9)( 0|1|2|3|4|5|6|7|8|9) *
如有余力,则进一步分析八进制和十六进制整数,其正规式如下:
八进制整数
十六进制整数
运算符和界符
关键字
0 (1|2|3|4|5|6|7)( 0|1|2|3|4|5|6|7) *
0x (0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f) ( 0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|)f *
+ - * / = = = ( ) ; { }
main if then else while do int ( 可根据需要添加 )
2、根据状态图,设计词法分析函数 int scan( ),完成以下功能:
1) 从文本文件中读入测试源代码,根据状态转换图,分析出一个单词,
2) 以二元式形式输出单词 单词种类,单词属性
其中 单词种类 用整数表示:
0:标识符
1:十进制整数
2:八进制整数
3:十六进制整数
运算符和界符,关键字采用一字一符,不编码
其中 单词属性 表示如下:
标识符,整数由于采用一类一符, 属性用单词表示
运算符和界符,关键字采用一字一符,属性为空
3、编写测试程序,反复调用函数 scan(),输出单词种别和属性。
四、实验环境
PC 微机
DOS 操作系统或 Windows 操作系统
Turbo C 程序集成环境或 Visual C++ 程序集成环境
3
五、实验步骤
1. 根据正规式,画出状态转换图;
2. 根据状态图,设计词法分析算法;
3. 采用 C 语言,设计函数
4. 编制测试程序(主函数 代码如下:
#includestdio.h
#includestdlib.h
#includestring.h
#define SYMBOL_CODE 0
scan( ),实现该算法;
main);
FILE *outputFile; //输出文件
void isNumber();
void isOthers();
// 标识符编码 0
#define NUM_CODE 1
// 数字编码 1
// 可识别的关键字
char keywordstab[8][30]= {{main},{if},{then},{else},{int},{ return},{void},{while}};
char ch; //接受字符
char name[30]={};
FILE *sourceFile; //源文件
void isKeyword();
void output_keyword()
{
printf( 关键字 :%s,%s\n,name,-);
}
void output_symbol()
{
printf( 标识符 :%s,%s\n,0,name);
}
void output_number()
{
printf( 数字 :%s,%s\n,1,name);
4
==//(ch=z))// 不
==
//
(ch=z))
// 不
// 输 出 标
// 初
}
void output_others()
{
printf( 其他 :%s,%s\n,name,-)
原创力文档

文档评论(0)