首页 词法分析程序

词法分析程序

举报
开通vip

词法分析程序 实验题目 C_minus词法分析程序 小组合作 否 姓 名 班 级 学 号 一、实验目的: 1、识别简单语言的单词符号; 2、识别关键字、标识符、数字、运算符等。并扩展浮点识别功能。 3、调试词法分析程序,加深对词法分析原理的理解,掌握编写简单词法分析程序的一般步骤。 二、实验环境: 操作环境:Windows XP 开发语言:Microsoft Visual C++6.0 三、实验内容及步骤: 1、源程...

词法分析程序
实验题目 C_minus词法分析程序 小组合作 否 姓 名 班 级 学 号 一、实验目的: 1、识别简单语言的单词符号; 2、识别关键字、标识符、数字、运算符等。并扩展浮点识别功能。 3、调试词法分析程序,加深对词法分析原理的理解,掌握编写简单词法分析程序的一般步骤。 二、实验环境: 操作环境:Windows XP 开发语言:Microsoft Visual C++6.0 三、实验内容及步骤: 1、源程序代码: #include #include #include char prog[80],token[8]; char ch; int syn,p,m=0,n,row,sum=0; char *rwtab[6]={"begin","if","then","while","do","end"}; void scaner() { for(n=0;n<8;n++) token[n]=NULL; ch=prog[p++]; while(ch==' ') { ch=prog[p]; p++; } if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { m=0; while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { token[m++]=ch; ch=prog[p++]; } token[m++]='\0'; p--; syn=10; for(n=0;n<6;n++) if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } else if((ch>='0'&&ch<='9')) { { sum=0; while((ch>='0'&&ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } } p--; syn=11; if(sum>32767) syn=-1; } else switch(ch) { case'<':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='>') { syn=21; token[m++]=ch; } else if(ch=='=') { syn=22; token[m++]=ch; } else { syn=23; p--; } break; case'>':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=24; token[m++]=ch; } else { syn=20; p--; } break; case':':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=18; token[m++]=ch; } else { syn=17; p--; } break; case'*':syn=13;token[0]=ch;break; case'/':syn=14;token[0]=ch;break; case'+':syn=15;token[0]=ch;break; case'-':syn=16;token[0]=ch;break; case'=':syn=25;token[0]=ch;break; case';':syn=26;token[0]=ch;break; case'(':syn=27;token[0]=ch;break; case')':syn=28;token[0]=ch;break; case'#':syn=0;token[0]=ch;break; case'\n':syn=-2;break; default: syn=-1;break; } } void main() { p=0; row=1; cout<<"Please input string:"<0 then x:=2*x+1/3; end# 输出结果: 源程序(包括上式未有的while、do以及判断错误语句): begin x<=$; while a<0 do b<>9-x; end # 输出结果             四、实验过程与分析: 1、待分析的简单语言的词法 (1)、关键字:begin 、if 、then 、while 、do 、end,所有关键字都是小写; (2)、运算符和界符::= 、+ 、– 、*、/ 、< 、<= 、<> 、>、>= 、=、 ( )、#; (3)、其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义: ID=letter(letter| digit)* NUM=digit digit *; (4)、空格由空白、制 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。 2、词法分析程序的功能 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 五、实验心得体会: 通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用某种高级语言(例如C++语言)直接编写此法分析程序。另外,也让我重新熟悉了C++语言的相关内容,加深了对C++语言的用途的理解。比如:main()函数中,用cin>>ch;语句得到ch值的话,给定源程序的结果第一行得到的是(10,beginx),因为得到的字符串中省略了空格,改用cin.get(ch);问题便解决了。另外,我在程序中加入了row变量,以便能够准确得到错误所在。 六、指导教师评语及成绩: 实验过程与结果完整,实验分析得当。 教室签名   成绩   批阅日期 2012年 月 日            
本文档为【词法分析程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_890199
暂无简介~
格式:doc
大小:34KB
软件:Word
页数:0
分类:互联网
上传时间:2019-09-15
浏览量:23