第四章 语法分析——自上而下分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章语法分析——自上而下分析

【关键问题】

◇什么叫确定的自上而下语法分析?

◇自上而下语法分析是从文法的开始符号出发,反复使用各种产生式,寻找与输入符号匹配的推导。

◇在确定的自上而下语法分析过程中,当以同一个非终结符为左部的产生式有多个不同右部时,如何选择用哪个产生式的右部替换当前的非终结符?

◇确定的自上而下语法分析对文法有何限制?

【学习目标】

确定的自上而下分析方法虽对文法有一定的限制,但由于实现方法简单、直观,便于手工构造或自动生成语法分析器,因而仍是目前常用的方法之一。

◇能够对一个给定的文法判断是否是LL(1)文法;

◇能构造预测分析表;

◇能用预测分析方法判断给定的输入符号串是否是该文法的句子;

◇能对某些非LL(1)文法做等价变换:

①消除左递归;

②提取左公共因子

【学习指南】

确定的自上而下分析由于实现方法简单、直观、便于手工构造,因此,仍是目前常用的语法分析方法之一,尤其对小型编译器的实现较为适合。确定的自上而下分析要求文法是LL(1)的,所以,能否用确定的自上而下分析方法构造语法分析器,首先必须对所给文法进行判断。由此构造LL(1) 分析器的关键问题是对文法的LL(1)判别。判断LL(1)文法时用到文法符号串的开始符号集合(FIRST集)和非终结符的后跟符号集合(FOLLOW集)的计算。本章的学习要求大家对给定的文法能熟练、准确地计算出产生式右部符号串的开始符号集合和每个非终结符的后跟符号集合,只有这两个集合的元素计算准确无误,才能对LL(1)文法的判断得出正确结论,从而正确构造LL(1)分析表。对非LL(1)文法的等价变换特别要注意的是:消除了左递归、提取了左公共因子后不一定就能满足LL(1)文法的条件。

【难重点】

语法分析是编译程序的核心部分。语法分析的作用是识别由词法分析给出的单词符号序列是否是给定文法的正确句子(程序),目前语法分析常用的方法有自上而下分析和自下而上分析两大类。本章将主要介绍确定的自上而下分析思想和对文法的要求。确定的自上而下分析要求文法满足LL(1)文法。本章主要介绍内容为:

◇LL(1) 文法的定义和判别

◇非LL(1)文法的等价变换

◇确定的自上而下分析方法

◇预测分析方法

重点:

①LL(1)文法的定义和判别

②非LL(1)文法的等价变换

③预测分析方法

难点:

对一个文法如何判断是否是LL(1)文法。在判断LL(1)文法时用到文法符号串的开始符号集合(FIRST 集)和非终结符后跟符号集合(FOLLOW集)的计算,由于概念不清或不够细心常常导致对这两个集合的计算出错。

【知识结构】

4.1语法分析器的功能

语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。

语言的语法结构用上下文无关文法描述。

语法分析器的工作本质上就是按文法的产生式,识别输入符号串是否为一个句子,或者从概念上讲就是要建立一棵与输入串相匹配的语法分析树。

4.2自上而下分析的问题

自上而下就是从文法的开始符号出发,向下推导,推出句子。

自上而下的主旨是对任何输入串试图用一切可能的办法,从文法开始符号出发,自上而下地为输入串建立一棵语法树。或者说,为输入串寻找一个最左推导。这种分析过程是一种试探过程,是带“回溯”的。

实现这种自上而下的带回溯试探法的一个简单途径是让每个非终结符对应一个递归子程序。每个子程序作为一个布尔过程。

这种分析法存在的困难和缺点是:

1.文法的左递归

使用自上而下分析法必须消除文法的左递归。

2.回溯

回溯会使整个过程既麻烦又费时间,应设法消除回溯。

3.虚假匹配

4.3LL(1)分析法

为构造不带回溯的自上而下分析算法,首先要消除文法的左递归,并找出克服回溯的充要条件。

4.3.1左递归的消除

假定关于非终结符P的规则为:

P→Pα|β

其中β不以P开头。则可以改写为如下的非直接左递归形式:

P→βP′

P′→αP′|ε

相关文档
最新文档