语法分析-自上而下分析

更新时间:2023-09-29 10:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

编译原理 第四章 语法分析—自上而下分析

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

知识结构:

带回溯分析法 回溯

自上而下分析 面临的问题 左递归 问题的解决

语法分析- 求FIRST、FOLLOW集合的算法 自上而下分析 LL(1)分析法 证明LL(1)文法 构造LL(1)分析表

递归子程序的构造思想 递归子程序法 递归子程序的特点 递归子程序的设计

第一节 语法分析综述 一、语法分析的任务

按照语言即定的语法规则,对字符串形式的源程序进行语法检查,并识别出相应的语法成分。即语法结构是否符合语法规则。 二、语法分析器在编译程序中的地位(一遍扫描)

源程序 单词符号 分析树 语义分析 词法分析器 语法分析器 中间代码生成 取下一个单词 共28页第1页 13-4-17

符号表 编译原理 第四章 语法分析—自上而下分析

三、语法分析方法

通常把语法分析方法分为两大类,既自上而下分析与自下而上分析。

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+a G:S ? aA?a

A ? BaA?? B ? +? -?*?/

推导过程:

S?aA?aBaA?a*aA?a*aBaA?a*a+aA?a*a+a=W

共28页第2页 13-4-17

编译原理 第四章 语法分析—自上而下分析

构造语法树: S a A B a A * B a A + ? ⑵自上而下分析法

自上而下分析法又可分为确定和不确定的两种。 ①不确定的分析法(带回溯)

是一种穷举的试探方法,效率低、代价高,极少使用。 ②确定的分析法(不带回溯)

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

2、自下而上分析法 ⑴自下而上分析过程

分析过程是归约过程。从给定的输入串W开始,不断寻找与文法G中某个产生式P的侯选式(右部)进行匹配,并用P代替也称为归约。

⑵自下而上分析法 ①算符优先分析法

定义算符(广义讲是文法的终结符号)之间的某种优先和结合关系,借助这种关系来寻找并确定可归约字符串,并进行归约。

共28页第3页 13-4-17

编译原理 第四章 语法分析—自上而下分析

②LR分析法

是一类自左向右对输入串进行扫描的自下而上分析方法,分析过程是规范归约的序列。适用于语法分析器的自动构造。

第二节 自上而下分析面临的问题 一、不确定的自上而下分析方法

是从文法的开始S出发,试图用一切可能的方法向下推导,产生句子,这种分析过程的本质是一种试探推导过程。

例:文法G ⑴ S ? aAd

⑵ A ? ab?a

构造W=aad的最左推导:S?aAd?aad。 构造语法树:

①产生树的根结点,即文法的开始符号。 ②选用文法G的文法规则去延伸树。

③判断当前延伸的子结与输入串扫描到的字符是否匹配。 ④若不匹配注销掉当前延伸的子树,选用文法规则的另一个产生式延伸分析树。

⑤直到输入串与语法树末端结点相匹配,分析结束。 S S S a A d a A d a A d a b a

这种试探识别句子的过程,只会使分析的过程不确定。

共28页第4页 13-4-17

编译原理 第四章 语法分析—自上而下分析

二、不确定性的原因

由于分析过程中选择的侯选式不确定,造成输入串匹配的假象,甚至会导致算法实现的失败。

1、左递归问题

由于采用最左推导,左递归将使得输入串的分析过程陷入无限循环之中。

2、回溯问题

⑴采用试探的方法,如匹配不成功回溯到前面分析的某一步。 ⑵可能出现假匹配,造成对输入串识别的失败。 ⑶不能准确报告输入串的出错位臵。 三、确定的自上而下分析方法

1、确定的自上而下分析方法的必要条件 ⑴消除文法中的左递归; ⑵消除文法中的回溯问题。 2、消除文法的左递归

文法的左递归可以通过对文法产生式进行改写,使之不含有左递归的非终结符号。左递归一般有两种情况,直接左递归和间接左递归。

⑴直接左递归

如果文法中任意一个非终结符P,若P?P?(??VNUVT),并且在最左推导中有P?P?形式,称为直接左递归。

⑵间接左递归

共28页第5页 13-4-17

本文来源:https://www.bwwdw.com/article/1uid.html

Top