编译原理实用教程 杨德芳 第4章 自顶向下的语法分析技术

编译原理实用教程 杨德芳 第4章 自顶向下的语法分析技术

ID:40336241

大小:811.50 KB

页数:109页

时间:2019-07-31

编译原理实用教程 杨德芳 第4章 自顶向下的语法分析技术_第1页
编译原理实用教程 杨德芳 第4章 自顶向下的语法分析技术_第2页
编译原理实用教程 杨德芳 第4章 自顶向下的语法分析技术_第3页
编译原理实用教程 杨德芳 第4章 自顶向下的语法分析技术_第4页
编译原理实用教程 杨德芳 第4章 自顶向下的语法分析技术_第5页
资源描述:

《编译原理实用教程 杨德芳 第4章 自顶向下的语法分析技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第4章自顶向下的语法分析技术本章学习目标语法分析是继词法分析之后,编译过程的第二个阶段。它的主要任务是对词法分析的输出结果—单词序列进行分析,识别出合适的语法单位。语法分析分为自顶向下和自底向上的两类方法。自顶向下的语法分析又分为确定的自顶向下分析(无回溯)和不确定的(带回溯的)的自顶向下语法分析两种。本章主要内容有:。自顶向下的语法分析的基本思想。LL(1)语法分析方法。确定的自顶向下分析技术,包括递归子程序法和预测分析技术4.1确定的自顶向下分析方法自顶向下分析就是从文法的开始符号出发并寻找出这样一个推导序列:推导出的句子恰好是输入符号串;或者说,能否从根结点出发向下

2、生长出一棵语法树,其叶结点组成的句子恰好为输入符号串。显然,语法树的每一步生长(每一步推导)都以能否与输入符号串匹配为准。如果最终句子得到识别,则证明输入符号串为该文法的一个句子;否则,输入符号串不是该文法的句子。自顶向下分析分为确定的自顶向下分析和不确定的自顶向下分析法两种。具体分析方法归纳如下:(1)自顶向下建树,试图生成一个和所给符号串(输入符号串)相一致的终结符号串。(2)在建树过程中,按照一定的规律选择生成规则,展开为向下生长的树。每一步都试图将生成的尚未消除的最左叶片与输入符号匹配。(3)匹配失败后,必须退回到出错点,选择其他可能的规则,直到生长出与读入符号串

3、完全一致的树型结构,这种方法称为回溯。(4)如果按上述方法构造成功,说明读入的符号串是文法的一个句子;反之,如果穷尽所有的途径都没有办法成功,则说明读入的符号串不是文法的一个句子。4.1.1确定的自顶向下分析思想确定的自顶向下分析方法,首先要解决从文法的开始符号出发,如何根据当前的输入符号(单词符号)惟一地确定选用哪个产生式替换非终结符往下推导,或者构造一棵相应的语法树。例题4.1设有文法G[S]:SpA

4、qBAcAd

5、aBdB

6、b若输入串W=pccadd。自顶向下的推导过程为:SpApcAdpccAddpccadd确定的自顶向下分析的语法树如图4-1所示。

7、S(c)(a)(b)(d)SpASpAcAdSpAcAdcAdpAcAdcAda例4.2设有文法G[S]为:SAp

8、BqAa

9、cABb

10、dB当输入串W=ccap时,那么试图推出输入串的推导过程为:SApcApccApccap,构造出确定的自顶向下分析的语法树如图4-2所示。该文法的产生式的右部不全是终结符开始,也有非终结符A和B。在推导过程中选用哪个产生式就不直观。比如在第一步推导中,是选择以A开始还是以B开始的产生式,我们必须向下再找一步,看看A和B的产生式哪个是有c开始。先看A,A的产生式规则是有a和c开始,而B的产生式规则是有b和d开始,很显然是用以A

11、开始的产生式规则。所以就产生了推导:SAp,此时,A有两个产生式规则,很容易判断出用哪个。通过此例子,能看出在语法推导过程中,有一点很重要,那就是文法中产生式规则的开始符号。下面就产生式规则的首符号集进行定义。定义4.1设G=(VN,VT,S,P)是上下文无关文法FIRST()={a

12、a,aVT,,V*}如果,则规定FIRST(),,FIRST()为的开始符号集或首符号集。定义4.1设G=(VN,VT,S,P)是上下文无关文法FIRST()={a

13、a,aVT,,V*}如果,则规定FIRST(),,FIRST(

14、)为的开始符号集或首符号集。例如,FIRST(Ap)={a,c}FIRST(Bq)={b,d}这样,在推导时,只要这两个产生式右部的首符号集没有交集,就可以惟一的选择产生式的规则。例4.3若有文法G[S]:SaA

15、dAbAS

16、若输入串W=abd,则试图推导出abd串的推导过程为:SaAabASabSabd该输入串确定的语法树如下图4-3所示。SaASaAbASSaAbASAbAd定义4.2设G=(VT,VN,S,P)是上下文无关文法,AVN,S是开始符号FOLLOW(A)={a

17、SA,且aVT,aFIRST(),VT*,V+}若S

18、=>A,且=>*,且#FOLLOW(A)。也可以定义为FOLLOW(A)={a

19、S…Aa…,aVT}若有S=>…A,则规定#FOLLOW(A)一般来讲,我们用“#”作为输入串的结束符,或称为句子的括号,如#输入串#。4.1.2LL(1)文法的定义根据上面的分析我们重新定义一个产生式被选择时的集合SELECT如下。定义4.3给定上下文无关文法的产生式A,AVN,V*,若不能推出,则SELECT(A)=FIRST()如果能够推导出,则SELECT(A)=(FIRST()﹣{})∪FO

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。