2022年语言词法分析器实验报告.doc
《2022年语言词法分析器实验报告.doc》由会员分享,可在线阅读,更多相关《2022年语言词法分析器实验报告.doc(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机科学与工程系编译原理课程设计实验报告姓名:_ *_ 学号_ *_ 年级专业及班级_08计算机科学与技术 成绩 实验名称词法分析程序设计与实现完成日期2011/4/12指导教师*实验目的:能够采用C编程语言实现简单的词法分析程序;设计、编制并调试一个词法分析程序,加深对词法分析原理的理解实验要求: 1. 对单词的构词规则有明确的定义;2. 编写的分析程序能够正确识别源程序中的单词符号; 3. 识别出的单词以的形式保存在符号表中(链表);4. 词法分析中源程序的输入以.c格式,分析后的符号表,将二元组保存在.txt文件中。实验内容:选择高级语言(C语言),编制它的词法分析程序。词法分析程序的
2、实现可以采用任何一种编程工具实验原理:1、算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号;2、其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 实验分析:(1)关键字:if else while do case int break等所有的关键字都是小写。(2)运算符和界符: = + - * / = = = ; ( ) 等(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:ID = _ | letter (letter | digit)*NUM = digit digit*(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、S
3、UM、运算符、界符和关键字,词法分析阶段通常被忽略。 (5)注释被忽略(6)各种单词符号对应的种别码(如下):单词符号种别码单词符号种别码auto1double2int3struct4break5else6long7switch8case9enum10register11typedef12char13extern14return15union16const17float18short19unsigned20continue21for22signed23void24default25goto26sizeof27volatile28do29while30static31if32a33b34f35n
4、36t37v3839?4041”42043ddd44 xhh45数字46标识符47#48(49)505152535455*56:5758%5960+61?62=63|64&65!6668=69=7071!=7273&7481“82%A(A可为dsc)83;84_85/868788899091其他类别99实验流程图(由于流程图过大因此各部分分开写):整体:扫描注释:扫描数字:扫描引号:扫描单词:扫描其他字符:实验环境:需要TC、VC+ 6.0等开发工具作为本次试验的环境。实验步骤:1、准备: 用TC、VC+等开发工具;2、对本实验的任务进行分析,确定实现功能的函数;3、写好程序,仔细修改函数;4
5、、上机操作:输入源程序,修改、调试,运行。5、写好试验报告。实验调试过程及测试结果/*源代码*/#include#include#include #includevoid main()FILE *fp,*fp1;int hanjsq=1;/行计数器,保存行号int guanjz(char ch1);/关键字和标识符判断char ch,infile15,outfile15;/定义输入和输出文件名printf(*Enter the infile name*n);scanf(%s,infile);/输入需要扫描的文件名printf(*Enter the outfile name*n);scanf(%
6、s,outfile);/输入需要另存为的文件名if(fp = fopen(infile,r) = NULL)/打开需要扫描的文件printf(cannot open filen);exit(0);if(fp1 = fopen(outfile,w) = NULL)/打开需要存入的文件printf(cannot open filen);exit(0);printf(n*n);printf(* 开始进行词法分析 *n);printf(*n);printf(n*n);printf(行号字符串种别码n);printf(*n);fprintf(fp1,*n);fprintf(fp1,行号字符串种别码n);
7、fprintf(fp1,*n);while(!feof(fp)ch=fgetc(fp);if(ch=10)hanjsq+;/*扫描头文件单词及保留字*/if(isalpha(ch) | ch=_)/如果第一个字符为字母或下划线则判断为标识符int i=0;char ch130;/假定每个标识符最长为ch1i+=ch;/将ch保存到ch10中并使i自加1while(!feof(fp)ch=fgetc(fp);if(ch=10)hanjsq+;/如果ch为换行符,则行计数器自加1if(isalpha(ch) | isdigit(ch) | ch=_)/如果ch为字母、数字或下划线就把ch放到ch1
8、i中并使i自加1ch1i+=ch;if(ch=.)/如果ch为小数点则判断是否为头文件 if(ch=fgetc(fp)=h)/如果小数点后一位为h则判定其为头文件if(ch=10)hanjsq+;ch1i+=.;ch1i+=h;ch1i=0;/把结束标志放到ch1i中作为单词结束标志printf(line %d:%s83n,hanjsq,ch1);/以字符串形式输出ch1fprintf(fp1,line %d:%s83n,hanjsq,ch1);break;else/如果小数点后一位不是h则判定其为标识符fseek(fp,-1,1);/fp回退1ch1i=0;/把结束标志放到ch1i中作为单词
9、结束标志printf(line %d:%s%dn,hanjsq,ch1,guanjz(ch1);/以字符串形式输出ch1fprintf(fp1,line %d:%s%dn,hanjsq,ch1,guanjz(ch1);break;if(!isalpha(ch) & !isdigit(ch) & ch!=_ & ch!=.)/如果ch不为字母、数字、下划线和点时判断其为标识符ch1i=0;printf(line %d:%s%dn,hanjsq,ch1,guanjz(ch1);fprintf(fp1,line %d:%s%dn,hanjsq,ch1,guanjz(ch1);break;/*扫描数字
10、*/if(isdigit(ch) | ch=-)/如果ch为数字或-if(isdigit(ch)/如果ch为数字printf(line %d:%c,hanjsq,ch);fprintf(fp1,line %d:%c,hanjsq,ch);while(!feof(fp)ch=fgetc(fp);/预读一位如果ch为数字和点则循环输出if(isdigit(ch) | ch=.)printf(%c,ch);fprintf(fp1,%c,ch);else/否则视为数字结束printf(46n);fprintf(fp1,46n);fseek(fp,-1,1);/回退一位ch=0;/置ch为0,以免影响下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 语言 词法 分析器 实验 报告
限制150内