ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:69.09KB ,
资源ID:2974393      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2974393.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理实验报告1.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理实验报告1.docx

1、编译原理实验报告1编译原理实验报告 专业:计算机科学与技术 班级:08-01班姓名:朱小燕 学号:200807010156一、实验目的 通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。二、词法分析器的实现1、词法分析过程的考虑 词法分析器的任务是将程序源代码看做一个字符串,只需从中分离出一个个具有独立意义的单词(包括标识符,符号和常量)即可,而无需考虑其在上下文环境中的正确性。 基于此认识,词法分析的过程可如下描述: 本程序中用户源程序存储在文件“E:prog.txt”文件中,程序首先调用readFromFile()函数将源程序代码

2、从文件中读出,放到数组中暂存,然后主函数调用scaner()函数对其进行逐个扫描,分离出的每个独立单词进行分类判断,构成二元组形式,再将其输出的文件“E:result.txt”中进行保存。2、各种单词符号对应的种别码0 标识符21 ret42 +63 |1 整型常量22 sho43 -64 ?:2 auto23 sig44 -65 =3 brea24 siz45 *66 +=4 case25 sta46 &67 -=5 char26 str47 /68 *=6 cons27 swi48 %69 /=7 cont28 typ49 +70 %=8 defa29 uni50 -71 =9 do30

3、uns51 72 73 &=11 els32 vol53 74 =12 enu33 whi54 76 ,14 flo35 )56 =77 15 for36 57 =78 ;16 got37 58 !=79 :17 if38 -59 &80 18 int39 .60 81 19 lon40 !61 |82 /20 reg41 62 &3、关键数据结构的描述 计数器count:将二元组写入文件时通过count判断是否是首次写入,若是则清空文件,否则追加写入; 字符串常量endStr:其值为“end”,在分析判断每一单词的种类时,该字符串作为rwtab表的结束标志; 数组prog200:暂存从文件中

4、读取的源程序代码,该词法分析器约定源代码长度不超过199; 数组token20:暂存每次分离出的单个具有独立意义的单词,该词法分析器约定每个单词的长度不超过19; 结构体result:存放一个单词的种别码和单词本身的值,在写入文件时以结构体中的元素为单位依次写入;4、程序结构的描述本程序采用结构化设计方法,共有两个文件,六个模块,分别介绍如下:rwtab.h文件包含一个模块,即各种单词符号对应的种别码,作为外部文件被main.cpp文件引用。main.cpp文件包含以下五个平行模块:1) main()函数:程序入口,控制整个程序的执行流程;2) scanner()函数:词法扫描程序;3) pr

5、int()函数:由main()函数调用,判别每一个已识别单词的种类,并将其以结构体形式标准化;4) readFromFile()函数:由main()函数调用,将源程序代码读出,并暂存至数组prog200中;5) writeToFile()函数:由main()函数调用,把标准的二元组写入文件中。三、程序运行截屏四、源代码 #include#include#include ctype.h #include string.h/*判断字符区域*开始*/int characters_exist=0; /*用来判断是否是纯数字*/int countoffinal=0; /*finalresult函数执行的

6、次数*/int word( char ch) /*判断是否为字母*/ int ch_exist=0; if(isalpha(ch) ch_exist=1; characters_exist=1; return(ch_exist);int digit(char ch) /*判断是否为数字*/ int dig_exist=0; if(isdigit(ch) dig_exist=1; return (dig_exist);int delimiter(char ch) /*判断是否是分界符*/ int del_exist=0; int i; char delimiters13=+,-,*,/,;,(,

7、),=, ,:,#; for(i=0;i13;i+) if(ch=delimitersi) del_exist=1; break; return(del_exist);int keywordcompare(char key,char keyword) /*比较关键字*/ int m=0; int equal=1; while(keywordm!=#) if(keym=keywordm) m+; else equal=0; break; return(equal); int keyword(char key) /*判断是否是关键字 */ char ifkeyword3=i,f,#; char e

8、lsekeyword5=e,l,s,e,#; char thenkeyword5=t,h,e,n,#; char forkeyword4=f,o,r,#; char whilekeyword6=w,h,i,l,e,#; char dokeyword3=d,o,#; char andkeyword4=a,n,d,#; char notkeyword4=n,o,t,#; char orkeyword3=o,r,#; int keyword_exist=0; if (keywordcompare(key,ifkeyword)|keywordcompare(key,elsekeyword)|keywo

9、rdcompare(key,thenkeyword)|keywordcompare(key,forkeyword)|keywordcompare(key,whilekeyword)|keywordcompare(key,dokeyword)|keywordcompare(key,andkeyword)|keywordcompare(key,notkeyword)|keywordcompare(key,orkeyword) keyword_exist=1; return(keyword_exist); /*判断字符区域*结束*/*写入文件区域*开始*/void writetofile(char

10、cha) /*将数组cha写入文件Dualistic_formula*/ int i=0; int numberofspace=0; /*用来实现写入文件时跳过过多的空格*/ FILE * fpa; if(fpa=fopen(Dualistic_formula,a)=NULL) printf(cannot open file Dualistic_formulan); exit(0); while(chai!=#&numberofspace=1) /*数组不结束且连续空格数最多为2时满足循环条件*/ if(chai= ) numberofspace+; else numberofspace=0;

11、 fputc(chai,fpa); i+; fclose(fpa); void keywordtofile(char cha) /*将关键字写入文件keyword*/ int i=0; int numberofspace=0; /*用来实现写入文件时跳过过多的空格*/ FILE * fpa; if(fpa=fopen(keyword,a)=NULL) printf(cannot open file keywordn); exit(0); while(chai!=#&numberofspace=1) /*数组不结束且连续空格数最多为2时满足循环条件*/ if(chai= ) numberofsp

12、ace+; else numberofspace=0; fputc(chai,fpa); i+; fclose(fpa); void wordstofile(char cha) /*将标识符写入文件words*/ int i=0; int numberofspace=0; /*用来实现写入文件时跳过过多的空格*/ FILE * fpa; if(fpa=fopen(words,a)=NULL) printf(cannot open file wordsn); exit(0); while(chai!=#&numberofspace=1) /*数组不结束且连续空格数最多为2时满足循环条件*/ if(chai= ) numberofspace+; else numberofspace=0; fputc(chai,fpa); i+; fclose(fpa); void digittofile(char cha) /*将数字写入文件digit*/

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1