进入今天的学习前,若不理解LL(1)文法中的首符号集,后跟符号集和选择符号集,可看:
http://t.csdnimg.cn/BjSHv
构造预测分析表的步骤:
步骤1:对文法的每个规则U->u,执行步骤2与3
步骤2:对于每个终结符aFirst(u),让A[U,a]='U->u';
步骤3:如果(空串)
First(u),则对Follow(U)中的每个终结符号b或#,让A[U,b]='U->u'或
A[U,#]='U->u';
步骤4:把A的每个未定义元素置为ERROR(用空白表示)
设有以下文法:
构造预测分析表之前需要列首符号集:
注:当首符号集中出现(空串),那么就需要将“->”左边的Follow集计算出来

第一步:输入的一行表示文法中的终结符号,

第二步:
对于First(TE')={ ( , i }

以此类推可得,剩余空格都为ERROR:

示例:输入字符串:i+i*i,该字符串是否为文法G[E]产生的句子
步骤一:
对于第一个要处理的字符” i “,弹出E,放入TE'
注:左边是栈底,右边是栈顶
| 栈 | 输入 | 输出 |
| #E | i+i*i# | 第一步,没有输出 |
| #E'T | i+i*i# | E->TE'(第一步输入的输出) |
从第二步开始就一定要从上一步输入的输出来写栈,例如:
上一步输入的输出为:E->TE',E'先入栈,T再入栈,反序入栈

步骤二:
接下来还是输入”i“,遇到的是栈顶T,结合分析表得到T->FT',再加上先弹出的”E“,得到栈#E'T'F,
接下来将”F“弹出来,对上输入的”i“,得到"F->i"
| 栈 | 输入 | 输出 |
| #E'T'F | “i+i*i#” | T->FT' |
| #E'Ti | “i+i*i#” | F->i |
此时看到指针指向的输入“i”与栈顶”i“相同,就可以将两者弹出,得到
| 栈 | 输入 | 输出 |
| #E'T | “+i*i#” |
以此类推
| 栈 | 输入 | 输出 |
| #E | "+i*i#" | T'->ε |
| #E'T+ | "+i*i#" | E'->+TE' |
| #E'T | "i*i#" | |
| #E'T'F | "i*i#" | T->FT' |
| #E'T'i | “i*i#” | F->i |
| #E'T'i | “*i#” | |
| #E'T'F* | "*i#" | T'->*FT' |
| #E'T'F | "i#" | |
| #E'T'i | "i#" | F->i |
| #E'T' | "#" | |
| #E' | "#" | T'->ε |
| # | "#" | E'->ε |
至此,可以判断此字符串是文法G(E)的句子
















