水印不知道怎么去掉……
第一步:拓广文法
把产生式拆出来单独写,
第一行要用其他符号指向开始符号
第二步:写出所有项目
在第一步之上,前中后加点(·)
第三步:求项目集规范族
包括并不限于这3个要点(规则):
①某个项目的“·”走过一个符号(非空),下一个状态的开头,写这个项目的“·”后移一位的项目。
②“·”后面非终结符,将它的“·”头的项目罗列
③“·”后无东西,终止
(1)E指向左边两个E:如果“·”后面是非终结符,要把这个非终结符指向一开始是“·”的所有项目写在该状态中。规则②
(2)E指向右边的E:“·”走过了一个符号,这个符号是E。规则①
(3)a指向a:“·”走过了一个符号,这个符号是a。规则①
(4)b指向b:“·”走过了一个符号,这个符号是b。规则①
(5)c指向自己:规则①,第二行走过一个c,“又”到了第一行,所以自己指自己。
(6) 规则③
第四步:构造LR(0)分析表
举几个例子:(看箭头指向)
(1)I0走a到I2:S0走a到S2
(2)I5走c到I5:S5走c到S5
(3)I3走B到I7:S3走B到S7(GOTO写7)
第五步:字符串分析过程
规则:
产生式为空:状态栈最右字母 和 输入串最左字母查表。
若查到的的是状态,入状态栈。输入串最左一个进入符号栈。
若查到的是产生式,1.下一行的产生式填写查到的产生式 2.下一行的符号栈扣除同产生式“→”右端长度的符号,替换为产生式左部字母 3.状态栈扣除同产生式“→”右端长度的数字(状态),填写当前【状态栈右端,符号栈最右端】的查表入状态栈
序号1:查表:0和i ,得S5。
序号2:状态栈入5,输入站退i到符号栈。
查表:5和*,得r6。F→i
序号3:(1)填入产生式(2)#i变#F(3)05变0,用0和F查表,得3,状态栈03
查表:3和*查表,得r4。T→F
序号4:(1)填入产生式(2)#F变#T(3)03变0,用0和T查表,得2,状态栈02
查表:2和*查表,得S7。
序号5:状态栈入7,输入栈退*到符号栈。
查表:7和i查表,得S5。
查表:10和+,得r3,T→T*F。
序号8:(1)填入产生式(2)#T*F变#T (3)027(10)去掉3个变0,用0和T查表,得2,状态栈02。
查表:2和+,得r2。E→T
yypyyds!(