语法分析-LL(1)分析表的构造

对于一个给定的文法,构造他的LL(1)分析表的步骤:

一:对文法进行等价变换

一般题目给定一个文法,都会存在直接左递归公共前缀:

  (1)首先会对文法消除直接左递归:方法(见“语法分析-消除左递归”)

  (2)然后需要对已经消除左递归的文法进行消除公共前缀:方法:


二:求出每个产生式的predict集合

产生predict集合的方法(见“语法分析-First,Follow,Predict三集合求法”)

三:画LL(1)分析表

四:注意事项

有些文法不是LL(1)文法,所以下面给出判断一个文法是否是LL(1)文法的三个条件:

1)文法不含左递归 像这个样子A->Ab是不允许的(存在左递归)
2)对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交。
即对于A->α1|α2|…|αn
要求FIRST(αi)∩FIRST(αj)=Ø (i≠j)
3)对于文法中的每个非终结符A,若它存在某个候选首符集包含ε,则
FIRST(A)∩FOLLOW(A)=Ø

 

2)和3)可以简述为,同一非终结符对应的不同产生式的predict集相交为空。

posted @ 2020-08-03 20:55  TThornBirds  阅读(2300)  评论(0)    收藏  举报