版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、词法分析器实验报告 实验目的: 设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理 解。 功能描述: 该程序要实现的是一个读单词过程,从输入的源程序中,识别出各个具有独立 意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出 各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error !”,然后跳 过错误部分继续进行) 设计思想: 设计该词法分析器的过程中虽然没有实际将所有的状态转移表建立出来,但是 所用的思想是根据状态转移表实现对单词的识别。首先构造一个保留字表,然后,每 输入一个字符就检测应该进入什么状态,并将该字符连接到d串后继续输入,如此循
2、 环,最后根据所在的接受状态以及保留字表识别单词。 符号表: 记号 类别 属性值 WS - - const 保留字 1 var 保留字 1 call 保留字 1 begi n 保留字 1 if 保留字 1 while 保留字 1 do 保留字 1 odd 保留字 1 end 保留字 1 the n 保留字 1 procedure 保留字 1 = 运算符 2 运算符 2 = 运算符 2 运算符 2 运算符 2 = 运算符 2 * 运算符 2 + 运算符 2 - 运算符 2 / 运算符 2 := 运算符 2 ide nt 标识符 3 nu mber 常数 4 ( 分隔符 5 ) 分隔符 5 J 分
3、隔符 5 分隔符 5 分隔符 5 状态转换图: 标识符及保留字: letter or digitt nu mber: other other 关系操作符: (=,2) (,2) (=,2) (,2) 分隔符: (:=,2) 3 算术运算符: 使用环境: Windows xp 下的 visual C+6.0 程序测试: in putl : int a,b; a=b+2; in put2: while(a=0) do 7x=x+6.7E+23; end; in put3: beg in: x:=9 if x0 the n x:=x+1; while a:=0 do b:=2*x/3,c:=a; e
4、nd; output1: output2: output3: 3,i nt output2: output3: 3,a 1,while 1,begi n 5, 5,( error line 1 3,b 3,a 3,x 5,; 2,= 2,:= 3,a 4,0 4,9 2,= 5,) 1,if 3,b 1,do 3,x 2,+ error line 3 2, 4,2 2,= 4,0 5,; 3,x 1,then 2,+ 3,x 4,6.7E+23 2 := 5,; 3,x 1,e nd 2,+ 5,; 4,1 5,; 1, while 3,a 2, := 4,0 1,do 2,/ 5,; 3,b
5、 4,3 1,e nd 2,:= 5, 5,; 4,2 3,c 2,* 2 := J J 3,x 3,a 测试结果与预期结果一致 源程序代码: #in clude #in clude void mai n() int i=O,j,k=O,state=1,f=O,l inenum=1; char a1110=co nst,var,call,begi n,if,while,do,odd,e nd,the n,proc edure; char b,d4O=O; freope n(i nput.txt,r,stdi n); freope n(output.txt,w,stdout); b=getcha
6、r(); while(b!=EOF)/*判断所输入字符是否为结束符*/ if(b= |b=n|b=t)/*滤过空格、换行等分隔符号*/ if(b=n) linenu m+; b=getchar(); else if(b=a b=getchar(); for(j=0;j11;j+)/*查询保留字表确定该单词是否是保留字*/ if(strcmp(d,aj)=0) prin tf(1,%sn,d); k=1; break; if(k=0)/*在保留字表中没有查到该单词,是标识符*/ prin tf(3,%sn,d); for(j=0;j=0di+=b;b=getchar(); else state=
7、7; break; case 7: f=1;break; case 8: f=1;break; if(state=7 数字后接字母的出错控 else if(state=7 b=getchar(); prin tf(error line %dn ,li nenu m); else prin tf(error line %dn ,li nenu m); for(j=0;j=i;j+) dj=0; i=0; f=0; state=1; else if(b=)/* 识别、=和*/ di+=b; b=getchar(); if(b=|b=) di+=b; b=getchar(); prin tf(2,%
8、sn,d); for(j=0;j=i;j+) dj=0; i=0; else pri ntf(2,%sn,d); for(j=0;j)/*识别和=*/ di+=b; b=getchar(); if(b=) di+=b; b=getchar(); prin tf(2,%sn,d); for(j=0;j=i;j+) dj=0; i=0; else pri ntf(2,%sn,d); for(j=0;j=i;j+) dj=0; i=0; else if(b=:)/*识别:=*/ di+=b; b=getchar(); if(b=) di+=b; b=getchar(); prin tf(2,%sn,d); else prin tf(error line %dn,li nenu m); for(j=0;j=i;j+) dj=0; i=0; else if(b=*|b=+|b=-|b=7|b=)/*识别运算符 */ prin tf(2,%cn,b); b=getchar(); else if(b=(|b=)|b=,|b=;|b=.)/*识别分隔符 */ prin tf(5,%cn,b); b=getchar(); else prin tf(error line %dn ,li
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东广州市天河区东风实验小学招聘小学数学、音乐(舞蹈)教师笔试备考试题及答案解析
- 2026广东佛山市禅城区祖庙街道公有企业招聘1人笔试备考题库及答案解析
- 2026广西梧州市龙投人力资源有限公司招聘2人笔试备考题库及答案解析
- 2026云南省卫生健康委员会所属事业单位招聘301人笔试备考题库及答案解析
- 2026广东广州市花都区炭步供销合作社招聘合同制人员1人笔试备考试题及答案解析
- 2026年咸阳事业单位研究生招聘(78人)笔试备考试题及答案解析
- 2026福建厦门集美国合产业发展有限公司岗位招聘3人笔试备考试题及答案解析
- 2026年鹤岗市市本级公开招聘公益性岗位人员61人笔试备考题库及答案解析
- 2026北京中医药大学招聘(二)笔试备考试题及答案解析
- 2026内蒙古卫生职业技术学校招聘教师12人笔试备考题库及答案解析
- 2026年及未来5年市场数据中国金属铍行业市场竞争格局及发展趋势预测报告
- 2025-2030中国动物狂犬病疫苗行业发展现状及趋势前景分析研究报告
- 微生物菌剂培训课件
- 湖北省鄂东南教育联盟2025-2026学年高三上学期期中暨一模语文试卷及答案
- 第04讲 数与式综合提升卷(原卷版)-2025年中考数学一轮复习(全国版)
- 会议纪要标准化撰写模板
- 项目投资协议书范本合同
- 第二章拟投入施工机械设备
- 王庄矿5.0Mt-a新井设计 - 厚煤层回采巷道支护技术研究
- 心脏手术血糖管理
- 房地产企业总经理年度经营目标责任书模板
评论
0/150
提交评论