燕山大学编译原理课程设计词法分析器

上传人:沈*** 文档编号:66116658 上传时间:2022-03-26 格式:DOC 页数:13 大小:265.50KB
收藏 版权申诉 举报 下载
燕山大学编译原理课程设计词法分析器_第1页
第1页 / 共13页
燕山大学编译原理课程设计词法分析器_第2页
第2页 / 共13页
燕山大学编译原理课程设计词法分析器_第3页
第3页 / 共13页
资源描述:

《燕山大学编译原理课程设计词法分析器》由会员分享,可在线阅读,更多相关《燕山大学编译原理课程设计词法分析器(13页珍藏版)》请在装配图网上搜索。

1、 编译原理课程设计 词法分析器学生所在学院:燕山大学信息学院 学生所在班级:学 生 姓 名: 学 号: 2011年 12 月一实验目的:设计、编制和调试一个具体的词法分析程序,加深对词法分析的理解。二实验要求:1通过对PL/0词法分析程序(GETSYS)的分析,编制一个具有以下功能的词法分析程序:a输入待进行词法分析的源程序,输出为单词串,即由(单词,类别)所组成的二元组序列;b有一定的错误检查能力,例如能发现2a这类不能作为单词的字符串。2本程序自行规定 (1)保留字auto,break,case,char,const,continue,default,do,double,else,enum

2、,extern,float,for,goto,if,int,long,register,return,short,signed,sizeof,static,struct,switch,typedef,_Complex,_Imaginary,union,unsigned,void,volatile,while (2)分隔符 ,(,),;,(3)运算符+,-,*,/,%,=,=,=,!=,!,&,|,|,&,=,?:,-,+,-,.,+=,-=,*=,/=三使用环境:Windows下的visual c+6.0;四调试程序:1、举例说明 文件 test.txt目标程序:var c,i,b;proce

3、dure p;begin for(i:=0;ib;i:=i+1)c:=i+c; if c输入命令9六流程图 (1)总流程图置初值调用扫描源程序文件输入串结束 否 是结束 此处用到的函数为load()scan(),用load()对所有全局变量置初值,用scan()对输入的源文件进行扫描。(2)扫描程序 读入文件名提示出错可读 否 是读入字符 分析完成是否为EOF 是 否是结束符,空格符,水平制表符,回车符 是 否单引号 是进入单引号处理if 否双引号 是进入双引号处理if 否 是否为字母或“_” 进入保留字,标识符处理if 是 否进入整型,浮点型处理if是否为数字 否 是 否是否为/进入注释处理

4、if 是 否进入运算符,分隔符处理所用函数:扫描函数scan()扫描保留字,标识符char_search(char *word)扫描整型inta_search(char *word)扫描浮点类型intb_search(char *word)扫描字符串cc_search(char *word)扫描字符c_search(char *word)七程序解释1.所有函数一览表 load()置初值 char_search(char *word) 保留字和标识符判断 inta_search(char *word) 整型判断intb_search(char *word) 浮点型判断cc_search(char

5、 *word) 字符串常量判断c_search(char *word) 字符常量判断scan() 主扫描函数main() MAIN主函数 2.有关函数源代码 Scan()函数void scan()int count;char chin;FILE *fin;FILE *fout;char filename50;char temp100;char target3=;printf(请输入文件名:);scanf(%s,filename);if (fin=fopen(filename,r)=NULL)printf(Error! Cant open file : %sn,filename);return;

6、chin=fgetc(fin);while (chin!=EOF)/*对文件包含、宏定义进行处理*/if (chin=#)while (chin!=)chin=fgetc(fin);/*chin=fgetc(fin);*/*对空格符、水平制表符进行处理*/else if (chin= )|(chin=t);/*对回车符进行处理*/else if (chin=n);/*对单引号内的字符常量进行处理*/else if (chin=target0)if (xx19=0)fout=fopen(key1.txt,a);fprintf(fout,1t9tt%cn,target0);fclose(fout)

7、;xx19=1;temp0=chin;chin=fgetc(fin);temp1=chin;chin=fgetc(fin);if (chin!=target0)temp2=chin;chin=fgetc(fin);temp3=chin;temp4=0;elsetemp2=chin;temp3=0;c_search(temp);/*对双引号内的字符串常量进行处理*/else if (chin=)int i=0;tempi+=;chin=fgetc(fin);while (chin!=)tempi+=chin;chin=fgetc(fin);tempi=;tempi+1=0;cc_search(t

8、emp);/*对保留字、标识符进行处理*/else if (chin=A)&(chin=a)&(chin=A)&(chin=a)&(chin=0)&(chin=0)&(chin=0)&(chin=9)|(chin=.)if (chin=.)dotcount+;if (dotcount=2)break;tempi+=chin;chin=fgetc(fin);tempi=0;if (dotcount=1)intb_search(temp);elseinta_search(temp);if (chin!=EOF)fseek (fin,-1L,SEEK_CUR);/*对注释进行处理*/else if

9、(chin=/)chin=fgetc(fin);if (chin=)fout=fopen(output.txt,a);fprintf(fout,2t30tt/=n);fclose(fout);else if (chin!=*)fout=fopen(output.txt,a);fprintf(fout,2t4tt/n);fclose(fout);fseek(fin,-1L,SEEK_CUR);else if (chin=*)count=0;chin=fgetc(fin);fout=fopen(defination.txt,a);fprintf(fout,/*);while (count!=2)c

10、ount=0;while (chin!=*)fprintf(fout,%c,chin);chin=fgetc(fin);count+;fprintf(fout,%c,chin);chin=fgetc(fin);if (chin=/)count+;fprintf(fout,%cn,chin);elsefprintf(fout,%c,chin);chin=fgetc(fin);/*对运算符、分隔符进行处理*/elseint time=0;int firstblood=0;temp0=chin;chin=fgetc(fin);if (chin!=EOF)temp1=chin;temp2=0;for

11、(time=1;time=30;time+)if (strcmp(temp,key2time)=0)firstblood=1;if (xx2time=0)fout=fopen(key2.txt,a);fprintf(fout,2t%dtt%sn,time,temp);fclose(fout);xx2time=1;fout=fopen(output.txt,a);fprintf(fout,2t%dtt%sn,time,temp);fclose(fout);break;if (firstblood!=1)fseek(fin,-1L,SEEK_CUR);temp1=0;for (time=1;tim

12、e=9;time+)if (strcmp(temp,key1time)=0)if (xx1time=0)fout=fopen(key1.txt,a);fprintf(fout,1t%dtt%sn,time,temp);fclose(fout);xx1time=1;fout=fopen(output.txt,a);fprintf(fout,1t%dtt%sn,time,temp);fclose(fout);break;for (time=1;time=30;time+)if (strcmp(temp,key2time)=0)if (xx2time=0)fout=fopen(key2.txt,a)

13、;fprintf(fout,2t%dtt%sn,time,temp);fclose(fout);xx2time=1;fout=fopen(output.txt,a);fprintf(fout,2t%dtt%sn,time,temp);fclose(fout);break;chin=fgetc(fin);fout=fopen(output.txt,a);fprintf(fout,1t6ttn);fclose(fout);八,课程设计心得经过一个星期的编译原理课程设计,本人在老师的指导下,顺利完成该课程设计。通过该课程设计,收获颇多。一、对实验原理有更深的理解通过该课程设计,掌握了什么是编译程序,

14、编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,课本上的知识师机械的,表面的。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。二、对该理论在实践中的应用有深刻的理解通过把该算法的内容,算法的执行顺序在计算机上实现,知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。三、激发了学习的积极性通过该课程设计,全面系统的理解了编译原理程序构造的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对与计算机操作系统的认识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件运行,对计算机编译原理的认识更加深刻。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。在这次课程设计中,我就是按照实验指导的思想来完成。加深了理解文件系统的内部功能及内部实现,培养实践动手能力和程序开发能力的目的。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!