如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第四章4.3LL(1)分析法4.3.4LL(1)文法的判别(4.5.2)例4.7文法4.2P79G:E→E+T|TT→T*F|FF→(E)|i建立一个一维数组X[],用以记录非终结符能否推出ε。①将数组X[]中对应每一非终结符的标记置初值为“未定”。②扫描文法中的产生式。(a)若某一非终结符的某一产生式右部为ε,则将数组中对应该非终结符的标志置为“是”,并从文法中删除该非终结符的所有产生式。(b)若某一产生式右部含有终结符,则删除该产生式。(右部含有终结符,一定无法推出ε)若这使得以某一非终结符为左部的所有产生式都被删除,则将数组中对应该非终结符的标记值改为"否"。③扫描产生式右部的每一符号。(此时产生式右部全部为非终结符)(a)若所扫描到的非终结符号在数组中对应的标志是"是",则删去该非终结符,若这使产生式右部为空,则对产生式左部的非终结符在数组中对应的标志改"是",并删除该非终结符为左部的所有产生式。(b)若所扫描到的非终结符号在数组中对应的标志是"否",则删去该产生式,若这使产生式左部非终结符的有关产生式都被删去,则把在数组中该非终结符对应的标志改成“否”。④重复③,直到扫描完一遍文法的产生式,数组中非终结符对应的特征再没有改变为止。2.计算FIRST集(d)若X∈VN,且有产生式X→Y1Y2…Yi-1Yi…Yn,当Y1Y2…Yi-1都能推出ε时,则FIRST(Y1)-{ε}FIRST(Y2)-{ε}…FIRST(Yi-1)-{ε}FIRST(Yi)都包含在FIRST(X)中。(e)当(d)中X→Y1Y2…Yn所有Yj都可以推出ε,(j=1,2,…n),则FIRST(Y1)FIRST(Y2)…FIRST(Yn)都包含在FIRST(X)中反复使用上述(b)~(e)步直到每个符号的FIRST集合不再增大为止。求一个符号串α的FIRST集合例4.7文法4.2求FIRST集P793.计算FOLLOW集例4.7文法4.2求FOLLOW集P79例4.7文法4.2LL(1)文法判别P794.计算SELECT集补充例:判断文法是否是LL1文法3.求出能推出ε的非终结符4.求FIRST集5.求FOLLOW集6.计算SELECT集