实验词法分析器含源代码

上传人:d**** 文档编号:53968672 上传时间:2022-02-11 格式:DOC 页数:13 大小:178.50KB
收藏 版权申诉 举报 下载
实验词法分析器含源代码_第1页
第1页 / 共13页
实验词法分析器含源代码_第2页
第2页 / 共13页
实验词法分析器含源代码_第3页
第3页 / 共13页
资源描述:

《实验词法分析器含源代码》由会员分享,可在线阅读,更多相关《实验词法分析器含源代码(13页珍藏版)》请在装配图网上搜索。

1、实验词法分析器含源代GE GROUP system office room GEIHUA16H-GEIHUA GEIHUA8Q8-词法分析器实验报告、实验目的及要求本次实验通过用C语言设计、编制、调试一个词法分析子程序, 识别单词,实现一个C语言词法分析器,经过此过程可以加深对编 译器解析单词流的过程的了解。运行环境:硬件:windows xp软件:visual C+6.0二、实验步骤1查询资料,了解词法分析器的工作过程与原理。2. 分析题目,整理出基本设计思路。3. 实践编码,将设计思想转换用c语言编码实现,编译运行。4. 测试功能,多次设置包含不同字符,关键字的待解析文件,仔细 察看运行结

2、果,检测该分析器的分析结果是否正确。通过最终的测 试发现问题.逐渐完善代码中设置的分析对象与关键字表,拓宽分 析范围提高分析能力。三、实验内容本实验中将c语言单词符号分成了四类:关键字key (特别的将 main说明为主函数)、普通标示符、常数和界符。将关键字初始化 在一个字符型指针数组*1丫中,将界符分别由程序中的case列 出。在词法分析过程中,关键字表和case列出的界符的内容是固定 不变的(由程序中的初始化确定),因此,从源文件字符串中识别 出现的关键字,界符只能从其中选取。标识符、常数是在分析过程 中不断形成的。对于一个具体源程序而言,在扫描字符串时识别出一个单词, 若这个单词的类型

3、是关键字、普通标示符、常数或界符中之一,那 么就将此单词以文字说明的形式输出每次调用词法分析程序,它 均能自动继续扫描下去,形成下一个单词,直到整个源程序全部扫 描完毕,从而形成相应的单词串。输出形式例如:void $关键字流程图、程序流程图:程序:#includestring h#includestdio. h#includestdlib h#includectype h/定义关键字char*KeyLl0二t mam , void , int , char , pnntf , scant , else , if , re turn”;char Word20, ch;/存储识别出的单词流int

4、 IsAlpha(char c) 判断是否为字母if( (cU z) & (c=, ()11( (c= Z) & (c= A) return 1; else return 0;int IsNum(char c) 判断是否为数字if (c=, O &c二9) return 1;else return 0:int IsKey(char *Word) 识别关键字函数int m, i;for(i=0;i :ch二fgetc(fp);Wordl=ch;if(ch=二)printf(*%st$运算符nn* Word);else fseek(fp, -1, 1);printf (%st$运算符nnz/, W

5、ord);break;case% : ch=fgetc (fp);Wordl=ch;辻(ch= 二)printf (“st$运算符nn, Word);if(IsAlpha(ch) printf(%st$类型标识符nn, Word);else fseek(fp, -1, 1);printf (z/%st$取余运算符nn, Word);break;default:printf C无法识别字符!nn) ; break;main()char in_fn30j;/文件路径FILE *fp;printfCn请输入源文件名(包括路径和后缀名):);whilegets(in_fn);/scanfin_fn);

6、if (fp二fopen(in_fn, r) !二NULL) break: 读取文件内容,并返回文件指针,该指针指向文件的第一个字符else printf C文件路径错误!请重新输入:);printf (zn* 词法分析结果如下丄 、工“ 、1 * *1* * *1* * (doch=fgetc(fp);辻(ch=) break;/文件以#结尾,作为扫描结束条件else if(ch= 丨 |ch=t 丨 |ch=rf) 忽略空格,空白,和换行/回退一个字节开始识别单词流else fseek(fp, -1, 1); scanner (fp); while (ch!= if );return (0

7、);4实验结果解析源文件:vo i d ma i n ()int a二3;a+二 b;pr i ntf(%d,a);return;#解析结果:5.实验总结分析通过本次实验,让再次浏览了有关c语言的一些基本知识,特别是对文件,字符串进行基本操作的方法。C语言中没有string类型,因此本实验中的 对字符串提取与识别均借助ttincludestring. h及字符型数组来实现。让我练 习对字符串函数应用的同时也提高了自己的逻辑思维能力。在本次实验中,我纠正了一个一直以来的概念错误:main不是关键字,它定义为程序的入口,是主函数!在本实验中,虽然我把main初始化在关键字 表(字符指针类型数组)*Key10中,当与该数组中字符串进行比较时,若与 main匹配成功,则返回2,若为其他关键字则返回1,以此来把main从关键字中区别出来。在本实验中的关键字表只初始化了几个常用的关键字,还可继续扩充(只 需扩大数组,向其中补充要添加的关键字)。如果要对本程序中未识别的C语言中的一些其他的字符进行扩充(目前处理为 不可识别字符),可在程序代码中继续添加case选项,分别对相应要识别的特 殊字符加以描述

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