实验3__识别无符号数的词法分析器设计实现c++重点讲义.doc

实验3__识别无符号数的词法分析器设计实现c++重点讲义.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验3__识别无符号数的词法分析器设计实现c重点讲义

实验三 识别无符号数的词法分析器程序设计 一、实验目的与要求 通过编写并上机调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将源程序分解成各类单词的词法分析方法。 二、实验重难点 DFA无符号数的词法分析器编码实现 三、实验内容与要求 阅读实验案例,明确实验要求和程序实现方案; 参考实验案例,完善该无符号数的词法分析器设计程序。 四、实验学时 2课时 五、实验设备与环境 C语言编译环境 六、实验案例 无符号数的词法分析器原理 (1)正规式表示:Unsigned digital: d…d…d…dESd…d, it includes four regular expressions: dd* 如:5 56 567 d*.dd* 如:.5 5.6 5.67 d*ESdd* 如:E5 E+56 5E-67 d*.dd*ESdd* 如:.5E5 5.65E+56 5.4E-67 while VT={0, ···,9, ·,+,-,E} d =0|1| ···|9 S = +|-|ε (2)NFA表示: (3)经过NFA转DFA和DFA的化简后得到无符号数的DFA表示: 2.设计要求 选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。 输入:由无符号数和+,-,*,/, ( , ) 构成的算术表达式,如1.5E+2-100。 输出:对识别出的每一单词均单行输出其类别码。 单词符号 类别码(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到B\C及其后续通路的程序,没有给出A到D及其后续通路的程序。因此不能识别E12是一个无符号数。 测试用例2:0.23E*12/a(0.23E-12) 结论:(2)案例中的程序只给出了若输入的字符串符合无符号数的DFA语法规则,将该无符号数识别出来,并没有给出当输入的字符串不符合无符号数的DFA语法规则时,如何处理。请将案例程序按下表规则补充完整。 错误提示有两层含义,一个是输入字符不属于输入字母表,一个是输入字符正确但不合语法规则,这两种错误都应该予以检测并给出相应的处理。但案例程序只检测了第一种错误。 七、无符号数的词法分析器设计的完善 设计要求,对案例程序的BUG进行完善: (1)案例中的程序只给出了A到B\C及其后续通路的程序,没有给出A到D及其后续通路的程序,请将A到D及其后续通路的程序给出。 (2)案例中只给出了若输入的字符串符合无符号数的DFA语法规则,将该无符号数识别出来,并没有给出当输入的字符串不符合无符号数的DFA语法规则时如何处理。请将案例程序按下表规则补充完整。注意:3个非终态都应该给出相应的判断。 单词符号 类别码(CLASS) 单词值(VALUE) 无符号数 1 数字值 + 2 无值 - 3 无值 * 4 无值 / 5 无值 ( 6 无值 ) 7 无值 非法的字符串 8 该非法的字符串 词法分析程序(c++语言版,保持良好的缩进关系,主函数不能改,只能改AssortIdentify()、Output()函数等相应的函数): #includeiostream using namespace std; #define M 101 //最多可输入的字符数 #define UNSIGNEDNUMBER 1 //无符号数 #define PLUS 2 //加号 #define SUBTRACT 3 //减号 #define MULTIPLY 4 //乘号 #define DIVIDE 5 //除号 #define LEFTBRACKET 6 //左括号 #define RIGHTBRACKET 7 //右括号 #define ILLEGAL 8 //非法的字符串 class AccidenceAnalysis //定义词法分析器类 { private: char testStr[M],*p; //私有数据 public: AccidenceAnalysis(); //构造函数,功能一般是对类做初始化 voi

文档评论(0)

yulaoba + 关注
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档