编译原理语法分析ppt课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《编译原理语法分析ppt课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 语法分析 ppt 课件
- 资源描述:
-
1、 语法分析是编译过程的核心部分。 语法分析的基本任务是在词法分析识别出单词符号串的基础上,分析判断程序的语法结构是否符合语法规则。 语言的语法结构用上下文无关文法来描述,因此,语法分析器的任务本质上是按上下文无关文法的产生式,确定整个单词串是否构成语法上正确的程序。 语法分析的方法通常分为两类: 自上而下分析法和自下而上分析法3.1 文法和语言 3.2 推导与语法树 3.3 自上而下分析方法 3.4 自下而上分析方法 3.5 LR分析法 3.1 文法和语言文法和语言 文法文法是程序语言的生成系统。 自动机自动机是程序语言的识别系统。 用文法可精确定义一个语言,并依据文法构造出识别该语言的自动机
2、。因此,文法对程序语言和编译程序的构造具有重要意义,如程序语言的词法可用正规文正规文法法描述,语法可用上下文无关文法上下文无关文法描述,而语义可借助于上下文有关文法上下文有关文法描述。3.1.1 文法和语言的概念 1语言语言 通常用表示字母表。 由字母表中字符组成的有穷序列称为上的字符串字符串或字字。字母表上的所有字符串(包括空串)组成的集合用*表示。 对于字母表, *上的任一子集子集称为上的一个语言语言, 记为L, L*。语言L的每个字符串称为语言L的一个语句语句或句子句子。2. 文法文法 终结符终结符是语言不可再分的基本符号,通常为一个语言的字母表。终结符代表了语法的最小元素,是一种个体记
3、号。 非终结符非终结符也称语法变量, 它代表语法实体或语法范畴。一个非终结符是一个类、一个集合。 例如, 变量、常量、+、* 等为终结符终结符,而 “算术表达式”为非终结符非终结符, 它代表一定算术式组成的类类,如i*(i+i)、i+i+i等,即非非终结符终结符代表由终结符组成且满足一定规则的符号串的集合集合。 文法文法可表示为四元组G=(VT,VN,S,), 其中 (1) VT为非空终结符集终结符集; (2) VN为非空非终结符集非终结符集,且VTVN=; (3) S为文法开始符文法开始符, SVN; (4)是产生式的非空有限集产生式的非空有限集, 其中每个 产生式(规则)记作 或 := 左
4、部(VTVN)+至少含一非终结符, 右部(VTVN)*。 产生式 (也称产生式规则或规则) 是定义语法实体的一种书写规则。一个语法实体的相关规则可能不止一个, 如: P1, P2 , Pn 相同左部的产生式可合并为一个: P 1| 2| n 其中, i(i=1,2,n)称为P的候选式候选式。例例3.1 试构造产生试构造产生标识符标识符的文法的文法。分析: 用L表示字母,D表示数字,T表示字母或数字, 则 La b z D0 1 9 TL D 用S表示字母数字串字母数字串,则ST是字母数字串,即 ST | ST 标识符I或为单个字母, 或为一字母后 跟字母数字串, 即 IL LS解: 产生标识符
5、的文法产生标识符的文法GI为: G=(a,b,z,0,9,I,S,T,L,D,I,) 其中,: IL LS ST ST TL D La b z D0 1 9例例3.2 写一文法, 使其语言是奇数集, 但不允 许出现以0打头的奇数。解: 将奇数划分为三个部分: 最高位最高位允许出现19,用非终结符B表示; 中间部分中间部分可出现任意多位数字09, 每一位用非终结符D表示; 最低位最低位只出现1,3,5,7,9, 用A表示。 由于中间部分可任意位,故需另引入一 非终结符M,它包括最高位和中间部分。MB最高位中间位DDDA最低位解: 奇数集文法GN为: G=(0,1,9,N,A,M,B,D,N,)
6、: NA | MA MB | MD A1 | 3 | 5 | 7 | 9 B1|2|3|4|5|6|7|8|9 D0 | B3. 文法产生的语言文法产生的语言 设G=(VT,VN,S,)且, (VTVN)*, 若存在产生式A, (VTVN)*, 则称A可直接推出可直接推出, 记为 A 注意与的不同: 是产生式中的定义记号, 表示直接推导,是对文法符号串A 中A用产生式A的右部替换。关于推导的两点说明关于推导的两点说明:(1)若1可直接推出2, 2可直接推出3, 即存在一个自1至n的推导序列: 12 3 n (n0) 则称1可推导出可推导出n,记为1 n, 表示从1出发经1步或若干步可推导出n(
7、2)若记1 1, 则1 n表示从1出发,经过 0步或若干步可推导出n, 即1 n意味着或1=n, 或1 n。+0*+例如,考虑算术表达式文法GE: EE+E E*E (E)i 非终结符E代表一类算术表达式, 从E出发可进行一系列推导, 表达式 i+i*i 的推导如下: E E+E E+E*E E+E*i E+i*i i+i*I注意: 在每一步推 导中,只能对其中一个 非终结符用其对应的产生式右部的 一个候选式来替换。假定GS是一个文法, S是其开始符号,若S , (VTVN)*,则称是文法GS的一个句型句型 ;若S , VT*,则称是文法GS的一个句子句子。由上述定义知: 仅含终结符的句型是一
8、个句子。 开始符S是一个句型而不是一个句子。 i+i*i是一个句子, 也是一个句型, E+E*E、E+E*i和E+i*i是句型, 但不是一个句子。* 对于文法GS, 它所产生的句子的全句子的全体体称为由文法GS产生的语言语言,记为LG。 L(G)= | S 且VT*3.1.2 形式语言分类形式语言分类 Chomsky于1956年定义了四类文法及相应的四类形式语言形式语言, 它对程序语言的设计、编译方法、计算复杂性等方面都产生了重大影响。+1 0型文法与型文法与0型语言型语言 (短语文法) 若文法G的每个产生式具有下列形式: 其中至少含一个非终结符, 则称文法G为0型文法型文法或或短语文法短语文
9、法, 记为PSG。 0型文法相应的语言称为0型语言型语言, 它的识别系统是图灵机。21型文法与型文法与1型语言型语言 (对应自然语言) 若文法G的每个产生式均满足 | | 则称文法G为1型文法型文法或上下文有关文上下文有关文 法法, 记为CSG。 1型文法相应的语言称为1型语言型语言。 1型文法的另一种定义型文法的另一种定义: 文法G的每个产生式具有下列形式: A 其中, ,V*, AVN, V+ 它更明确地表达了上下文有关的特性。3 2型文法与型文法与2型语言型语言 (对应程序设计语言) 若文法G的每个产生式具有下列形式: A 其中, AVN, V* 称文法G为2型文法型文法或上下文无关文法
10、上下文无关文法, 记为CFG。 2型文法相应的语言称为2型语言型语言或 上下文无关语言。 它的识别系统是下推自动机。4 3型文法与型文法与3型语言型语言 (对应有限自动机) 若文法G的每个产生式具有下列形式: Aa 或 AaB 其中,A,BVN,aVT*, 则文法G称为3型文法型文法或正规文法正规文法或右线 性文法,记为RG。 3型文法相应语言为3型语言型语言或正规语言。 它的识别系统是有限自动机。 3型文法还可呈左线性形式: Aa 或 ABa5. 四类文法的关系与区别四类文法的关系与区别 从0型文法到3型文法逐步增加限制。 一般地,13型文法属于0型文法,2,3型文法属于1型文法,3型文法属
11、于2型文法。四类文法的区别四类文法的区别:(1)1型文法不允许有形如A的产生式, 2,3型文法允许形如A的产生式;(2)0,1型文法的产生式左部左部可以是含终结 符的符号串或两个以上的非终结符, 2,3型文法的产生式左部只允许是单个单个 非终结符非终结符。 anbncn|n1anbncm|m,n1 ambnck|m,n,k1 这说明对文法规则定义形式的限制虽加强了, 但相应的语言反而更大了。因此,不能主观认定文法限制越大则语言越小, 即下述结论不成立不成立: 3型语言 2型语言 1型语言 0型语言 编译方法中通常用3型文法型文法描述词法词法,用FA识别单词; 利用2型文法型文法描述语法语法,用
12、下推自动机PDA识别各种语法成分。例例3.4 给出=a,b上具有奇数个具有奇数个a和奇数和奇数 个个b的所有字符串集合的正规文法正规文法。解: 如图, 由S出发经奇数个a到达A, 或经奇数个b到达B。再由A出发经奇数个b到达C; 同样, 由B出发经奇数个a到达C。正规文法GS如下: SaA | bB AaS | bC BbS | aC CbA | aB| bbbbaaaaSAB2 C3.1.3 正规式与上下文无关文法正规式与上下文无关文法1. 正规式到上下文无关文法的转换正规式到上下文无关文法的转换 由正规式构造由正规式构造CFG的一种方法的一种方法: (1)构造正规式的NFA; (2)若0为
13、初始状态, 则A0为开始符; (3)若存在映射关系f(i,a)=j, 则定义产生式Ai aAj; (4)若存在映射关系f(i,)=j, 则定义产生式Ai Aj; (5) 若i为终态终态, 则定义产生式Ai 。例例3.5 用CFG描述正规式(a|b)*abb解: 先构造识别(a|b)*abb的NFA M:0122 3ababbGA0: A0aA0 bA0 aA1 A1bA2 A2bA3 A3由正规式构造由正规式构造CFG的另一种方法的另一种方法: 通过分析正规式凭经验凭经验直接构造。例如, 把(a|b)*abb看作(a|b)*和abb两部分,第一部分是由0个或若干个a和b组成的字符串,第二部分仅
14、由abb字符串组成,由此得到CFG GA0如下: GA0: AHT HaH|bH| Tabb2. 正规式与正规式与CFG描述的对象描述的对象 CFG既可描述语法,又可描述词法。 基于下述原因,通常用正规式描述词法: (1)词法规则简单,用正规式已足以描述; (2)正规式的表示比CFG更简洁、直观 和易于理解; (3) FA的构造比PDA(下推自动机)的构 造简单且效率高。 注意注意: (1)语言的描述描述和语言的识别识别是表示一种语言的两个不同侧面, 二者缺一不可。 (2)正规式正规式通常适合于描述线性结构线性结构, 如标识符、关键字和注释等; 上下文无关上下文无关文法文法通常适合于描述具有嵌
15、套(层次)性质的非线性结构非线性结构, 如 if-else语句、while语句。3.2.1 推导与短语1. 规范推导规范推导 最右推导最右推导: 在推导过程中,若每一步推导都是对句型中的最右非终结符最右非终结符用相应产生式的右部进行替换, 则称这种推导为最右推导。 最左推导最左推导: 在推导过程中,若每一步推导都是对句型中的最左非终结符最左非终结符用相应产生式的右部进行替换, 则称这种推导为最左推导。例如例如, 考虑句子 i+i*i 按文法GE的推导 最左推导最左推导: EE+Ei+Ei+E*E i+i*E i+i*i 最右推导最右推导: EE+EE+E*EE+E*i E+i*ii+i*i注意
16、注意: 推导过程不唯一, 通常只考虑最左 推导或最右推导。 最右推导最右推导又称为规范推导规范推导。 规范推导的逆过程称为规范归约规范归约。2. 短语短语 如果S A且A , 则称 是句型句型关于非终结符A的一 个短语短语,简称是的一个短语短语。 如果S A且A , 则称为句型的一个直接短语直接短语或 简单短语。注意注意: 短语的两个条件缺一不可。 考虑i+i*i, E i+i, 但i+i不是短语 *+*+3. 句柄句柄 句型的最左直接短语最左直接短语称为句柄句柄。 注意, 一个句型的直接短语不唯一, 但最左直接短语唯一。 例如, 对S A , 若为终结符串, 则句型中的句柄为。 将句型中的句
17、柄用产生式的左部 符号代替便得到新句型A, 这是一次 规范归约, 恰与规范推导相反。* 4. 素短语素短语 含有终结符的短语,如果它不存在具有 同样性质的真子串,则该短语为素短语素短语。 例如,在E E+E*i中, i、E*i、E+E*i是句型E+E*i的短语, 其中, i为素短语素短语, E*i虽含终结符, 但其 真子串i含终结符, 故E*i不是素短语不是素短语, 同样E+E*i也不是素短语。+3.2.2 语法树与二义性语法树与二义性1. 语法树语法树 对于程序语言, 有两个问题需要解决: (1)判别程序在语法上是否正确; (2)句子的识别或分析。 为便于分析句子而引入语法树语法树。 语法树
18、语法树以图示化形式把句子分解成各 个组成部分,以分析句子的语法结构。 语法树表示法与文法规则完全一致,但 更为直观和完整。满足下列条件的树称为文法满足下列条件的树称为文法G的的语法树语法树:(1)每个结点用G的一个终结符或非终结 符标记;(2)根结点用文法开始符S标记;(3)内部结点一定是非终结符,若某内部结 点A有n个分支, 且其所有子结点从左 至右依次标记为x1, x2, ,xn,则 Ax1x2xn一定是G的一条产生式;(4)若某结点标记为,则它必为叶结点且 是其父结点的唯一子结点。 一个句型句型对应的语法树语法树以文法开始符S作为根结点,并随着推导逐步展开。当某非终结符被产生式右部的某候
19、选式替换时,该非终结符对应的结点产生出下一代结点,即候选式中从左至右的每个符号依次顺序对应一个新结点,且每个新结点与其父结点之间都有一连线。在一棵语法在一棵语法树生长过程中的任何时刻树生长过程中的任何时刻,所有没有后代所有没有后代的叶结点的叶结点的自左至右排列是一个的自左至右排列是一个句型句型。 例如,句子i+i*i的语法树如下:EEEE*Eiii第一代第二代第三代第四代 构造语法树时, 一个句型的最左推导及最右推导只决定先先生长左子树还是先先生长右子树, 推导结束时相应的语法树已看不出先生长的是哪个子树。 因此, 一棵语法树表示一个句型种种可能的不同推导过程, 包括最左(最右)推导。若坚持使
20、用最左坚持使用最左(最右最右)推导推导, 则一棵则一棵语法树等价于一个最左语法树等价于一个最左(最右最右)推导推导, 这种等价性包括语法树的每一步生长和推导过程的每一步展开的完全一致性。2. 子树和短语子树和短语 语法树的某个结点连同它的所有后代组 成了一棵子树子树。 只含有单层分枝的子树称为简单子树简单子树。 子树与短语的关系子树与短语的关系: (1)短语短语: 子树的所有叶结点所有叶结点组成的符号 串是相对于子树根子树根的短语短语; (2)直接短语直接短语: 简单子树的所有叶结点简单子树的所有叶结点组 成的符号串是直接短语直接短语; (3)句柄句柄: 最左简单子树最左简单子树的所有叶结点组
21、 成的符号串为句柄句柄; (4)素短语素短语: 子树的所有叶结点组成的 含终结符含终结符的符号串, 且在该子树中 没有没有有包含终结符的更小子树更小子树。 显然, 从语法树出发寻找短语、直接短语、句柄和素短语直观得多。但要注意, 子树叶结点组成的符号串子树叶结点组成的符号串是指由该子子树根树根开始向下生长的所有叶结点所有叶结点,该子树的部分叶结点并不是该子树的短语。考虑句型E+E*i的语法树:短语: i、E*i和E+E*i; 直接短语: i; 句柄: i; 素短语: iEEEE*Ei3. 文法的二义性文法的二义性 若文法G的一个句子能找到两种不同的最左推导(最右推导), 即存在两棵不同的语法树
22、, 则称这个句子句子是二义性是二义性的。 若一个文法包含二义性句子, 则这个文法是二义文法二义文法, 否则是无二义文法。 例如, 对文法(3.1),句子i+i*i存在两种最左(右)推导:EEEE*EiEEEE*Eiii(a)ii(b)再如,条件语句文法GS: GS: Sif B S Sif B S else S SA /A指其它语句 其中, VN =B,S,A, VT =if, else 文法GS的一个句型if B if B S else S对应两棵不同的语法树, 如下图所示, 因此,文法GS是二义性文法。SifS(a)(b)BSifS elseBSBSifS elseifSB4. 文法二义性
23、的消除文法二义性的消除 一个文法是二义性的, 并不说明文法所描述的语言是二义性的。即对于一个二义文法GS, 若能找到一个非二义文法GS, 使得L(G)=L(G), 则该二义文法的二义性可以消除。若找不到这样的GS,则二义文法描述的语言为先天二义性的。文法二义性的消除方法:(1)不改变文法中原有的语法规则, 仅加进 一些语法的非形式规定。 如对文法(3.1), 不改变已有产生式, 仅加 进运算符的优先顺序优先顺序和结合规则结合规则, 即 *优先于+, 且*,+都服从左结合。(2)构造一个等价的无二义文法。即把排除 二义性的规则合并到原文法中, 改写原改写原 文法文法。GE: EE+T T TT*
24、F F F(E) i此时,句子i+i*i只有唯一 一棵语法树。 例如, 将文法(3.1)改写为无二义文法GE:EETFTFiiTFi*例例3.6 将下述文法GS的二义性消除: GS: Sif b S if b S else S A解: 消除GS的二义性可采用两种方法:(1)不改变已有规则不改变已有规则, 仅加 进一项非形式的语法规 定: else与离它最近的if 匹配, 这样, 句子if b if b A else A对应唯一的一 棵语法树。SbSifS elseAAbifS(2)改写文法GS为GS: SS1| S2 S1if b S1 else S1|A S2if b S|if b S1el
25、se S2 由于引起二义性的原因是if-else语句的if后后可以是任意if语句, 故改写文法改写文法时规定时规定if和和else之间只能是之间只能是if-else语句或其它语句语句或其它语句。S1bS1ifS1elseAAbifSS2S 编译过程中希望一个文法是无二义性的, 这样句子的分析可按唯一确定的方式进行。但文法的二义性是不可判定的, 即不存在一种算法能在有限步内判定一个文法是否为二义性的。不过, 二义文法有时也可带来一定好处, 如语法分析中二义文法的应用。 自上而下分析自上而下分析从文法开始符出发, 向下推导, 推出句子。即寻找一个推导序列, 使推导出的句子恰为输入串; 亦即,从根结
展开阅读全文