第4章语法分析.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文档。上传文档
查看更多
第4章 语法分析 编译程序的功能和组织结构 § 4.1自顶向下分析 § 4.2自底向上分析 § 4.1 自顶向下分析 §4.1.1 自顶向下分析思想 §4.1.2 LL(1)文法 §4.1.3 递归下降分析法    4.1.1 自顶向下分析思想 1.自顶向下分析方法特点 2. 自顶向下分析存在的问题及解决方法 1) 左递归文法: 2) 回溯问题   文法G:S → cAd A → ab |a 识别输入串w=cad 4.1.2 LL(1)分析法 1、LL分析程序构造及分析过程 LL(1)分析方法   使用这种方法进行语法分析,可借助于一张分析表及一个语法分析栈,在一个总控程序控制下很方便地实现。   LL(1)分析器的逻辑结构和工作过程。   LL(1)分析器的构造方法。 LL(1)分析方法分析程序模型   预测分析表M可用一个矩阵(或二维数组)来表示,它概括了相应文法的全部信息。矩阵 的每一行与文法的一个非终结符号A相关联,而每一列则与文法的一个终结符号或#相关联。 LL(1)分析方法   第一步 分析开始时,首先将符号#及文法的开始符号S依次置于分析栈底部,并把各指示器调整至起始位置,即初始格局为:   第二步 设在分析的某一步,分析栈及余留的输入符号串处于如下的格局。    X1 X2…Xm-1 Xm为分析过程中所得的文法符号,此时,可视栈顶符号Xm的不同情况,分别做如下的动作: LL(1)分析方法   但若M[Xm,ai]=“ERROR”,则调用出错处理程序进行处理:   2、若Xm=ai≠#,则表明栈顶符号已与当前正扫视的输入符号得到匹配,此时应将Xm(即ai)从栈中退出,并将输入符号指示器向前推进一个位置:   3、若Xm=ai=#,则表明输入串已完全得到匹配,此时即可宣告分析成功而结束分析工作。 LL(1)文法及LL(1)语言的性质 任何LL(1)文法都是无二义性的: 若一文法中的非终结符含有左递归,则它必然是非LL(1)文法: 非LL(1)语言是存在的: 存在一种算法,它能判定任一文法是否为LL(1)文法: 不存在这样的算法,它能判定上下文无关语言能否由LL(1)文法产生。 LL(1)分析表构造方法   上述LL(1)分析算法对于不同的LL(1)文法都是相同的。也就是说,对不同的LL(1)分析器而言,它们的总控程序都是相同的,不同的仅仅是分析表。   总控程序十分简单,非常容易实现,所以我们只着重讨论构造分析表的问题。 LL(1)分析表构造算法   1、对文法G的每个产生式A→?执行第二步?和第三步:   2、对每个终结符a?FIRST(?)把A→?加至[A ,a]中,   3、若?? FIRST(?),则对任何 b?FOLLOW(A)把A→?加至?[A,b]中,   4、把所有无定义的?[A,a]标上“出错标志”。   G[E]: (1) E → TE (2) E′→ +TE′ (3) E′→ ? (4) T → FT′   (5) T′→ *FT′ (6) T′→ ? (7) F → (E) (8) F → i 步骤  分析栈 余留输入串 所用产生式 1    #E     i+i*i#    E→TE′ 2    #E′T    i+i*i#    T→FT′ 3    #E′T′F  i+i*i#    F→i 4    #E′T′I  i+i*i# 5    #E′T′   +i*i#     T′→ε 6    #E′    +i*i#     E′→+TE′ 7    #E′T+   +i*i# 8    #E′T    i*i#     T′→FT′ 9    #E′T′F  i*i#     F→i 10    #E′T′i  i*i# 步骤 分析栈 余留输入串 所用产生式 11  #E′T′   *i#   T′→*FT′ 12  #E′T′F* *i# 13  #E′T′F   i#     F→i 14  #E′T′i   i# 15  #E′T′   #      T′→ε 16  #E′     #      E′→ε 17  #      #     成功 LL(1)文法   一个文法G,若它的分析表M不含多重元素,则称它是一个LL(1)文法。一个LL(1)文法是无二义的,它所定义的语言恰好就是它的分析表M所能识别的全部句子。 LL(1)文法的

文档评论(0)

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

该用户很懒,什么也没介绍

版权声明书
用户编号:5101121231000003

1亿VIP精品文档

相关文档