自上而下语法分析
- 格式:ppt
- 大小:256.09 KB
- 文档页数:56
第五章⾃上⽽下语法分析第五章⾃上⽽下语法分析1、教学⽬的及要求:本章介绍编译程序的第⼆个阶段语法分析的设计⽅法和实现原理,包括⾃上⽽下分析的⽆回朔的递归下降分析、 LL(1)分析法。
要求理解递归下降分析、LL(1)⽂法的基本概念;掌握⽆回朔的递归下降分析的设计和实现、LL(1)分析表的构造与分析⽅法。
◇能够对⼀个给定的⽂法判断是否是LL(1)⽂法;◇能构造预测分析表;◇能⽤预测分析⽅法判断给定的输⼊符号串是否是该⽂法的句⼦;◇能对某些⾮LL(1)⽂法做等价变换:①消除左递归②提取左公共因⼦可能会变成LL(1)⽂法。
这样可扩⼤⾃顶向下分析⽅法的应⽤。
2、教学内容:语法分析器的功能,⾃上⽽下语法分析(递归下降分析法,预测分析程序),LL(1)分析法,递归下降分析程序构造,预测分析程序。
3、教学重点:递归下降⼦程序,预测分析表构造,LL(1)⽂法。
4、教学难点:对⼀个⽂法如何判断是否是LL(1)⽂法,由于在判断 LL(1)⽂法时⽤到⽂法符号串的开始符号集合(FIRST集)和⾮终结符后跟符号集合(FOLLOW集)的计算,⽽⼀般学⽣往往因概念不清或不够细⼼对这两个集合的计算常常出错,导致判断和分析结果的错误。
5、课前思考为了了解⾃顶向下(⾃上⽽下)分析的⼀般过程和问题,请学⽣⾸先回顾本章之前介绍的有关基本概念:◇句⼦、句型和语⾔的定义是什么?◇什么叫最左推导?◇什么叫最右推导和规范推导?◇什么叫确定的⾃顶向下语法分析?◇⾃顶向下语法分析是从⽂法的开始符号出发,反复使⽤各种产⽣式,寻找与输⼊符号匹配的推导。
◇确定的⾃顶向下语法分析中⽤的是哪种推导?◇在确定的⾃顶向下语法分析过程中,当以同⼀个⾮终结符为左部的产⽣式有多个不同右部时,如何选择⽤哪个产⽣式的右部替换当前的⾮终结符?◇确定的⾃顶向下语法分析对⽂法有何限制?6、章节内容第⼀节概述第⼆节 LL(1)分析⽅法第三节递归下降分析法5.1 概述LL分析法确定的⾃上⽽下分析⾃上⽽下分析递归下降分析法语法分析不确定的⾃上⽽下分析——即带回溯的分析⽅法算符优先分析⾃下⽽上分析LR分析⼀、带回溯的⾃顶向下分析⽅法是⾃顶向下分析的⼀般⽅法,即对任⼀输⼊符号串,试图⽤⼀切可能的办法,从树根结点(识别符号)出发,根据⽂法⾃上⽽下地为输⼊串建⽴⼀棵语法树,或者说,从识别符号开始,根据⽂法为输⼊串建⽴⼀个推导序列,这种分析过程本质上是⼀种试探过程,是反复使⽤不同规则谋求匹配输⼊串的过程。
LL分析法和LR分析法。
1、自上而下语法分析方法(LL分析法)
给定文法G和源程序串r。
从G的开始符号S出发,通过反复使用产生式对句型中的非终结符进行替换(推导),逐步推导出r 。
是一种产生的方法,面向目标的方法。
分析的主旨为选择产生式的合适的侯选式进行推导,逐步使推导结果与r匹配。
2、自下而上语法分析方法(LR分析法)
从给定的输入串r开始,不断寻找子串与文法G中某个产生式P的候选式进行匹配,并用P的左部代替(归约)之,逐步归约到开始符号S。
是一种辨认的方法,基于目标的方法。
分析的主旨为寻找合适的子串与P的侯选式进行匹配,直到归约到G的S为止。
扩展资料
LALR分析器可以对上下无关文法进行语法分析。
LALR即“Look-AheadLR”。
其中,Look-Ahead为“向前看”,L代表对输入进行从左到右的检查,R代表反向构造出最右推导序列。
LALR分析器可以根据一种程序设计语言的正式语法的产生式而对一段文本程序输入进行语法分析,从而在语法层面上判断输入程序是否合法。
实际应用中的LALR分析器并不是由人手工写成的,而是由类似于yacc和GNU Bison之类的LALR语法分析器生成工具构成。
由机器自动生成的代码相比较于程序员手工的代码,拥有更好的运行效率而且减少了程序员的工作量。
自上而下语法分析自上而下语法分析一、实验目的:1、根据某一文法编制调试递归下降分析程序,对任意输入的符号串进行分析。
、根据某一文法编制调试递归下降分析程序,对任意输入的符号串进行分析。
2、根据某一文法编制调试LL LL((1)分析程序,对任意输入的符号串进行分析。
)分析程序,对任意输入的符号串进行分析。
3、本次实验的目的主要是加深对自上而下分析法的理解。
、本次实验的目的主要是加深对自上而下分析法的理解。
二、实验内容:(一)程序的功能描述(一)程序的功能描述LL LL((1)分析法的功能是利用LL LL((1)控制程序根据显示栈栈顶内容、向前看符号以及LL LL((1)分析表,对输入符号串自上而下的分析过程。
具体描述如下:)分析表,对输入符号串自上而下的分析过程。
具体描述如下: 对下列文法,对任意输入的符号串进行分析:对下列文法,对任意输入的符号串进行分析:(1)E->TG (2)G->+TG (3)G->ε(4)T->FS (5)S->*FS (6)S->ε (7)F->(E) (8)F->i输入一以输入一以##结束的符号串结束的符号串((包括包括++—*/*/()()()i#)i#)i#)::输出结果:包括分析栈、数组中的剩余字符串以及所用的产生式,形如:输出结果:包括分析栈、数组中的剩余字符串以及所用的产生式,形如:分析栈分析栈 剩余输入串剩余输入串 所用产生式所用产生式 E i+i*i# E->TG其中有如下两点要求:其中有如下两点要求: 1.1.表达式中允许使用运算符(表达式中允许使用运算符(表达式中允许使用运算符(+-*/+-*/+-*/))、分割符(括号)、字符I ,结束符,结束符##; 2.2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好)如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);(二)(二)LL LL LL((1)分析法实验设计思想及算法)分析法实验设计思想及算法三、程序设计的过程以及关键函数的功能 (一)模块结构:(一)模块结构:1、定义部分:定义常量、变量、数据结构。