您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 编译原理while语句的翻译
武汉理工大学《编译原理》课程设计说明书学号:0121010340328课程设计题目WHILE循环语句的翻译程序设计(简单优先法、输出四元式)学院计算机科学与技术学院专业计算机科学与技术专业班级1003班姓名刘颖指导教师李玉强2013年1月11日武汉理工大学《编译原理》课程设计说明书1目录任务书..........................................................21.系统描述......................................................32.文法及属性文法的描述..........................................33.语法分析方法的描述及分析表设计................................33.1.语法分析方法的描述..........................................33.2.优先关系表..................................................44.1.中间代码形式的描述..........................................44.2.中间代码序列的结构设计......................................45.编译系统的概要设计............................................46.详细的算法描述(流程图或伪代码)..............................56.1.主函数伪代码................................................56.2.词法分析总控流程图..........................................56.3.语法分析....................................................57.源程序........................................................67.1.优先关系....................................................67.2.词法分析....................................................67.3.语法分析....................................................107.4.归约函数....................................................108.软件的测试方法和测试结果......................................118.1.输入........................................................118.2.词法分析结果................................................118.3.语法分析结果................................................129.研制报告......................................................1210.参考文献.....................................................1311.开发工具.....................................................13评分表..........................................................14武汉理工大学《编译原理》课程设计说明书2课程设计任务书学生姓名:刘颖专业班级:计算机1003班指导教师:李玉强工作单位:计算机科学与技术学院题目:WHILE循环语句的翻译程序设计(简单优先法、输出四元式)初始条件:理论:学完编译原理课程,掌握一种计算机高级语言的使用。实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。(2)完成题目要求的中间代码四元式的描述。(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:1系统描述(问题域描述);2文法及属性文法的描述;3语法分析方法描述及语法分析表设计;4按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5编译系统的概要设计;6详细的算法描述(流程图或伪代码);7软件的测试方法和测试结果;8研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9参考文献(按公开发表的规范书写)。时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试及测试。周5:撰写课程设计报告。设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。设计报告书收取时间:设计周的次周星期一上午10点。指导教师签名:2012年11月13日系主任(或责任教师)签名:2012年11月13日武汉理工大学《编译原理》课程设计说明书3一、系统描述(问题域描述)理解和分析C++中的while循环语句,应用在《编译原理》课程中学习的词法分析、语法分析、语义分析、中间代码生成及四元式等知识,用简单优先法分析while语句,并用四元式形式输出。词法分析的输入取自含有while循环语句的txt文件,结果存入另一txt文件并作为语法分析的输入。1.按给定的题目写出符合自身语法分析方法要求的文法和属性文法描述。2.按给定的题目给出语法分析方法的思想及分析表设计。3.按给定的题目给出中间代码序列的结构设计。4.完成相应的词法分析、语法分析和语义分析程序设计。5.编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。二、文法及属性文法的描述文法G=(VN,VT,P,S)VN={S,C,E,F,}VT={while,do,(,),{,},;,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,w,x,y,z,_,+,-,*,%,/,,,=,=,=,==,!=,.}P={S-whileCdoE=FC-(FF)|(FF)|(F==F)|(F=F)|(F=F)|(F)F-E|E+E|E*E|E-E|E/EE-character|numbercharacter-a|b|...|z|character(a|b|...|z)number-0|1...|9|number(0|1...|9)}三、语法分析方法的描述及分析表设计3.1语法分析方法的描述简单优先分析法是按照文法符号(终极符和非终极符)的优先关系确定句柄的。首先根据已知文法求出相应优先关系,并将文法的产生式保存,设置符号栈S,步骤如下:(1)将输入符号串a1a2…an#依次逐个存入符号栈S中,直到遇到栈顶符号ai的优先性下一个待输入符号aj为止。(2)栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符号ak,即找到ak-1ak为止。(3)由句柄ak...ai在文法的产生式中查找右部为ak…ai的产生式,若找到则用相应左部代替句柄,若找不到则为出错,这时可断定输入串不是该文法的句子。(4)重复上述(1)、(2)、(3)步骤直到规约完输入符号串,栈中只剩文法的开始符号武汉理工大学《编译原理》课程设计说明书4为止。若不能归约到文法开始符号则认为输入的while语句语法有误,进行报错。3.2优先关系表根据产生式确定优先关系,在程序中以二维数组存取,直接初始化即可。四、中间代码形式描述及中间代码序列的结构设计4.1中间代码形式的描述中间代码有两种形式:词法分析的二元组和语法分析过程中的四元式。二元组的两个元素是字符(串)的类型和它本身;四元式的四个组成成分是:算符,第一和第二运算对象及运算结果。运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。4.2中间代码序列的结构设计词法分析后对字符(串)的类型已判断完毕,依次输出,形式如下:1.关键字while2.数字103.界符;4.标识符i5.运算符语法分析之后,取出其中的运算表达式。对表达式进行分析。其中,先乘除后加减,先运算括号内的。如a=b*c+b*d的四元式表示如下:1.(*,b,c,t1)2.(*,b,d,t2)3.(+,t1,t2,t3)4.(=,t3,-,a)五、编译系统的概要设计1通过程序,在in.txt文本中输入while语句。对文本进行扫描,通过词法分析函数对输入的while语句进行词法分析,结果以二元式形式保存在out.txt中。2将已算好的优先关系矩阵以二维数组的形式放至程序中。对已进行词法分析的while语句进行语法分析,其中包括进栈函数和归约,当满足归约条件时由进栈函数调用规约函数,其中包含对错误语句的报错处理。将分析过程输出到yufafenxi.txt中3通过四元式输出函数将运算表达式表示为四元式的形式,输出到yufafenxi.txt中。武汉理工大学《编译原理》课程设计说明书5六、详细的算法描述(流程图)6.1.主函数伪代码voidmain(){Precedence();//调用优先关系函数求解Lexical();//调用词法分析程序Syntax();//调用语法分析程序}6.2.词法分析总控程序6.3.语法分析程序结束符“#”界限符开始到输入流中读下一字符CharChar是什么?初始化标识符和关键字词法分析子程序字母数字运算符无符号数词法分析子程序运算符词法分析子程序界限符词法分析子程序结束开始从out.txt中取单词,入栈单词优先级下一单词?YN归约,将对应的产生式左部入栈单词是否取完?N武汉理工大学《编译原理》课程设计说明书6七、源程序7.1.优先关系函数voidPrecedence(){inti,j;for(i=0;i=16;i++){for(j=0;j=16;j++){PreTable[i][j]=ER;PreTable[1][0]=LT;}}for(i=0;i=8;i++)PreTable[i][8]=PreTable[i][10]=PreTable[i][11]=PreTable[i][14]=LT;PreTable[1][8]=PreTable[1][11]=PreTable[1][14]=ER;PreTable[6][14]=PreTable[7][14]=PreTable[1][12]=PreTable[0][13]=EQ;PreTable[0][15]=LT;PreTable[2][15]=PreTable[3][15]=PreTable[4][15]=PreTable[5][15]=PreTable[8][15]=EQ;for(i=9;i=11;i++){for(j=1;j8;j++){PreTable[i][j]=GT;PreTable[9][5]=PreTable[11][5]=ER;PreTable[10][5]=PreTable[13][1]=EQ;PreTable[9][9]=PreTable[10][9]=PreTable[11][9]=GT;PreTable[9][16]=PreTable[10][16]=PreTable[11][16]=PreTable[12][16]=GT;PreTable[14][
本文标题:编译原理while语句的翻译
链接地址:https://www.777doc.com/doc-4455507 .html