【本章小结】 语法分析是编译程序的核心部分。语法分析的作用是识别由词法分析给出的单词符号序列是否是给定文法的正确句子(程序),目前语法分析常用的方法有自顶向下(自上而下)分析(见第5章)和自底向上(自下而上)分析两大类。而自底向上分析又可分为算符优先分析和LR分析(见第7章),它们的分析都是移进-归约过程,是自顶向下最右推导的逆过程,但LR分析是规范归约 ,算符优先分析不是规范归约。它们的区别在于识别可归约串的原则不同。LR分析是按规范句型的句柄为可归约串,算符优先分析是以句型的最左素短语为可归约串,这样算符优先分析去掉了单非终结符的归约(即一个非终结符到另一个非终结符的归约),因此,算符优先分析法比LR分析(规范归约)法的归约速度快。在LR分析一章的语法分析器自动生成工具Yacc中,对算数表达式的归约往往会用到算符优先关系的概念。 算符优先分析的缺点是对文法有一定的限制,在实际应用中往往只用于算数表达式的归约。由于算符优先分析不是规范归约,所以可能把不是文法的句子错误的归约成功。 算符优先分析是移进-归约过程,移进就是将一个终结符推进栈 ,归约就是将0个或多个符号(某个产生式的右部)从栈中弹出,将相应产生式左部的非终结符压入栈中。对一个输入符号串,不断地进行移进-归约过程,若能归约到文法的开始符号则为归约成功。在归约工作的每一步,都是从当前栈顶符号串中寻找一个子串,看它是否能归约到文法的某个非终结符号,该子串称为"可归约串"。因此, 如何识别"可归约串"是算符优先分析的关键问题。 本章学习的重点: 对一个给定的算符文法能构造算符优先关系分析表,并能判别所给文法是否为算符优先文法。对一个给定的输入串能应用算符优先关系分析表给出分析(归约)步骤,并最终判断所给输入串是否为该文法的句子。分清规范句型的句柄和最左素短语的区别,进而分清算符优先归约和规范归约的区别。 |