[计算机软件及应用]编译原理 第4章 语法分析和语法分析程序.pptVIP

[计算机软件及应用]编译原理 第4章 语法分析和语法分析程序.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机软件及应用]编译原理 第4章 语法分析和语法分析程序

第4章 语法分析和语法分析程序 计算机与软件学院 陆克中 kzlu@szu.edu.cn 1 第4章 语法分析和语法分析程序 2 编译程序的逻辑结构 词法分析程序 语法分析程序 语义分析程序 中间代码生成 代码优化程序 目标代码生成 信息表管理程序 错误检查和处理程序 源 程 序 目 标 代 码 第4章 语法分析和语法分析程序 3 编译程序的组织 语法分析 程序 语义分析及 代码生成程序 词法分析 程序 整理目标程序 源程序 目标程序 停机 开始 第4章 语法分析和语法分析程序 4 语法树(分析树、推导树) 每个结点均有标记VN∪VT 根的标记为开始符号S 内部结点标记VN 若以A为标记的结点有k个孩子分别标记为X1, X2, …, Xk, 则AX1X2…Xk必然是G的一个产生式。 文法的二义性:一个句子对应多个语法树。 对无二义文法,一个句子只对应一个语法树。 第4章 语法分析和语法分析程序 5 按产生语法树的方向分类 自顶向下分析 递归下降法 LL 自底向上分析 算符优先法 LR 4.1 自顶向下的语法分析 6 例 文法G[E]: ET | EAT TF | TMF F(E) | i A+ | - M* | / 建立从E到i+i*i的最左推导。 左递归与死循环:EEAT,必须消除左递归。 4.1.1 消除文法的左递归 7 直接左递归的消除 前提:掌握算法2.1-2.6消除无用符号和无用产生式、产生式和单产生式。 直接左递归的形式:AA,V+ 方法一:将AA| 改写为A{} 方法二:引入A,改写为AA和AA| 一般化:将AA1|A2|…|An|1|2|…|m改写为A1A |2A |…|mA和A1A |2A |…|nA | 4.1.1 消除文法的左递归 8 左递归的消除 从线性方程组到矩阵方程 从3类文法到2类文法 只关心产生式右部各符号串的首字符 对n个非终结符X1…Xn,得到矩阵方程 或表示为: X=XA+B,方程的解为: X=BA* 由于A*=A0+A1+A2+…=I+AA* (r*=|rr*) 若令A*=Z,则对X=BA*可得X=BZ和Z=I+AZ X会不会产生左递归? Z会不会产生左递归? 4.1.1 消除文法的左递归 9 左递归的消除 从线性方程组到矩阵方程 例 消除文法SSa|Ab|a, ASc的左递归。 S=Sa+Ab+a A=Sc+AΦ+Φ 4.1.1 消除文法的左递归 10 课堂练习 消除文法SAS|b, ASA|a的左递归。 4.1.1 消除文法的左递归 11 课堂练习 消除文法SAS|b, ASA|a的左递归。 S=SΦ+AS+b A=SA+AΦ+a Sbz11 | az21 Abz12 | az22 z11 | Az21 z12Az22 z21Sz11 z22 | Sz12 4.1.4 预测分析法 12 FIRST集的定义 对符号串,FIRST()={a|*a, 且aVT, V*} (当*,约定FIRST()),即FIRST()由推导出的每个符号串的首个终结符组成。 若以终结符a打头,则FIRST()=FIRST(a)={a}。 若以非终结符X打头,则FIRST()=FIRST(X)?(若X*,等式不成立) 4.1.4 预测分析法 13 构造FIRST集的方法 令XVN,aVT,X的产生式具有下述3种形式 4.1.4 预测分析法 14 构造FIRST集的方法 遍历所有左部为X的产生式 set FIRST(X) { ft = ; if (XVT) return {X}; if (X P) ft += {}; for each(XY1Y2…YkP ) { for each(Yi) { if (FIRST(Yi)) { ft += (FIRST(Yi) - {}); if (i == k) ft += {}; } else { ft += FIRST(Yi); break; } } } return ft; } 4.1.4 预测分析法 15 构造FIRST集的方法 例 对文法G[E]: ETE′ E′ATE′ |  TFT′ T′MFT′ |  F(E) | i A+ | - M* | / 求每个非终结符的FIRST集合。 4.1.4 预测分析法 16 构造FIRST集的方法 例 FIRST(A)={+, -} FIRST(F)={(, i} FIRST(T)=FIRST(F)={(, i} F

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档