第四章 语法分析——自上而下分析
- 格式:doc
- 大小:35.50 KB
- 文档页数:2
第四章语法分析—自上而下分析知识结构:带回溯分析法回溯自上而下分析面临的问题左递归问题的解决语法分析-求FIRST、FOLLOW集合的算法自上而下分析 LL(1)分析法证明LL(1)文法构造LL(1)分析表递归子程序的构造思想递归子程序法递归子程序的特点递归子程序的设计第一节语法分析综述一、语法分析的任务按照语言即定的语法规则,对字符串形式的源程序进行语法检查,并识别出相应的语法成分。
即语法结构是否符合语法规则。
二、语法分析器在编译程序中的地位(一遍扫描)三、语法分析方法通常把语法分析方法分为两大类,既自上而下分析与自下而上分析。
1、自上而下分析方法实际上是一种产生的方法,分析过程是一个推导过程。
⑴自上而下分析过程从文法G的开始符号S出发,通过反复使用产生式,逐步推导出与输入的符号串完全相匹配的句子。
采用最左推导,以文法开始符号为根结点,逐步为输入串自上而下地构造一棵语法树。
面临的输入符号为a,A所有的产生式:A→α1|α2|⋯|αn①若a∈FISRT(αi),则指派去执行匹配任务。
②若a不属于任何一个候选首字符集,则:a、若ε属于某个FISRT(αi)且a∈FOLLOW(A),则让A与ε自动匹配;b、否则,a的出现是一种错误。
例:设有文法G和输入符号串W:a*a+aG:S → aA∣aA → BaA∣εB → +∣ -∣*∣/推导过程:S⇒aA⇒aBaA⇒a*aA⇒a*aBaA⇒a*a+aA⇒a*a+a=W构造语法树:Sa AB a A* B a A⑵自上而下分析法自上而下分析法又可分为确定和不确定的两种。
①不确定的分析法(带回溯)是一种穷举的试探方法,效率低、代价高,极少使用。
②确定的分析法(不带回溯)实现方法简单、直观,便于手工构造或自动生成语法分析器,是目前常用的方法之一。
但是对文法有一定的限制。
2、自下而上分析法⑴自下而上分析过程分析过程是归约过程。
从给定的输入串W开始,不断寻找与文法G中某个产生式P的侯选式(右部)进行匹配,并用P代替也称为归约。
第四章语法分析——自上而下分析
【关键问题】
◇什么叫确定的自上而下语法分析?
◇自上而下语法分析是从文法的开始符号出发,反复使用各种产生式,寻找与输入符号匹配的推导。
◇在确定的自上而下语法分析过程中,当以同一个非终结符为左部的产生式有多个不同右部时,如何选择用哪个产生式的右部替换当前的非终结符?
◇确定的自上而下语法分析对文法有何限制?
【学习目标】
确定的自上而下分析方法虽对文法有一定的限制,但由于实现方法简单、直观,便于手工构造或自动生成语法分析器,因而仍是目前常用的方法之一。
◇能够对一个给定的文法判断是否是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′|ε。