1、block proc-declstatement = const ; | ident = | , = var | | procedure | call | begin end | if then | while do |= odd = = | | = | =termadding-operator= + | -factormultiplying-operator= * | / | ( SS-BDB-varH;H-id|H,idD-i=E|call(k)|if(k)DelseD|while(K)doDK-ERER-|=|EOT|TT-TQF|FO-+|-Q-*|/F-id|nunber|(E)pr
2、ograme=Pblack=S=B=H=D= K=E= T= F实验环境:windows microsoft visual c+实验原理:构造项集Setofltems closure(I)repeat for each A a.Bb ,ain J and each produtcion Bg of G such that B.g, each of first(ba)is not in J: ADD B.g,b to Iuntil no more items can be added to Ireturn ISetofltems goto (I,X):If I is a set of LR(1)
3、 items and X is a grammar symbol (terminal or non-terminal), then goto(I,X) is defined as follows:If A .X,a in I then every item in closure(A X.,a) will be in goto(I,X).Void items()C is closure(S.S,$) repeat the followings until no more set of LR(1) items can be added to C.for each I in C and each g
4、rammar symbol Xif goto(I,X) is not empty and not in C add goto(I,X) to C简略分析表:123456789101112202122232425idnumcallifelsewhiledo*()DHKETFr4accS5S6S7S8S20S21S221719S231330341415S1616r7r12S39r15r16r17.38r13394240S4141r18r143143实验流程图:实验结果:输入:输出:输入的字符串以结束bi,i,i;f(ii)i=n*n+new(in)di=i+i栈 符号 输入 动作0 bi,i,i;n)di=i+i 移入03 b i,i,i;0310 bi ,i,i;n)di=i+i 根据H-i规约039 bH ,i,i;03915 bH, i,i;0391516 bH,i ,i;H,i规约039 bH ,i;03915 bH, i;0391516 bH,i ;039 bH ;0392