c语言的适当大小的子集,编译原理实验报告2

. 教育资料武汉理工大学学 生 实 验 报 告 书实验课程名称 编译原理开 课 学 院 计算机科学与技术学院指导老师姓名 饶文碧学 生 姓 名学生专业班级学生学号 实验课成绩

. 教育资料— 学年 第学期实验课程名称: 编译原理实验项目名称单词的词法分析实验成绩实验者 专业班级 组别同组者 实验日期第一部分:实验分析与设计(可加页)一、 实验内容描述(问题域描述)完成对某一种常用高级语言(如 Pascal 、C语言、 PL/0语言)的各类单词进行词法分析,即对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词;并把其转换成属性字输出。实验要求:(1)选择常用高级程序设计语言(如 Pascal 、C语言、 PL/0语言)的源程序作为词法分析对象。(2)根据教学要求和学生具体情况, 从上列语言之一中选取它的一个适当大小的子集, 可以选取一类典型单词, 也可以尽可能使各种类型的单词都能兼顾到。 其基本要求是:对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词,并把其转换成属性字输出。二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)#include #include #include #include char *table[7]={" ","main","int","if","then","else","return"},TOKEN[20],ch; // 定义关键字int lookup(char *TOKEN){ // 关键字匹配函数 int m,i; for(i=1;i<6;i++){ if((m=strcmp(TOKEN,table[i]))==0) return(i); } return(0); }

. 教育资料void out(int c,char *TOKEN){ // 输出函数 printf("(%d,%s)\n",c,TOKEN); } void scanner(FILE *fp){ // 扫描函数 char TOKEN[20]={'\0'}; char ch; int i,c; ch=fgetc(fp); // fp 并自动指向下一个字符 if(isalpha(ch)){ // 判断该字符是否是字母 TOKEN[0]=ch; ch=fgetc(fp); i=1; while(isalnum(ch)){ // 判断该字符是否是字母或数字 TOKEN[i]=ch; i++; ch=fgetc(fp); } TOKEN[i]='\0'; fseek(fp,-1,1); // 回退一个字符 c=lookup(TOKEN); if(c==0) out(6,TOKEN); // 输出标识符 else out(c,TOKEN); // 输出关键字 } else if(isdigit(ch)){ // 判断是否是数字 TOKEN[0]=ch; ch=fgetc(fp); i=1; while(isdigit(ch)){ TOKEN[i]=ch; i++; ch=fgetc(fp); } TOKEN[i]='\0'; fseek(fp,-1,1); out(7,TOKEN); } else { TOKEN[0]=ch; switch(ch){ case'{':out(17,TOKEN); break; case'}':out(18,TOKEN); break;

. 教育资料 case',':out(14,TOKEN); break; case';':out(15,TOKEN); break; case''){ out(11,TOKEN); } else { fseek(fp,-1,1); out(8,TOKEN); } break; case'=':out(10,TOKEN); break; case'>':ch=fgetc(fp); TOKEN[1]=ch; if(ch=='=') out(13,TOKEN); else { fseek(fp,-1,1); out(12,TOKEN); } break; default:printf("error!\n"); break; } } } void main() { FILE *fp; if((fp=fopen("D:\\ZHT.txt","r"))==NULL){ // 读取文件内容 , 并返回文件指针 , 该指针指向文件的第一个字符 fprintf(stderr,"error opening.\n"); exit(1); } do{ ch=fgetc(fp); if(ch=='#') // 文件以 #结尾作为扫描结束条件 break; if(ch==' ') // 如果是空格,自动跳到下个字符 scanner(fp);

. 教育资料 else{ fseek(fp,-1,1); // 如果不是空格,则回退一个字符并扫描 scanner(fp); } }while(ch!='#'); return(0); } 三、主要仪器设备及耗材VC6.0 第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)、分隔符、 标识符、无符号常数中, 即二元式编码形式输出。每次调用词法分析程序它均能自动继续扫描下去形成下一个单词 , 直至整个源程序全部扫描完毕 , 并形成相应的单词串形式的源程序。二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

编译原理实验报告2

编译原理实验报告2

b59b78120c69ae20fb58052390669ee1.png

微信扫码关注,掌握海量文档

举报

收藏

鸟哥

3

0

4.0分

共13页

2021-01-30

5研币

VIP免费

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

.

教育资料

武汉理工大学

学生实验报告书

实验课程名称编译原理

开课学院计算机科学与技术学院

指导老师姓名饶文碧

学生姓名

学生专业班级

学生学号实验课成绩

Q6zQQAAAABJRU5ErkJggg==

.

教育资料

—学年第学期

实验课程名称:编译原理

实验项目名称

单词的词法分析

实验成绩

实验者专业班级组别

同组者实验日期

第一部分:实验分析与设计

(可加页)

一、实验内容描述(问题域描述)

完成对某一种常用高级语言(如 Pascal、C语言、PL/0语言)的各类单词进行

词法分析,即对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词;

并把其转换成属性字输出。

实验要求:

(1)选择常用高级程序设计语言(如 Pascal、C语言、PL/0语言)的源程序作

为词法分析对象。

(2)根据教学要求和学生具体情况,从上列语言之一中选取它的一个适当大小

的子集,可以选取一类典型单词,也可以尽可能使各种类型的单词都能兼顾到。其

基本要求是:对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词,

并把其转换成属性字输出。

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用

硬件逻辑或者算法描述)

#include

#include

#include

#include

char *table[7]={"

","main","int","if","then","else","return"},TOKEN[20],ch;

//定义关键字

int lookup(char *TOKEN){ //关键字匹配函数

int m,i;

for(i=1;i<6;i++){

if((m=strcmp(TOKEN,table[i]))==0)

return(i);

}

return(0);

}

免费试读已结束,如果需要继续阅读或下载,请您购买

本文档需要5研币

收藏

立即下载

评论(0)

没有更多评论了哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值