编译原理(二)语法分析

 

编译原理(二)语法分析_第1张图片

 

 编译原理(二)语法分析_第2张图片

 

 终结符一般为大写字母,非终结符一般为小写字母

BNF范式规定<终结符>,非终结符

最左推导,最右推导

语法分析树:

编译原理(二)语法分析_第3张图片

 

 二义性文法:

编译原理(二)语法分析_第4张图片

 

 自顶向下分析:

编译原理(二)语法分析_第5张图片

 

 相关算法:

编译原理(二)语法分析_第6张图片

 

 用前看符号避免回溯。

递归下降分析算法:

编译原理(二)语法分析_第7张图片

 

 LL(1)分析算法:

编译原理(二)语法分析_第8张图片

编译原理(二)语法分析_第9张图片

 

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

FIRST集:

编译原理(二)语法分析_第10张图片

把FIRST集推广到任意串上:

编译原理(二)语法分析_第11张图片

 

 

 

 如果LL(1)分析表存在冲突则该文法不属于LL(1)文法

FIRST集的完整算法:

编译原理(二)语法分析_第12张图片

 

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

编译原理(二)语法分析_第13张图片

 

 NULLABLE集:

编译原理(二)语法分析_第14张图片

 

 NULLABLE集计算过程:

编译原理(二)语法分析_第15张图片

 

 FOLLOW集的计算:

编译原理(二)语法分析_第16张图片

 

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

构建LL(1)分析表:

编译原理(二)语法分析_第17张图片

用LL(1)分析表进行LL(1)文法分析

解决LL(1)分析表的冲突:

1,消除左递归,变为右递归

编译原理(二)语法分析_第18张图片

编译原理(二)语法分析_第19张图片

 消除间接左递归:

编译原理(二)语法分析_第20张图片      编译原理(二)语法分析_第21张图片         编译原理(二)语法分析_第22张图片

2,提取左公因子。

编译原理(二)语法分析_第23张图片

 

 编译原理(二)语法分析_第24张图片

 

 编译原理(二)语法分析_第25张图片

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

LR(0)分析:

编译原理(二)语法分析_第26张图片

 

 编译原理(二)语法分析_第27张图片     编译原理(二)语法分析_第28张图片

 

分析步骤:

编译原理(二)语法分析_第29张图片      编译原理(二)语法分析_第30张图片

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

SLR分析算法:

编译原理(二)语法分析_第31张图片

 

 LR(1)分析算法:

编译原理(二)语法分析_第32张图片

 

 编译原理(二)语法分析_第33张图片

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

编译原理(二)语法分析_第34张图片

 

 

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

编译原理(二)语法分析_第35张图片

 

 编译原理(二)语法分析_第36张图片

 

 终结符一般为大写字母,非终结符一般为小写字母

BNF范式规定<终结符>,非终结符

最左推导,最右推导

语法分析树:

编译原理(二)语法分析_第37张图片

 

 二义性文法:

编译原理(二)语法分析_第38张图片

 

 自顶向下分析:

编译原理(二)语法分析_第39张图片

 

 相关算法:

编译原理(二)语法分析_第40张图片

 

 用前看符号避免回溯。

递归下降分析算法:

编译原理(二)语法分析_第41张图片

 

 LL(1)分析算法:

编译原理(二)语法分析_第42张图片

编译原理(二)语法分析_第43张图片

 

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

FIRST集:

编译原理(二)语法分析_第44张图片

把FIRST集推广到任意串上:

编译原理(二)语法分析_第45张图片

 

 

 

 如果LL(1)分析表存在冲突则该文法不属于LL(1)文法

FIRST集的完整算法:

编译原理(二)语法分析_第46张图片

 

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

编译原理(二)语法分析_第47张图片

 

 NULLABLE集:

编译原理(二)语法分析_第48张图片

 

 NULLABLE集计算过程:

编译原理(二)语法分析_第49张图片

 

 FOLLOW集的计算:

编译原理(二)语法分析_第50张图片

 

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

构建LL(1)分析表:

编译原理(二)语法分析_第51张图片

用LL(1)分析表进行LL(1)文法分析

解决LL(1)分析表的冲突:

1,消除左递归,变为右递归

编译原理(二)语法分析_第52张图片

编译原理(二)语法分析_第53张图片

 消除间接左递归:

编译原理(二)语法分析_第54张图片      编译原理(二)语法分析_第55张图片         编译原理(二)语法分析_第56张图片

2,提取左公因子。

编译原理(二)语法分析_第57张图片

 

 编译原理(二)语法分析_第58张图片

 

 编译原理(二)语法分析_第59张图片

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

编译原理(二)语法分析_第60张图片

 

 编译原理(二)语法分析_第61张图片     编译原理(二)语法分析_第62张图片

 

分析步骤:

编译原理(二)语法分析_第63张图片      编译原理(二)语法分析_第64张图片

你可能感兴趣的:(编译原理(二)语法分析)