(11) A->cA. (12) A->.d (13) A->d. (14) B->.cB (15) B->c.B (16) B->cB. (17) B->.d (18) B->d.
LR(0)项目规范族如下: I0 = { 1, 3, 6 } I1 = { 2 }
I2 = { 4, 9, 12 } I3 = { 7, 14, 17 } I4 = { 5 }
I5 = { 10, 9, 12 } I6 = { 13 } I7 = { 8 }
I8 = { 15, 14, 17 } I9 = { 18 } I10 = { 11 } I11 = { 16 }
文法的LR(0)分析表 ACTION GOTO 状态 a b c d # E A B 0 S2 S3 1 1 acc 2 S5 S6 4 3 S8 S9 7 4 R1 R1 R1 R1 R1 5 S5 S6 10 6 R4 R4 R4 R4 R4 7 R2 R2 R2 R2 R2 8 S8 S9 11 9 R6 R6 R6 R6 R6 10 R3 R3 R3 R3 R3 11 R5 R5 R5 R5 R5
10
图一:读入文法
图二:分析文法
11
图三:分析句子:ad
图四:生成树
7.软件运行环境及限制
系统平台:Windows XP/2000 软件平台:VC++ 6.0
12
8.心得体会
归约的时候应该从状态栈和文法符号栈中自顶向下去掉R个符号,即栈指针SP减去R,并把A移入文法符号栈内,j=GOTO[i,A]移进状态栈,其中i为修改指针后的栈顶状态。
而在当归约到文法符号栈中只剩文法的开始符号E时,并且输入符号串已结束即当前输入符是'#',则为分析成功。
LR(0)分析器归约是个难点,应该认真分析文法结构。通过实验设计加深了对VC的熟练程度和对编译原理课程的理解。
总的来说,形式语言是编译原理的基础,是建立文法,分析文法的重要知识基础。
9.参考文献
《程序设计语言编译方法》(第三版) 肖军模 大连理工出版社
《编译原理教程习题解析与上机指导》 胡元义 西安电子科技大学出版社 《编译原理学习与应用指导》 张永梅 国防工业出版社 《编译原理》 李建中 机械工业出版社
13