第5章 语法分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 语法分析

5.1. 2.短语 设αβδ是文法G[S]的一个句型,如果有: S αAδ 且 A β 则称β是句型αβδ关于非终结符A的一个短语,或称β是αβδ的一个短语。特别是有A→β产生式时,β为句型αβδ的一个直接短语或简单短语。 短语的两个条件缺一不可。仅有A β未必意味着β就是句型αβδ的一个短语,还需要有S αAδ这一条件加以限制;也即短语属于该句型的组成部分,不能破坏这种句型结构的限制。 3.句柄 一个句型的最左直接短语称为该句型的句柄。注意,一个句型的直接短语可能不只一个,但最左直接短语则是惟一的。如对S αAδ αβδ来说,将句型αβδ中的句柄β用产生式的左部符号代替便得到新句型αAδ,这是一次规范归约,恰好与规范推导相反。 例如(T+i)*i+F是句型,其短语和句柄是? 可利用语法树确定短语。 “移进—归约”法: 把输入符号自左至右逐个移进分析栈, 1、栈顶的符号串形成某个句型的句柄时就进行一次归约,即用相应产生式的左部非终结符替换当前句柄。 2、若栈顶不是句柄则继续向栈中移进后续输入符号。 3、不断重复这一过程,直到将整个输入串处理完毕。若此时分析栈只剩有文法的开始符号则分析成功,即确认输入串是文法的一个句子;否则,即认为分析失败。 假设一文法G[S]为: G[S]: S→aAbB A→c∣Ac B→d 试对输入串accbd进行分析,检查该符号串是否是G[S]的一个句子。 将“#”作为输入串的界符(括号),并将输入串前的“#”放入分析栈,接着将输入串的符号依次进栈,具体分析过程如表3.6所示。 上述语法分析过程可以用一棵分析树来表示。在自下而上分析过程中,每一步归约都可以画出一棵子树来,随着归约的完成,这些子树被连成一棵完整的分析树。根据表3.6构造分析树的过程如图3–15所示。 5.2 算符优先分析法 算符优先分析法特别适合于分析程序语言中的各类表达式,并且宜于手工实现。 所谓算符优先分析,就是依照算术表达式的四则运算过程来进行语法分析,预先规定运算符(确切地说是终结符)之间的优先关系和结合性质,然后借助于这种关系来比较相邻运算符的优先级,以确定句型的“可归约串”来进行归约。因此,算符优先分析法不是一种规范归约,在整个归约过程中起决定性作用的是相继两个终结符的优先关系。 1.算符优先文法 (1)定义一个任何产生式的右部都不含两个相继(并列)的非终结符的文法为算符文法,即算符优先文法首先应是一个算符文法; (2)定义任何两个可能相继出现的终结符a与b?(它们之间最多插有一个非终结符)的优先关系。 假定G[S]是一个不含ε产生式的算符文法,对于任何一对终结符a、b,有: (1) a b,当且仅当文法G[S]中含有形如P→…ab…或P→…aQb…的产生式; (2) a?b,当且仅当G[S]中含有形如P→…aR…的产生式,而R b…或R Q b…; (3) ?a?b,当且仅当G[S]中含有形如P→…Rb…的产生式,而R …a或R …… aQ。 如果一个算符文法G中的任何终结符对(a,b)至多满足下述三种关系之一(相同、低于、高于): a b,a?b,a?b 则称G[S]是一个算符优先文法。 优先关系无对称性 例 试说明下述算术表达式文法G[E]是一个算符文法,但不是算符优先文法。 G[E]: E→E+E∣E*E∣(E)∣i [解答] 由于文法G[E]中的任何产生式右部都不含两个相邻的非终结符,所以G[E]是算符文法。此外,因为 运算符+和*之间同时存在着两种不同的优先关系,故文法G[E]不是一个算符优先文法。 2.算符优先关系表的构造 为了找出所有满足关系“?”和“?”的终结符对,我们首先需要对G[S]的每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P): FIRSTVT(P)={a∣P? a…或P Qa…, a∈VT而Q∈VN} LASTVT(P)={a∣P? ….a或P …….aQ, a∈VT而Q∈VN}

文档评论(0)

xiaolan118 + 关注
实名认证
文档贡献者

你好,我好,大家好!

版权声明书
用户编号:7140162041000002

1亿VIP精品文档

相关文档