编译原理(二)语法分析

 

 

 

 

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

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,提取左公因子。

 

 

 

 

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

 

      

 

分析步骤:

      

posted on 2019-12-16 13:59  不愧下学  阅读(890)  评论(0)    收藏  举报

导航