编译原理-语法分析——规约

上传人:tia****nde 文档编号:36883425 上传时间:2018-04-03 格式:DOCX 页数:52 大小:77.16KB
返回 下载 相关 举报
编译原理-语法分析——规约_第1页
第1页 / 共52页
编译原理-语法分析——规约_第2页
第2页 / 共52页
编译原理-语法分析——规约_第3页
第3页 / 共52页
编译原理-语法分析——规约_第4页
第4页 / 共52页
编译原理-语法分析——规约_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《编译原理-语法分析——规约》由会员分享,可在线阅读,更多相关《编译原理-语法分析——规约(52页珍藏版)》请在金锄头文库上搜索。

1、课程名称 编译原理 设计题目语法分析 规约目目 录录一 .问题描述. .(2) 二文法及属性文法的描述. .(2)2.1 文法描述. .(2) 2.2while-do 循环语句的文法.(2) 2.3 属性文法描述.(2) 3 语法分析方法及中间代码形式的描述. .(3)3.1 语法分析方法. .(3)3.2 中间代码形式描述. .(3) 4 简要的分析与概要设计. .(4)4.1 词法分析. .(4) 4.2 递归下降翻译器的设计.(4) 4.3 语法制导翻译.(5) 5 详细的算法描述.(5)5.1 文法. .(6)5.2 查错. .(6) 三 测试方法和测试结果. .(9)3.1 测试方法

2、. .(9)3.2 测试结果. .(9) 四 设计心得. .(10)一、问题描述1.1 能够写出一个 while-do 语句,此语句符合 LL(1)的文法。1.2构造词法分析程序对 while-do 语句进行词法分析。 1.3 构造语法分析程序对 while-do 语句进行语法分析,判断语法正确性。1.4 运行程序,要求有正确的语义输出(4 地址码) 。 二、文文 法法 及及 属属 性性 文文 法法 的的 描描 述:述:2.1文法描述:基本概念:文法是对语言结构的定义与描述。即从形式上用于描述和规定语言构的称为“文法”。定定义义:文法 G=(VN,VT,P,Z)VN:非终结符号集VT:终结符号

3、集P:产生式或规则的集合Z:开始符号(识别符号)ZVN其中其中:2.2while-do循环语句的文法文法G(s)如下:SWEDG (意思是 while E do G)Gc=RRdTe|dT+|-|*|/EaFbF |=|有一组产生式b:=f(c1,c2,,ck)的语义规则,其中f式函数,b和c1,c2,,ck式该产生式文法符号的属性。3语法分析方法及中间代码形式的描述;3.1 语法分析方法:3.1.1 本次设计采用 LL(1)分析 :预预测分析方法概述:测分析方法概述:分析钜阵的元素 MA,a中的下标 A 为非终结符,a 为终结符或句子的结束标记“#” ,钜阵元素 MA,a的内容为一条关于 A

4、 的产生式。它表明当用非终结符 A 向下推而当输入符 a 时,所应该采用的后选式。当钜阵元素为空时,则表示用 A 往下推导时遇到了不应该出现的符号,即 A 与 a 不能匹配,因此应该出错处理。在构造预测分析表时,对每个终结符或“#”号用 a 表示,则若aSELECT(A-a)。令 MA,a= A-a(一般为了简化,取 MA,a= a)把所有的无定义的 MA,a标上 ERROR(一般在表中用空白表示)。3.1.2 此程序预测分析方法:此设计为非左递归 while-do 文法,应采用自上而下的预测分析方法。在此设计中,产生式只到 E-id1id2| id1=id2| id1 id1= id2(E-

5、aFb F-|=|WEDGGc=RRdTe|dT- +|-|*|/|%EaFbF |=|WEDGn“,total);total+;W();E(); 2) W() v oid W() if(ch!=W) printf(“有非法字符%c 请按回车返回!“,ch);getchar();getchar();exit(1); 3) E() v oid E() ch=a+i1;if(ch!=a) printf(“有非法字符%c %c 请按回车返回!“,ch);getchar();getchar();exit(1);printf(“%dtEaFbn“,total);total+;F(); 4) F() v

6、oid F() int i;ch=a+i1;i=i1+1;if(ai!=b) printf(“有非法字符%c 请按回车返回!“,ai);getchar();getchar();exit(1);switch(ch)case : printf(“%dtFn“,total);total+;break;case =: printf(“%dtF=n“,total);total+;break;default: printf(“%dtFc=Rn“,total);total+;R(); 7) R() v oid R() int i;i=i1+1;i1=i1+2;ch=ai1;if(ai!=getchar();

7、getchar();exit(1);elseif(ai1+1=+)|(ai1+1=-)|(ai1+1=*)|(ai1+1=/)printf(“%dtRdTen“,total);total+;T(); elseprintf(“%dtRdn“,total);total+;W();E(); 8) T() v oid T() ch=a+i1;switch(ch)case +:printf(“%dtT+n“,total);total+;break;case -:printf(“%dtT-n“,total);total+;break;case *:printf(“%dtT*n“,total);total+

8、;break;default:printf(“%dtT/n“,total);total+;break; ch=#; 三、测 试 方 法 和 测 试 结 果3.1测试方法在C+环境下,设计几个有代表的用例,进行测试,例如:输入语句W(while)aaFbf- dFbG-c=R),符合本程序定义的while-do语法规则,所以语法正确。语语义义输输出出:在识别非终结符号的时候将与其相对应的产生式输出(相应的语义动作),实现了语法制导翻译,最后将其以4地址的形式输出。3.2测试结果测试结果如下:四、 设 计 心 得本 次设计是采用递归下降的方法对输入的 while-do 循环语句进行语法,语义分 析

9、,并输出四元式。因此程序中充分体现了递归下降的思想。通过对语法分析 的实践操作,对它在实践中的应用有了更深刻的理解,通过上机实践,提高了 从错误中分析问题,解决问题的能力。在实践的基础上,把所学的知识得到了 实际应用,通过本次的编译原理课程设计,让我对用 C+编程的大致思路又进 行了一次回顾,设计一个可运行的程序代码的思路规范,声明变量,定义各大需要调用的函数及其调用。此程序只能实现对 WabDa=a+b#的分析与四元式输 出,由于我所设计的栈中只能一个字符一个字符的存放,因此只能用 D W 分别 表示 do while;而且我对语法制导翻译这一块很不熟悉,因此我始终不能用程 序实现语法制导翻译输出四元式,于是根据自己的理解,直接把四元式写了出 来。 本次课程设计巩固了我所学习的关于递归下降法这一方面的知识, 并且使我对 WHILEDO 循环语句也有了更深刻的理解,提高了我的动手能力。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号