编译原理(二)语法分析


终结符一般为大写字母,非终结符一般为小写字母
BNF范式规定<终结符>,非终结符
最左推导,最右推导
语法分析树:

二义性文法:

自顶向下分析:

相关算法:

用前看符号避免回溯。
递归下降分析算法:

LL(1)分析算法:


文法先去除左递归,再提取左公因子,求FIRST集,NULLABLE集,FOLLOW集
FIRST集:

把FIRST集推广到任意串上:


如果LL(1)分析表存在冲突则该文法不属于LL(1)文法
FIRST集的完整算法:

一般计算LL(1)分析表注意:

NULLABLE集:

NULLABLE集计算过程:

FOLLOW集的计算:

求LL(1)分析表的过程:求FIRST集----->求NULLABLE集------->求FOLLOW集------->求FIRST_S集——>求LL(1)分析表(可能会得到冲突)
构建LL(1)分析表:

用LL(1)分析表进行LL(1)文法分析
解决LL(1)分析表的冲突:
1,消除左递归,变为右递归


消除间接左递归:

2,提取左公因子。



自底向上分析方法,也称移进-归约分析法(自顶向下最右推导的逆过程):
LR(0)分析:


分析步骤:

LR(0)分析算法出现的问题:可能会延时报出现的错误,可能会出现移进,归约冲突情况。
SLR分析算法:

LR(1)分析算法:


*缩小SLR算法中FOLLOW集的范围

------------恢复内容结束------------


终结符一般为大写字母,非终结符一般为小写字母
BNF范式规定<终结符>,非终结符
最左推导,最右推导
语法分析树:

二义性文法:

自顶向下分析:

相关算法:

用前看符号避免回溯。
递归下降分析算法:

LL(1)分析算法:


文法先去除左递归,再提取左公因子,求FIRST集,NULLABLE集,FOLLOW集
FIRST集:

把FIRST集推广到任意串上:


如果LL(1)分析表存在冲突则该文法不属于LL(1)文法
FIRST集的完整算法:

一般计算LL(1)分析表注意:

NULLABLE集:

NULLABLE集计算过程:

FOLLOW集的计算:

求LL(1)分析表的过程:求FIRST集----->求NULLABLE集------->求FOLLOW集------->求FIRST_S集——>求LL(1)分析表(可能会得到冲突)
构建LL(1)分析表:

用LL(1)分析表进行LL(1)文法分析
解决LL(1)分析表的冲突:
1,消除左递归,变为右递归


消除间接左递归:

2,提取左公因子。



自底向上分析方法,也称移进-归约分析法(自顶向下最右推导的逆过程):


分析步骤:

浙公网安备 33010602011771号