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

上传人:夏** 文档编号:470497082 上传时间:2023-09-08 格式:DOCX 页数:21 大小:75.53KB
返回 下载 相关 举报
编译原理-语法分析-规约_第1页
第1页 / 共21页
编译原理-语法分析-规约_第2页
第2页 / 共21页
编译原理-语法分析-规约_第3页
第3页 / 共21页
编译原理-语法分析-规约_第4页
第4页 / 共21页
编译原理-语法分析-规约_第5页
第5页 / 共21页
点击查看更多>>
资源描述

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

1、课程名称 编译原理 设计题目 语法分析规约 目 录一 .问题描述.(2)二文法及属性文法的描述.(2) 2.1文法描述.(2) 2.2 while-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测试方法.(9) 3.2测试结果.(9)四 设计心得.(10) 一、 问

2、题描述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 :终结符号集 P:产生式或规则的集合 Z:开始符号(识别符号) ZVN 其中:2.2 while-do循环语句的文法 文法G(s)如下

3、: S-WEDG (意思是while E do G) G-c=R R-dTe|d T-+|-|*|/ E-aFb F- |=|有一组产生式b:=f(c1,c2,,ck)的语义规则,其中f式函数,b和c1,c2,,ck式该产生式文法符号的属性。3语法分析方法及中间代码形式的描述; 3.1 语法分析方法: 本次设计采用LL(1)分析 :预测分析方法概述:分析钜阵的元素MA,a中的下标A为非终结符,a为终结符或句子的结束标记“#”,钜阵元素MA,a的内容为一条关于A的产生式。它表明当用非终结符A向下推而当输入符a时,所应该采用的后选式。当钜阵元素为空时,则表示用A往下推导时遇到了不应该出现的符号,即

4、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-aFb F-|=|)对F只有一种产生式而在输入串中的终结符a,b等在程序中用id代替了,正好做到了输入串和符号栈的匹配抵消,因此简化了预测分析表的构造,对于E来说有3个侯选式

5、,在本程序中通过函数firstset()来判断应该选哪个产生式,但是firstset()是依赖Token2数组来判断的,没有完全摆脱掉数组的限制,因此也是本程序的不足之处。3.2 中间代码的描述:中间代码概述:中间代码采用四元式输出,一个四元式是一个带有四个域的记录结构,这四个域分别称为oparg1arg2及result。域op包含一个代表运算符的内部码。语句while ab do a=a+b的四元式输出形式如下: 100 ( WEDG G-c=R R-dTe|d T - +|-|*|/|%E-aFb F- |=| */ 5.2 查错:按照递归下降法求WaWEDGn,total);total+

6、; W(); E();2) W()void W() if(ch!=W) printf(有非法字符%c请按回车返回!,ch); getchar(); getchar(); exit(1); 3) E()void E() ch=a+i1; if(ch!=a) printf(有非法字符%c %c请按回车返回!,ch); getchar(); getchar(); exit(1); printf(%dtE-aFbn,total);total+; F();4) F()void F() int i; ch=a+i1; i=i1+1; if(ai!=b) printf(有非法字符%c请按回车返回!,ai); getchar(); getchar();

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

当前位置:首页 > 机械/制造/汽车 > 汽车技术

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