文档详情

第六章 自下上分析和优先分析法.doc

发布:2018-10-14约7.91千字共13页下载文档
文本预览下载声明
第六章 自下而上分析和优先分析法 PAGE PAGE 13 PAGE 13 第六章 自下而上分析和优先分析法 1、教学目的及要求: 要求理解算符优先文法、最左素短语、有效项目的基本概念;掌握算符优先分析方法。 ◇ 对给定的文法能够判断该文法是否是算符文法 ◇ 对给定的算符文法能够判断该文法是否是算符优先文法 ◇ 对给定的算符文法能构造算符优先关系表,并能利用算符优先关系表判断该文法是否是算符优先文法。 ◇ 能应用算符优先分析算法对给定的输入串进行移进-归约分析,在分析的每一步能确定当前应移进还是归约,并能判断所给的输入串是否是该文法的句子。 ◇ 了解算符优先分析法的优缺点和实际应用中的局限性。 2、教学内容: 自下而上语法分析(算符优先分析法),算符优先分析。 3、教学重点: 归约,算符优先表构造。 4、教学难点: ◇ 通过本章学习后,学员应该能知道算符文法的形式。 ◇ 对一个给定的算符文法能构造算符优先关系分析表,并能判别所给文法是否为 算符优先文法。 ◇ 分清规范句型的句柄和最左素短语的区别,进而分清算符优先归约和规范归约的区别。 ◇ 算符优先分析的可归约串是句型的最左素短语,在分析过程中如何寻找可归约串是算符优先分析的关键问题。对一个给定的输入串能应用算符优先关系分析表给出分析(归约)步骤,并最终判断所给输入串是否为该文法的句子。 5、课前思考 ◇ 什么是自下而上语法分析的策略? ◇ 什么是移进-归约分析? ◇ 移进-归约过程和自顶向下最右推导有何关系? ◇ 自下而上语法分析成功的标志是什么? ◇ 什么是可归约串? ◇ 移进-归约过程的关键问题是什么? ◇ 如何确定可归约串? ◇ 如何决定什么时候移进,什么时候归约? ◇ 什么是算符文法?什么是算符优先文法? ◇ 算符优先分析是如何识别可归约串的? ◇ 算符优先分析法的优缺点和局限性有哪些? 6、章节内容 第一节 自下而上语法分析 第二节 算符优先分析法 6.1 自下而上语法分析 自底向上的语法分析是从给定的符号串本身出发,试图逐步将它归约为文法的开始符号,由于在进行自底向上的语法分析时,通常所采用的是最左归约,即规范归约,因此实现此种语法分析的关键,是在分析的每一步,如何寻找或确定当前句型的句柄以及确定将句柄归约为什么非终结符号。 一、自下而上语法分析方法的分类 根据寻找句柄策略的不同,形成不同的自底向上的分析方法,如优先分析法及LR分析法。 1、优先分析法 优先分析法是在文法的一些符号之间建立优先关系,并根据此优先关系来确定句型的句柄。 2、LR分析法 LR分析法则根据分析过程中迄今已经取得的信息,并向前查看若干个输入符号来确定当前应采取的分析动作。 二、自下而上分析法的实现思想 实现自底向上的分析,使用一个先进后出的分析栈存放分析过程中所得的文法符号; 开始状态:分析栈底放置一个界符#,然后将输入符号逐个推入栈内; 一旦在分析栈的栈顶出现句柄,就用相应产生式的左部去替换这个句柄,即进行一次归约,由于归约,得到新的栈顶,此时再查看栈的顶部是否形成新的句柄,若是,再进行归约;反之,则继续将后续的输入符号移入栈内; 分析成功:重复上述过程,若最终能将全部输入符号移掉,且分析栈中只留下栈底符号#及最后一步归约所得文法开始符号,则表明输入串的分析成功; 语法错误:若全部输入符号已被移掉,而分析栈不能出现上述格局,则表明输入符号串不是文法的句子,存在语法错误。 三、自下而上语法分析过程 例:有文法G[S]:S?AB|c,A ?bA|a,B ?aSb|c,用上述“移进—归约”分析方法对输入串bbaacb所作的分析过程: 移进归约分析过程可能采取的动作有四种:移进、归约、接受和报错。 因采用最左归约,故一旦句柄在分析栈形成,必然出现在栈顶。 当一个貌似句柄的符号串出现在栈顶时,不能贸然按某一产生式进行归约,否则将导致错误结果。如上例步骤7。 如何正确确定句型的句柄,如何正确地用产生式进行归约,是实现自底向上语法分析的关键。 6.2 算符优先分析法 一、概述 算符优先分析法是仿照算术式的四则运算过程的一种语法分析方法,该方法首先规定运算符之间的优先关系和结合性质,然后利用这种关系,用比较相邻运算符的优先顺序来确定句型的“句柄”和进行归约,这种归约未必是严格的最左归约,每一步未必是当前句型的句柄。 例:有文法G[E]: E ?E+E|E-E|E*E|E/E|(E)|i 该文法为二义性文法,其句子有不同的规范推导,归约过程中句柄不唯一,若采用运算符优先顺序和结合原则的规定,并按这种规定进行归约,则该句子的归约过程就是唯一的。 如i+i*i的归约过程: (1) i+i*i 按E ?i 归约 (2)E+i*i 按E ?i 归约 (3) E+E*i
显示全部
相似文档