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

编译原理实验五


成绩:
指导教师:
批阅时间: 年 月 日
1、 实验内容或题目
掌握并实现识别程序中关键字的方法,并编程实现。为词法分析打 基础。
2、 实验目的与要求
任意输入一段C语言程序,字符串中的每个单词用空格分隔,要求 识别出程序中的关键字。
3、 实验步骤与源程序
⑴ 实验步骤 1. 定义关键字表。可以考虑用字符数组定义。 2. 定义一个输出关键字的缓冲区。用字符数组实现即可。长度 可暂定为40。 3. 打开代码文件。 4. 从文件中读入单词 5. 判断单词是否是关键字
if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) //如果ch是 字母,则进行标识符处理
{ id[0]=ch; j=1;
//从文件中读入下一个字符 ch=getc(fin); while(isalnum(ch)) //如果是字母数字则组合标识符;如果
不是则标识符组合结束 {
电子信息学院 实验报告书
课 程 名: 《编译原理》 题 目: 实验五 词法分析(一) 实验类别 【设计】 班 级: 学 号: 姓 名:
评语:
实验态度:认真( ) 一般( ) 差( ) 实验结果:正确( ) 部分正确( )错( ) 实验理论:掌握( ) 熟悉( ) 了解( ) 不懂( ) 操作技能:强( ) 一般( ) 差( ) 实验报告:好( ) 一般( ) 差( )
int es=0,j,n; //es错误代码,0表示没有错误。j,n为临时变量, 控制组合单词时的下标等
printf("请输入源程序文件名(包括路径):"); scanf("%s",PL0Scanin);
if ((fin=fopen(PL0Scanin,"r"))==NULL) //判断输入文件名是否 正确
⑵ 源代码
#include <stdio.h>
#include <ctype.h>
# include <iostream>
//下面定义保留,为简化程序,使用字符指针数组保存所有保留字。
//如果想增加保留字,可继续添加,并修改保留字数目
#define keywordSum 3
//可根据需要添加保留字列表
if (n>=keywordSum) //不是保留字,输出标识符
符号
printf("%s\t%d\t%s\n",id,0,"IDENT"); //输出标识符
\t%d\t%s\n",strlwr(id),0,strlwr(id)); // 输出保留字符号
{ printf("\n打开词法分析输入文件出错!\n"); return(1);//输入文件出错返回错误代码1
} ch=getc(fin); while(ch!='\0'){//未读到文件结束
while (ch==' '||ch=='\n'||ch=='\t') ch=getc(fin); if (ch==EOF) break;
}
}
fclose(fin);//关闭输入输出文件
//fclose(fout);
return(es); //返回主程序
}
4、 测试数据与实验结果(可以抓图粘贴)
5、 结果分析与实验体会
//将读入的字符存放在id数组中,同时将数组下标增加1,准备容纳下 一个字符。
id[j++]=ch; ch=getc(fin); //读下一个字符
}
id[j]='\0'; //标识符组合结束
//查保留字
n=0;
//z在保留子表中查找保留字
while
((n<keywordSum)
&&
strcmp(strlwr(id),keyword[n])) n++;
char *keyword[keywordSum]={ "begin","main","void"};
char PL0Scanin[300];//用于接收输入输出文件名
FILE *fin; //用于指向输入输出文件的指针
int main()//词法分析函数
{
char ch,id[40]; //ch为每次读入的字符,id用于保存识别出的单 词
相关主题