资源描述:
《简单语义分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、简单语义分析程序设计编写程序,用于分析教材P171,例&1所示属性文法。注:通过扩充LR分析法来完成,教材编译原理(清华大学出版社第2版)—、实验目的:构造LR(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子,了解LR(K)分析方法是严格的从左向右扫描,和H底向上的语法分析方法。LL(1)分析法实验设计思想及算法程序要求:程序输入/输出示例:对下列文法,用LR(1)分析法对任意输入的符号串进行分析:(1)E->E+T(2)E->T(3)T->T*F(4)T->F(5)F->(E)(6
2、)F->i输出的格式如下:(1)LR(1)分析程序,编制人:
3、姓名,学号,赃级(2)输入一以#结束的符号串(包括+—*/()i#):
4、在此位置输入符号串IXnl-"F:MYPROJECTS编译原理3Debugl.exe"LR〔1)分析程序,编制人次0计本2班输入一负结東韵符号執包话*〉i叽i表示10以内的数:2*3*5tt歩骤规约动作联态栈语义棧符号栈1>0-tt2>053>r603r402r201p016p01658>r601639>r4016910>0169711>01697512>i*60169
5、71013>r3016914>rl0115>接受□Pressanykeytocontinue—tt22#F2ttT2#E2-#E*2—ttE*32-3ttE+F2-3#E*T2-3-ttE*T*2-3—ttE*T*52-3-5#E*T*F2-15ttE*T1?ttE一肖好*5:丐£*5:6£*5:丐41、**・**9I**9I歹333333§2tt5tttttttt实现代码:#includestructwenfa{charch;intlen;};structaction{charch;int
6、flag;};structwenfawf[7]={S,1,E,3,'E;1,T,3,T,1,F;3,F,1};〃文法的左部和推出右部的长度structactionac[12][6]={g,5,W>l;s4;1>l;r2;s7;>l;r2;r2,'-l;r4;r4;-l;r',4/r4,•s5;>1;■-l;r6;r6;-l;r6;r6,'s5;>1;>l;s4;>1;>1,•s5;>1;>l;s4;>1;>1,'>1X6;>1;>1X11;>1,•>1X1X7;•>l
7、/r5;r5;-l;r5;r5,};//action表intgt[12]⑶=表voidyuyi_anlysis();intfindnt(chararr);intfindt(chararr);voidprint(intstate[],intj,intyuyi[],intl,charflag[],charreadfl);voidjisuan(intyuyi[],int&l,charflag[],intk);intmain(void)printf(nLR(1)分析程序,编制人:10计本2班”);cha
8、rc='O';yuyi_anlysis();return0;}voidyuyi_anlysis(){chart[6]={T;+7*7(V)#};charnt[3]={E,T,F};charread[10];intstate[20];charflag[20];inti=0,j=0,k=0,1=0,xbl,xb2,count=l,len;//xb表示查找i,+,E,T等的卜标,i是剩余窜的下标,k是符号,j状态intyuyi[20]={0};printf(”输入一以#结束的符号串(包括+*()i#),i表示10
9、以内的数门;scanf("%s",read);state[j++]=0;flag[k++]=#;flag[k]=' f;yuyi[l++]='-*;printf(f,步骤t规约动作t状态栈tt语义栈tt符号栈tt留余窜”);printf(n%d)ttt%dtt%ctt%stt%sH,count,state[j-l],yuyi[l-l],flag,read);while(read[i]!=’ ‘)xbl=findt(read[i]);if(ac[state[j-1]
10、][xb1].ch==X){count++;printf("%d)t接受",count);break;}elseif(ac[state[j-1]][xb1].ch==*s'){〃移近count++;state[j++]=ac[state[j-1]][xb1].flag;flag[k++]=read[i];flag[k]=' :read[i++]='yuyi[l++]=,J;printf('^