- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单元辅导(三)
单元辅导(三) 语法分析 概 述 语法分析程序(语法分析器)的功能是以词法分析器生成的单词符号序列作为输入,根据语言的语法规则(描述程序语言语法结构的上下文无关文法),识别出各种语法成份(如表达式、语句、程序段乃至整个程序等),并在分析过程中进行语法检查,检查所给单词符号序列是否是该语言的文法的一个句子。若是,则以该句子的某种形式的语法树作为输出;若不是,则表明有错误,并指出错误的性质的位置。语法分析的方法分为两大类:自顶向下的分析方法和自底向上的分析方法,或称自上而下的分析法和自下而上的分析法。自顶向下的分析方法是从文法的开始符号出发根据文法规则正向推导出给定句子的一种方法;或者说,从树根开始,往下构造语法树,直到建立每个树叶的分析方法。自下而上的分析法是从给定的输入串开始,根据文法规则逐步进行归约,直到归约到文法的开始符号;或者说,从语法树的末端开始,步步向上归约,直到根结点的分析方法。 自上而下语法分析法 非确定的自上而下分析法的思想:对任何输入串W试图用一切可能的办法,从文法的开始符号出发,自上而下地为它建立一棵语法树。举例说明见书P52:[例4.1] 文法的左递归性:(1)引进一个新的非终结符,把含左递归的规则改写成右递归。举例说明见书P54:[例4.2]、[例4.3];(2)采用扩充BNF表示法改写含直接左递归的规则。举例说明见书P54:[例4.4]、[例4.5] 回溯的消除:具体表现(1)相同左部的规则,其右部左端第一个符号相同而引起回溯;(2)相同左部的规则,其中某一右部能推出ε串,清除举例说明见书P56:[例4.6]、[例4.7]。 某些非LL(1)文法到LL(1)文法的改写:利用提取左因子的方法。举例说明见书P58:[例4.8] 递归下降分析法:是确定的自上而下分析法,这种分析法要求文法是LL(1)文法。它的基本思想是,对文法中的每一个非终结符编写一个函数(或子程序),每个函数(或子程序)的功能是识别由该非终结符所表示的语法成分。由于描述语言的文法常常是递归定义的,因此相应的这函数(或子程序)必然以相互递归的方式进行调用,所以将此种分析法称为递归下降分析法。举例说明见书P59:[例4.9] 预测分析法:也称为LL(1)分析法。这种分析法是确定的自上而下分析的另一种方法,采用这种方法进行语法分析要求描述语言的文法是LL(1)文法。 预测分析表的构造:方法见P61,举例说明见书P62:[例4.10] 自下而上分析法的一般原理 用一个寄存文法符号的先进后出栈,将输入符号一个一个地按从左到右扫描顺序移入栈中,边移入边分析,当栈顶符号串形成某条规则右部时就进行一次归约,即用该规则右部非终结符替换相应规则右部符号串,我们把栈顶被归约的这一串符号称为可归约串。重复这一过程直到整个输入串分析完毕。举例说明见书P63:[例4.11] 算符优先分析法 所谓算符优先分析法就是依照算术表达式的四则运算过程而设计的一种语法分析方法。这种分析方法首先要规定运算符之间(确切地说是终结符之间)的优先关系和结合性质,然后借助这种关系,比较相邻运算符的优先级来确定句型的可归约串并进行归约。 算符优先文法的定义:(1)算符文法的定义:设有文法G,若G中没有形如U→…VW…的规则,其中V和W为非终结符,则称G为算符文法,也称OG文法。也就是说,在算符文法中,任何一个规则右部都不存在两个非终结符相邻的情况,同定义可知,算符文法具有两个重要的性质:在算符文法中任何句型都不含两个相信的非终结符;若Ab或bA或bA出现在算符文法的句型β中,其中A∈VN,b∈VT,则β中任何含b的短语必含有A。(2)定义任意两个终结符号之间的优先关系:见P65。(3)算符优先文法的定义:若算术表达式的文法为E→E+T|T T→T*F|F F→(E)|id ,该算术表达式的文法是算符优先文法。 算符优先关系表的构造:对算符优先文法,根据优先关系的定义,可按P65方法直接构造优先关系表。举例说明见书P66:[例4.12] 算符优先分析算法的设计:(1)最左素短语:所谓句型的素短语是指这样一种短语,它至少包含一个终结符,并且除自身之外,不再包含其他的素短语。句型最左边的素短语称为最左素短语。(2)识别句型最左素短语的方法:见P67。(3)算符优先分析算法:见P68。 优先函数的构造:(1)优先函数f和g的定义,见P69。(2)优先函数的构造方法:输入:一张优先关系表。输出:关于优先关系表的优先函数。方法一:逐次加1法(Floyd方法);方法二:Bell有向图法。见P70。 算符优先分析法的局限性:由于算符优先分析法跳过了所有单非产生式(产生式的右部只含有单个非终结符)之间的归约,这样算符优先分析比规范归约要快得多,这既是优点也是缺点。由于忽略非终结符在归约
文档评论(0)