C++词法分析器.doc

上传人:一*** 文档编号:2754503 上传时间:2020-05-03 格式:DOC 页数:14 大小:150.43KB
返回 下载 相关 举报
C++词法分析器.doc_第1页
第1页 / 共14页
C++词法分析器.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《C++词法分析器.doc》由会员分享,可在线阅读,更多相关《C++词法分析器.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、/编译原理词法分析器实验报告张雅梅(10072510308)一、实验目的:1设计、编制、调试一个词法分析子程序识别单词,加深对词法分析原理的理解。2掌握在对程序设计语言的源程序扫描的过程中,将其分解后各类单词的语法分析方法。二、实验要求:1. 对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。2. 本程序自行规定:(1)关键字begin,end,if,then,else,while,write,read,do, call,const,char,until,procedure,rep

2、eat(2)运算符:+,-,*,/,=(3)界符:,;,.,(,),:(4)其他标记 如字符串,表示以字母开头的标识符。(5)空格、回车、换行符跳过。在屏幕上显示如下:( 1 , 无符号整数)( begin , 关键字 )( if , 关键字 )( +, 运算符 )( ; , 界符 )( a , 普通标识符 )三、使用环境:Window vista 下的 Visual Studio 2008;四、实验步骤1. 查询资料,了解词法分析器的工作过程与原理。2. 分析题目,整理出基本设计思路。3. 实践编码,将设计思想转换用c语言编码实现,编译运行。4.测试功能,多次设置包含不同字符,关键字的待解析

3、文件,仔细察看运行结果,检测该分析器的分析结果是否正确。通过最终的测试发现问题,逐渐完善代码中设置的分析对象与关键字表,拓宽分析范围提高分析能力。五、流程图五、调试程序:1.举例说明文件位置:C:TEST.txt目标程序如下:Int main()i=10;j=100;n=1;sum=0;mult=1;while (i0) n=n+1;i=i-1;if (j=50) then sum=sum+j; else mult=mult*(j+1);sum=sum+i;if (i1) then n=n-1; else n=n+1;if (n2) then n=n+2; else n=n-2;2.运行结果:

4、六、程序源代码:#include #includeusing namespace std;#define MAX 22 char ch = ;string key15=begin,end,if,then,else,while,write,read,do, call,const,char,until,procedure,repeat;int Iskey(string c) /关键字判断 int i; for(i=0;iMAX;i+) if(pare(c)=0) return 1; return 0;int IsLetter(char c) /判断是否为字母 if(c=a)|(c=A) retur

5、n 1; else return 0;int IsDigit(char c) /判断是否为数字 if(c=0&c=9) return 1; else return 0;void analyse(FILE *fpin) string arr=; while(ch=fgetc(fpin)!=EOF) arr=; if(ch= |ch=t|ch=n) else if(IsLetter(ch) while(IsLetter(ch)|IsDigit(ch) if(ch=A) ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); i

6、f (Iskey(arr)coutarrt$关键字endl; else coutarrt$普通标识符endl; else if(IsDigit(ch) while(IsDigit(ch)|ch=.&IsDigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); coutarrt$无符号实数endl; else switch(ch) case+: case- : case* : case= : case/ :coutcht$运算符endl;break; case( : case) : case : case :

7、case; : case. : case, : case : case :coutcht$界符endl;break; case: :ch=fgetc(fpin); if(ch=) cout:=t$运算符endl; else cout=t$运算符 :ch=fgetc(fpin); if(ch=) cout=t$运算符)coutt$输入控制符endl; else coutt$运算符endl; fseek(fpin,-1L,SEEK_CUR); break; case :ch=fgetc(fpin); if(ch=)cout=t$运算符endl; else if(ch=)coutt$输出控制符) c

8、outt$运算符endl; elsecoutt$运算符endl; fseek(fpin,-1L,SEEK_CUR); break; default : coutcht$无法识别字符endl; void main() char in_fn30; FILE * fpin; coutin_fn; if(fpin=fopen(in_fn,r)!=NULL) break; else cout文件路径错误!请输入源文件名(包括路径和后缀名):; coutn*分析如下*endl; analyse(fpin); fclose(fpin); coutendl; cout按任意键结束a;六、实验心得: 通过此次实

9、验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,使用某种高级语言(例如C+语言)直接编写此法分析程序。另外,也让我重新熟悉了C+语言的相关内容,加深了对C+语言的用途的理解。在本次实验中,我纠正了一个一直以来的概念错误:main不是关键字,它定义为程序的入口,是主函数!在本实验中,虽然我把main初始化在关键字表(字符指针类型数组)*Key10中,当与该数组中字符串进行比较时,若与main匹配成功,则返回2,若为其他关键字则返回1,以此来把main从关键字中区别出来。在本实验中的关键字表只初始化了几个常用的关键字,还可继续扩充(只需扩大数组,向其中补充要添加的关键字)。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁