您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 小型编译器(词法、语法分析)
-1-目录一.设计题目......................................................................................................................................2二.主要内容......................................................................................................................................2三.具体要求...................................................................................................................................2四.进度安排...................................................................................................................................2五.成绩评定...................................................................................................................................2六.设计思路...................................................................................................................................31.词法分析........................................................................................................................................3(1)关键字:.........................................................................................................................3(2)函数说明:.....................................................................................................................32.语法分析........................................................................................................................................3(1)首尾符集..............................................................................................................................4(2)算符优先表如下图所示....................................................................................................4(3).i*(i+i)的分析过程...........................................................................................................4七.源程序及运行结果...................................................................................................................5程序截图:.....................................................................................................................................14八.设计体会.................................................................................................................................17-2-一.设计题目小型程序设计语言编译器的设计与实现二.主要内容自定义一种简单的小型高机程序设计语言,采用任意一种编程语言和编程工具设计并实现其编译器,展示编译系统中词法分析和语法分析的全过程。三.具体要求1、对单词的构词规则有明确的定义;2、编写的词法分析程序能够正确识别源程序中的单词符号;3、识别出的单词以种别码,值的二元式形式保存在符号表中并输出;4、构造出程序设计语言各语法单位的SLR分析表;(其他分析表亦可)5、能够对输入的源程序做出正确的语法分析并输出清晰的结果;6、高级语言的规模不易过大,注重编译器内核的设计,对于界面无要求;7、课程设计报告中应对所自定义高级语言进行简单描述,对编译器的设计进行简单的需求分析,给出设计说明和程序结构框架,阐明设计思路、用到的原理和方法。8、不可更改课程设计报告中已有的字体和格式,课程设计报告中新加入内容,汉字采用宋体五号字,英文字符和数字采用TimesNewRoman五号字。9、课程设计报告中的运行结果应以程序运行截图形式出现。10、程序源代码以邮件名称:“班级学号姓名”发送至指定邮箱:sqckcsj08@126.com四.进度安排序号内容时间(天)1布置题目、查找资料12概要设计13详细设计34调试分析15测试结果0.56总结和完成设计报告1合计7.5五.成绩评定-3-1.考核方法:通过现场考勤、检查源程序和批改课程设计报告相结合的方式考察学生的动手能力,独立分析解决问题的能力和创新精神,并根据学生的学习态度综合考评。2.成绩评定:成绩分优、良、中、及格和不及格五等。六.设计思路1.词法分析(1)关键字:char,short,int,long,float,double,for,while,do,break,continue,switch,case,return,if,cout,cin,endl,return(2)函数说明:/*主函数*/intmain()//这个函数用来除去字符串中连续的空格和换行。第一个参数为目标字符串,第二个参数为开始位置。返回值为连续的空格和换行后的第一个有效字符在字符串的位置intClear_space(stringstr,intn)//获得一个单词,从位置i开始查找。并且有一个引用参数j,用来返回这个单词最后一个字符在原字符串的位置。stringGet_words(stringstr,intn,int&m)//判断i当前所指的字符是否为一个分界符,是的话返回真,反之假boolIs_boundary(stringstr,intn)//判断i当前所指的字符是否为一个运算符,是的话返回真,否则返回假boolIs_operation(stringstr,intn)//将文本的全部信息保存在全局字符数组buf[1000]中stringGet_text()//将分析结果输出voidOutput_text(vectorpairint,stringv)//判断否为关键字,是则返回真,否则返回假boolIs_key(stringstr)//对一个字符串数组进行词法分析,返回一个pairint,string型容器vectorpairint,stringword_analyse(vectorstringvec)2.语法分析优先函数语法分析自下而上语法分析的基本思想是:从输入串开始,利用文法的产生式步步向上归约,试图归约到文法的初始符号。如果从语法树的角度看,自下而上分析的过程是以输入串作为末端结点符号串,向着根结点的方向往上构造语法树,使开始符号正好是该语法树的根结点。算符优先分析器,对常见的算术表达式语句进行分析。实现以下功能:1)组织算术表达式的输入;2)组织算符优先关系表或者优先函数的输入;3)若输入的符号串是一个算术表达式语句,则输出一个分析过程(既每一步规约用到的最左素短语),最后归约成“#S#”的形式,则归约成功,打印分析过程,否则输出错误信息,提示该语句不满足语法,不能归约。。待分析的语法描述为:E-E+T|T置初值调用扫描子程序输入单词二元组输入串结束结束-4-T-T*F|FF-〉P↑F|PP-(E)|i基本实现方法是“移进-归约“法。即用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。如此继续,直到输入串的末端。最后如栈(顶)底为开始符号,则所分析的输入串为合法的符号串,报告成功;否则,是不符合语法的符号串,报告失败及出错信息。(1)首尾符集FIRSTVT(E)={+,*,↑,(,i}LASTVT(E)={+,*,↑,),i}FIRSTVT(E)={*,↑,(,i}LASTVT(E)={*,↑,),i}FIRSTVT(E)={,↑,(,i}LASTVT(E)={↑,),i}FIRSTVT(E)={(,i}LASTVT(E)={),i}(2)算符优先表如下图所示(3).i*(i+i)的分析过程11#i*(i+i)#-11i#*(i+i)#12N#*(i+i)#-11*N#(i+i)#-11(*N#i+i)#-11i(*N#+i)#12N(*N#+i#-11+N(*N#i)#-11i+N(*N#)#12N+N(*N#)#12N(*N#)#-11)N(*N##12N(*N##12N##-5-七.源程序及运行结果#includeiostream#includefstream#includestring#includevector#includeiostream#includemalloc.husingnamespacestd;structLchar{charchar_ch;structLchar*next;}LLchar,*p,*h,*temp,*top,*base;inttable[8][8]={{1,1,-1,-1,-1,1,-1,1},{1,1,-1,-1,-1,1,-1,1},{1,1,1,1,-1,1,-1,1},{1,1,1,1,-1,1,-1,1},{-1,-1,-1,-1,-1,-1,-1,0},{1,1,1,1,0,1,0,1},{1,1,1,1,0,1,0,1},{-1,-1,-1,-1,-1,0,-1,-1}};//存储算符优先关系表,大于为1,小于或等于为-1,其它为0表示出charcurchar;charcurcmp;intri;/*设置开关项,当出错时为0*/inti,j;intk;/*比较字符在栈的位置*/charbuf[1000];stringGet_text();boolIs_key(stringstr);intClear_space(stringstr,intn);stringGet_words(stringstr,intn,in
本文标题:小型编译器(词法、语法分析)
链接地址:https://www.777doc.com/doc-3753518 .html