编译原理实验报告2.doc

编译原理实验报告2.doc

ID:49552218

大小:136.50 KB

页数:13页

时间:2020-03-02

编译原理实验报告2.doc_第1页
编译原理实验报告2.doc_第2页
编译原理实验报告2.doc_第3页
编译原理实验报告2.doc_第4页
编译原理实验报告2.doc_第5页
资源描述:

《编译原理实验报告2.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、.学生学号实验课成绩武汉理工大学学生实验报告书实验课程名称编译原理开课学院计算机科学与技术学院指导老师姓名饶文碧学生姓名学生专业班级教育资料.—学年第学期实验课程名称:编译原理实验项目名称单词的词法分析实验成绩实验者专业班级组别同组者实验日期第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)完成对某一种常用高级语言(如Pascal、C语言、PL/0语言)的各类单词进行词法分析,即对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词;并把其转换成属性字输出。实验要求:(1)选择常用高级程序设计语言(如

2、Pascal、C语言、PL/0语言)的源程序作为词法分析对象。(2)根据教学要求和学生具体情况,从上列语言之一中选取它的一个适当大小的子集,可以选取一类典型单词,也可以尽可能使各种类型的单词都能兼顾到。其基本要求是:对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词,并把其转换成属性字输出。二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)#include#include#include#include

3、pe.h>char*table[7]={"","main","int","if","then","else","return"},TOKEN[20],ch;//定义关键字intlookup(char*TOKEN){//关键字匹配函数intm,i; for(i=1;i<6;i++){if((m=strcmp(TOKEN,table[i]))==0)return(i);}return(0);}教育资料.voidout(intc,char*TOKEN){//输出函数printf("(%d,%s)",c,TOKEN);}v

4、oidscanner(FILE*fp){//扫描函数charTOKEN[20]={''};charch;inti,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]='';fseek(fp,-1,1);//回退一个字符c=lookup(

5、TOKEN);if(c==0)out(6,TOKEN);//输出标识符elseout(c,TOKEN);//输出关键字}elseif(isdigit(ch)){//判断是否是数字TOKEN[0]=ch;ch=fgetc(fp);i=1;while(isdigit(ch)){TOKEN[i]=ch;i++;ch=fgetc(fp);}TOKEN[i]='';fseek(fp,-1,1);out(7,TOKEN);}else{TOKEN[0]=ch;switch(ch){case'{':out(17,TOKEN);br

6、eak;case'}':out(18,TOKEN);break;教育资料.case',':out(14,TOKEN);break;case';':out(15,TOKEN);break;case'<':ch=fgetc(fp);TOKEN[1]=ch;if(ch=='='){out(9,TOKEN);}elseif(ch=='>'){out(11,TOKEN);}else{fseek(fp,-1,1);out(8,TOKEN);}break;case'=':out(10,TOKEN);break;case'>':ch=

7、fgetc(fp);TOKEN[1]=ch;if(ch=='=')out(13,TOKEN);else{fseek(fp,-1,1);out(12,TOKEN);}break;default:printf("error!");break;}}}voidmain(){FILE*fp;if((fp=fopen("D:\ZHT.txt","r"))==NULL){//读取文件内容,并返回文件指针,该指针指向文件的第一个字符fprintf(stderr,"erroropening.");exit(1);}do{ch=

8、fgetc(fp);if(ch=='#')//文件以#结尾作为扫描结束条件break;if(ch=='')//如果是空格,自动跳到下个字符scanner(fp);教育资料.else{fseek(fp,-1,1);//如果不是空格,则回退一个字符并扫描scanner(fp);}}while(ch!='#');return(0);}三

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。