欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    实验3识别无符号数的词法分析器设计实现c汇总Word下载.docx

    • 资源ID:21635132       资源大小:182.88KB        全文页数:16页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实验3识别无符号数的词法分析器设计实现c汇总Word下载.docx

    1、2.设计要求选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。输入:由无符号数和+,*,/, ( , ) 构成的算术表达式,如1.5E+2100。输出:对识别出的每一单词均单行输出其类别码。单词符号类别码(CLASS)单词值(VALUE)无符号数1数字值+2-3*4/5(6)7 如1 (对应1.5E+2)3 (对应-)1 (对应100)3、程序源代码:4、运行结果:测试用例1:0.23E-12-E12结论:(1)案例中的程序只给出了A到BC及其后续通路的程序,没有给出A到D及其后续通路的程序。因此不能识别E12是一个无符号数。测试用例2:0.23E*12/a(0.

    2、23E-12) (2)案例中的程序只给出了若输入的字符串符合无符号数的DFA语法规则,将该无符号数识别出来,并没有给出当输入的字符串不符合无符号数的DFA语法规则时,如何处理。请将案例程序按下表规则补充完整。错误提示有两层含义,一个是输入字符不属于输入字母表,一个是输入字符正确但不合语法规则,这两种错误都应该予以检测并给出相应的处理。但案例程序只检测了第一种错误。七、无符号数的词法分析器设计的完善1. 设计要求,对案例程序的BUG进行完善:(1)案例中的程序只给出了A到BC及其后续通路的程序,没有给出A到D及其后续通路的程序,请将A到D及其后续通路的程序给出。(2)案例中只给出了若输入的字符串

    3、符合无符号数的DFA语法规则,将该无符号数识别出来,并没有给出当输入的字符串不符合无符号数的DFA语法规则时如何处理。注意:3个非终态都应该给出相应的判断。无值非法的字符串8该非法的字符串2. 词法分析程序(c+语言版,保持良好的缩进关系,主函数不能改,只能改AssortIdentify()、Output()函数等相应的函数):#includeusing namespace std;#define M 101 /最多可输入的字符数#define UNSIGNEDNUMBER 1 /无符号数#define PLUS 2 /加号#define SUBTRACT 3 /减号#define MULTI

    4、PLY 4 /乘号#define DIVIDE 5 /除号#define LEFTBRACKET 6 /左括号#define RIGHTBRACKET 7 /右括号#define ILLEGAL 8 /非法的字符串 class AccidenceAnalysis /定义词法分析器类 private: char testStrM,*p; /私有数据 public: AccidenceAnalysis(); /构造函数,功能一般是对类做初始化 void InputStr(); /输入函数 void Output(int a,char *p1,char *p2); /输出函数 int IsAccep

    5、tantCharacter(char *p); /判断输入字符是否属于字符集 int IsOperator(char *p); /判断字符是否是字符集+,-,*,/,(,)中的字符 int IsUnsignedNum(char *p); /判断字符是否是0-9的整数 void AbnormityExamine(char a); /异常检测函数 void IdentifyOperator(char *p);/识别字符集+,-,*,/,(,)中的字符 void AssortIdentify(); /对输入字符分类识别;AccidenceAnalysis:AccidenceAnalysis() in

    6、t i; for(i=0;iM;i+) testStri=0;/ 0是C+中字符串的结尾标志,存储在字符串的结尾。 p=&testStr0; /指针P指向字符数组首元素void AccidenceAnalysis:InputStr() coutt请按要求输入您要分析的语句,所输字符应在要求范围(不超过M)之内,并按回车键运行: char ch; int i=0; while(ch=cin.get()!=n) / cin.get()是保留回车在输入流队列中的.而cin是丢弃回车的. testStri=ch; i+; AbnormityExamine(testStr);AbnormityExami

    7、ne(char a) int j=0; char *ptr1,*ptr2; ptr1=a;/指向字符串数组a ptr2=a; while(*ptr2! j+; if(!IsAcceptantCharacter(ptr2) coutt您输入的第j个字符 *ptr2 不可以被此程序识别! 将被跳过.endl; ptr2+; continue; /结束本次循环,继续下次循环,并且进行条件判断; else *ptr1=*ptr2; ptr1+; while(ptr1=ptr2) *ptr1= ptr1+; Output(int a,char *p1,char *p2) if(a!=ILLEGAL) c

    8、outt类别码:a 单词值: while(p1=p2)*p1; p1+; else非法的字符串:int AccidenceAnalysis:IsOperator(char *p) char ch=*p; if(ch=+|ch=-*/() return 1; else return 0;IsUnsignedNum(char *p) if(0=ch&ch9IsAcceptantCharacter(char *p) if(IsOperator(p)|IsUnsignedNum(p)|ch=E. else return 0;IdentifyOperator(char *p) switch(ch) ca

    9、se Output(PLUS,p,p);break; Output(SUBTRACT,p,p); Output(MULTIPLY,p,p); Output(DIVIDE,p,p); Output(LEFTBRACKET,p,p); Output(RIGHTBRACKET,p,p); default: break;AssortIdentify() while(*p! /从DFA的初始状态出发进行分类识别 if(IsOperator(p)/情况1:从状态A出发,判断输入是否为符号,如果是,则不是无符号数,而是运算符,调用运算符识别函数IdentifyOperator(char *p)识别运算符。

    10、IdentifyOperator(p+); continue; else if(IsUnsignedNum(p)|*p=)/情况2:从状态A出发,判断输入是否为为数字或者 char *p1=p; /拼数,从指针p1到指针p之间的所有的字符串 if(IsUnsignedNum(p) /情况2.1:从状态A出发,如果输入为数字,到达状态B while(IsUnsignedNum(p) /情况2.1.1:B之后如果输入为数字,且后面都是数字,则到达终态B,可以判定为无符号数。 p+; if(*p= Output(UNSIGNEDNUMBER,p1,-p); continue; else if(*p=

    11、) /情况2.1.2:B之后如果输入E,到达状态D,需要进一步判断。 / char*p1=p; p+; if(*p1=|*p=) if(IsUnsignedNum(p)/情况2.1.2.1:D之后如果输入d、+、-,且后面一直都是输入d,则到达终态F,可以判断是无符号数。(因为s为+、-、 ) while(IsUnsignedNum(p) p+; Output(UNSIGNEDNUMBER,p1,-p); continue; else if(*p=|*p= else Output(ILLEGAL,p1,-p); /) /情况2.2.3:从状态B出发,如果输入为,到达状态C。 while(IsU

    12、nsignedNum(p) /情况2.2.3.1:从状态C出发,如果输入为d,到达状态E if(*p=) /情况2.2.3.1.1:如果遇到字符串结束标志,到达终态E,可以判断为无符号数) /情况2.2.3.1.2:从状态E出发,如果输入E,到达状态D,重复刚才状态D之后的判断。 (D之后如果输入d、+、-,且后面一直都是输入d,则到达终态F,可以判断是无符号数。(因为s为+、-、 ) / char*p1=p; if(IsUnsignedNum(p) while(IsUnsignedNum(p) p+; Output(UNSIGNEDNUMBER,p1,-p); continue; else

    13、if(*p= else Output(ILLEGAL,p1,-p); / if(*p=) /情况2.2:从状态A出发,如果输入为。,到达状态C p+; if(IsUnsignedNum(p) /情况2.2.1: C到E while(IsUnsignedNum(p) /情况2.2.1.1: C到E后到终态) /情况2.2.1.2: E到D if(IsUnsignedNum(p) /情况2.2.1.2: D到H D到F while(IsUnsignedNum(p) /情况2.2.1.2: F到H/ else if(*p=)/情况2.1.2: char*p1=p; if(*p1= else if(*

    14、p= else Output(ILLEGAL,p1,-p);/t单词分析完毕.int main() AccidenceAnalysis accidenceanalysis; accidenceanalysis.InputStr(); accidenceanalysis.AssortIdentify(); return 0;3. 测试数据及运行结果(可截图):截图上要有自己的姓名学号信息测试用例1运行截图:测试用例2运行截图:0.23E*12/a(0.23E-12) E*5 0.23E +*5 .*5 4.实验结果分析与心得体会教师评语:是否完成实验程序的预备设计? 是: 不是:程序能否正常运行? 是:有无测试数据及结果分析 是:是否在本次规定时间完成所有项目?实验成绩等级:教师签名:N0:时间:


    注意事项

    本文(实验3识别无符号数的词法分析器设计实现c汇总Word下载.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开