武汉理工大学编译原理实验报告.doc

武汉理工大学编译原理实验报告.doc

ID:59153126

大小:141.50 KB

页数:18页

时间:2020-09-11

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

《武汉理工大学编译原理实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、学生学号实验课成绩武汉理工大学学生实验报告书实验课程名称《编译原理》开课学院计算机科学与技术学院指导老师姓名饶文碧学生姓名学生专业班级软件2014—2015学年第1学期实验课程名称:编译原理实验项目名称词法分析器的设计实验成绩实验者专业班级软件组别同组者实验日期第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)1.问题描述:对于常用高级语言(如Pascal、C语言)的各类单词进行词法分析。2.实验内容:完成对某一种常用高级语言(如Pascal、C语言、PL/0语言)的各类单词进行词法

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

3、步骤等,用硬件逻辑或者算法描述)1.待分析的简单语言的词法:(1)关键字:mainvoidreturnifendthenelseint所有的关键字都是小写。(2)运算符和界符:{},;<<=<>===>>=::=++=--=**=//=#()(3)其他单词是标志符(ID)和整形常数(NUM),通过以下正规式定义:ID=letter(letter

4、digit)*NUM=digitdigit*(4)空格空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略

5、。2.各种单词符号对应的种别码(针对于较为熟悉的c语言)单词符号种别码 单词符号种别码main1=18void2==19return3>20if4>=21end5:22then6:=23else7+24int8+=25Letter(letter

6、digit)9-26digitdigit*10-=27{11*28}12*=29,13/30;14/=31<15#32<=16(33<>17 )343.实验源代码如下:#include#include#include

7、tring.h>#include//头文件库charTOKEN[30];char*table[9]={"","main","void","return","if","end","then","else","int"};//定义关键字externintlookup(char*);externvoidout(int,char*);externvoidreport_error(void);//函数及全局变量声明/*extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中

8、,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定*/intlookup(char*TOKEN){intm,i;for(i=1;i<8;i++){if((m=strcmp(TOKEN,table[i]))==0)//table中关键字匹配returni;}return0;}//关键字匹配函数,返回关键字在表中的位置,空出空格voidout(intc,char*TOKEN){printf("(%d,%s)",c,TOKEN);}//输出在表中位置和读取的

9、字符voidreport_error(){printf("error!");}//输出没有考虑的情况voidscanner(FILE*fp){charTOKEN[30]={''};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

10、=fgetc(fp);}TOKEN[i]='';fseek(fp,-1,1);//回退一个字符c=lookup(TOKEN);if(c==0)out(9,TOKEN);//输出标识符号,定编号为9elseout(c,TOKEN);//输出表中编号和关键字}elseif(isdigit(ch))//判断是否是数字{TOKEN[0]=ch;ch=fgetc(fp);i=1;while(isdigit(ch)){TOKEN[i]=ch;i++;ch=fgetc(fp);}//判断是否

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

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

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