- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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, 则AX1X2…Xk必然是G的一个产生式。
文法的二义性:一个句子对应多个语法树。
对无二义文法,一个句子只对应一个语法树。
第4章 语法分析和语法分析程序
5
按产生语法树的方向分类
自顶向下分析
递归下降法
LL
自底向上分析
算符优先法
LR
4.1 自顶向下的语法分析
6
例 文法G[E]:
ET | EAT
TF | TMF
F(E) | i
A+ | -
M* | /
建立从E到i+i*i的最左推导。
左递归与死循环:EEAT,必须消除左递归。
4.1.1 消除文法的左递归
7
直接左递归的消除
前提:掌握算法2.1-2.6消除无用符号和无用产生式、产生式和单产生式。
直接左递归的形式:AA,V+
方法一:将AA| 改写为A{}
方法二:引入A,改写为AA和AA|
一般化:将AA1|A2|…|An|1|2|…|m改写为A1A |2A |…|mA和A1A |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
左递归的消除
从线性方程组到矩阵方程
例 消除文法SSa|Ab|a, ASc的左递归。
S=Sa+Ab+a
A=Sc+AΦ+Φ
4.1.1 消除文法的左递归
10
课堂练习
消除文法SAS|b, ASA|a的左递归。
4.1.1 消除文法的左递归
11
课堂练习
消除文法SAS|b, ASA|a的左递归。
S=SΦ+AS+b
A=SA+AΦ+a
Sbz11 | az21 Abz12 | az22
z11 | Az21 z12Az22 z21Sz11 z22 | Sz12
4.1.4 预测分析法
12
FIRST集的定义
对符号串,FIRST()={a|*a, 且aVT, V*} (当*,约定FIRST()),即FIRST()由推导出的每个符号串的首个终结符组成。
若以终结符a打头,则FIRST()=FIRST(a)={a}。
若以非终结符X打头,则FIRST()=FIRST(X)?(若X*,等式不成立)
4.1.4 预测分析法
13
构造FIRST集的方法
令XVN,aVT,X的产生式具有下述3种形式
4.1.4 预测分析法
14
构造FIRST集的方法
遍历所有左部为X的产生式
set FIRST(X) {
ft = ;
if (XVT) return {X};
if (X P) ft += {};
for each(XY1Y2…YkP ) {
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]:
ETE′
E′ATE′ |
TFT′
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)