您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 编译课程设计报告书wss
课程设计报告(2011--2012年度第1学期)名称:编译技术课程设计B题目:词法分析器设计算符优先分析程序设计基于算符优先分析方法的语法制导翻译程序设计院系:计算机系班级:网络工程0902学号:200909030221学生姓名:王沙沙指导教师:岳燕黄建才设计周数:1周成绩:日期:2012年1月6日1一、课程设计的目的与要求1.词法分析器设计的目的与要求1.1词法分析器设计的目的本实验是为网络工程的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。1.2词法分析器设计的要求设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。2.表1-1单词符号及其内部表示单词符号种别编码单词的属性值BEGINIFTHENELSEEND标识符整型常数+***()123456789101112—————在名字表中的地址十进制整数—————22.算符优先分析程序设计的目的与要求2.1算符优先分析程序设计的目的本实验是为网络工程的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术,设计、编写和调试算符优先分析程序,了解算符优先分析程序的组成结构,掌握实现通用算符优先分析算法的方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。2.2算符优先分析程序设计的要求算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。算符优先分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用,本题目给出文法的目的是为了便于对语法分析结果进行验证。(1)文法设算符优先文法G为:TTEE|FFTT|PFPF|iEP|)(说明:i为整型常数或者为标识符表示整型变量;使用中↑用**表示。(2)优先关系表设优先关系表如表1-2所示。表1-2优先关系表+*↑i()#+*↑i()#3.基于算符优先分析方法的语法制导翻译程序的设计的目的和要求3.1基于算符优先分析方法的语法制导翻译程序的设计的目的本实验是为网络工程的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序3设计的原理和技术,通过设计、编写和调试语法制导翻译程序,掌握从一种语句的语法和语义出发,构造相应的语义子程序,实现基于算符优先分析方法的语法制导翻译的方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。3.2基于算符优先分析方法的语法制导翻译程序的设计的要求算符优先分析方法是通过反复把输入符号移进分析栈,使用优先关系表在分析栈顶寻找最左素短语,将其归约为一个非终结符号而实现的。这个分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用(所以本题目无需给出文法)。基于算符优先分析方法的语法制导翻译是在算符优先语法分析的基础上进行翻译工作(即语义分析),每当将一个最左素短语归约为一个非终结符号时,就调用对应产生式的语义子程序,去完成相应的语义翻译工作,这步归约使用的产生式对非终结符号不加区分(即将所有的非终结符号用一个通用的非终结符号表示)。语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列(作为练习应显示输出)。二、课程设计正文1.词法分析器设计该词法分析器中关键字只有begin、if、then、else、end。所以在程序中分别设计函数来识别这几个关键字。这几个函数的返回值皆为bool型,例如识别begin的函数中,设计思想如下:begin共有五位,从前往后依次识别,如果每一位都识别正确的话,返回true,只要有一位识别不正确返回值为false。其他的几个函数设计同理。判断某一段字符是否为标识符或数字也设计一个函数,用x表示这段字符的开始,用y表示这段字符的结束位置,从x位到y位依次判别是否属于字符或者数字,如果是返回值为true,如果不是返回值为false。在主函数中输入要判别的字符串,以#结束,从第一位开始,当遇到+、*、**、(、)时停止,记下停止的为止,判断这段字符是否为关键字或者是否是标识符、数字,并输出判别的结果。其中应特别注意的是**的判别,如果是**的话,要往下继续行进一个字符,再开始继续往下判别。2.算符优先分析程序设计算符优先分析程序的设计思想如下:设计一个链表来表示输入的字符串,同时设计一个栈表示规约的过程,在一开始时,栈中只有终结符#,设计字符curcmp表示栈中要与链表中比较的终结符,curchar表示链表中要比较的终结符。通过函数change()把这两个字符转化为数字,并查找这两个终结符的优先关系,根据他们的优先关系判断是要4移进栈还是进行规约,如果要移进栈的话,只需进行把curchar进栈的操作,同时让curcmp变为刚刚移进的终结符;如果要进行规约的话,判断是否为终结符i,如果是把它规约为N,如果不是i,则为非终结符的规约,需要把栈中的前三个字符出栈,规约为N,依次往下直至把输入的字符串全部判别完。3.基于算符优先分析方法的语法制导翻译程序的设计该程序的设计是在第二个程序的基础之上进行改进的,在规约的时候输出规约的四元式,在终结符的规约过程中不需要输出,只有在非终结符的规约过程中才产生四元式。三、课程设计总结或结论1.词法分析器设计通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,使用某种高级语言(例如C++语言)直接编写此法分析程序。另外,也让我重新熟悉了C++语言的相关内容,加深了对C++语言的用途的理解2.算符优先分析程序设计通过实验实现了算符优先算法,能够对输入的符号串进行算符优先分析,并且能够处理分析过程中遇到的问题和错误,经过这次的实验,自己的编程能力得到了很好的锻炼,对以后的学习也有很大的帮助。3.基于算符优先分析方法的语法制导翻译程序的设计本次实验基本上达到了实验目的,通过实验,对原来在《编译技术》中学到的知识有了更深入的理解与体会,对语法制导翻译的分析翻译过程有了更深刻的认识,同时还提高了我的编程能力。总之,本次实验让我收获良多。还要感谢老师的指导。附录:程序代码及运行结果1.词法分析器设计源代码:#includeiostream#includestringusingnamespacestd;booljiancha_begin(inti,intj,chars[100]){if((j-i)==4){if(s[i]=='b'){i++;5if(s[i]=='e'){i++;if(s[i]=='g'){i++;if(s[i]='i'){i++;if(s[i]='n'){cout1,-endl;returntrue;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}booljiancha_if(inti,intj,chars[100]){if((j-i)==1){if(s[i]=='i'){i++;if(s[i]=='f'){cout2,-endl;returntrue;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}booljiancha_then(inti,intj,chars[100]){if((j-i)==3){if(s[i]=='t'){i++;if(s[i]=='h'){i++;if(s[i]=='e')6{i++;if(s[i]=='n'){cout3,-endl;returntrue;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}booljiancha_else(inti,intj,chars[100]){if((j-i)==3){if(s[i]=='e'){i++;if(s[i]=='l'){i++;if(s[i]=='s'){i++;if(s[i]=='e'){cout4,-endl;returntrue;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}booljiancha_end(inti,intj,chars[100]){if((j-i)==2){if(s[i]=='e'){i++;if(s[i]=='n'){i++;7if(s[i]=='d'){cout5,-endl;returntrue;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}elsereturnfalse;}charnumb[10]={'0','1','2','3','4','5','6','7','8','9'};charletter[53]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','_','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};chardigit[63]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','_','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'};boolIdentifier(intx,inty,chars[100]){inti,k,a=x,b=y,n=0,m=1,c=0,a1=x,b1=y,m1=0,n1=1;;intp[1024];for(i=0;i1024;i++)p[i]=0;while(xy+1){for(i=0;i53;i++){if(s[x]==letter[i]){p[n]=1;}}x++;n++;}for(intq=0;qn;q++){if(p[q]==1)k=1;8elsek=0;}if(k==1){}else
本文标题:编译课程设计报告书wss
链接地址:https://www.777doc.com/doc-4334374 .html