算符優(yōu)先文法分析器參考模板_第1頁
算符優(yōu)先文法分析器參考模板_第2頁
算符優(yōu)先文法分析器參考模板_第3頁
算符優(yōu)先文法分析器參考模板_第4頁
算符優(yōu)先文法分析器參考模板_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、  1 / 8   /文法為/(0)E' #E#/(1)E E+T /(2)E T/(3)T T*F /(4)T F/(5)F PF /(6)F P/(7)P (E) /(8)P i  /根據(jù)算符優(yōu)先文法的分析規(guī)則求得終結(jié)符優(yōu)先關(guān)系表/        +    *        i    (    ) 

2、0;  #/  +     >    <    <    <    <    >    >/  *     >    >    <    < &

3、#160;  <    >    >/       >    >    <    <    <    >    >/  i     >    >&#

4、160;   >              >    >/  (     <    <    <    <    <    =    /

5、60; )     >    >    >              >    >/  #     <    <    <    < &

6、#160;  <         =#include<stdlib.h>#include<stdio.h>#include<dos.h>#include<stdio.h>#include<string.h>#include<ctype.h>#include<iostream.h>#define SIZE 128char youxian77;  /算符優(yōu)先關(guān)系數(shù)組char lexbufSIZE; /存放輸入的

7、要進(jìn)行分析的句子char lexSIZE;   /存放剩余串char fenxizhanSIZE;/分析棧void fenxi();int panduanyou(char x);void shengyuchuan();int k;void zengjia();void main()      /將算符優(yōu)先關(guān)系存放在算符優(yōu)先關(guān)系數(shù)組里 youxian00='>' youxian01='<' youxian02='<' youxian

8、03='<' youxian04='<' youxian05='>' youxian06='>' /_ youxian10='>' youxian11='>' youxian12='<' youxian13='<' youxian14='<' youxian15='>' 

9、;youxian16='>' /_ youxian20='>' youxian21='>' youxian22='<' youxian23='<' youxian24='<' youxian25='>' youxian26='>' /_ youxian30='>' youxian31=

10、9;>' youxian32='>' youxian33='$'/無優(yōu)先關(guān)系的用$表示 youxian34='$' youxian35='>' youxian36='>'    /_   youxian40='<'   youxian41='<'   youxian42='<' &

11、#160; youxian43='<'   youxian44='<'   youxian45='='   youxian46='$'   /_   youxian50='>'   youxian51='>'   youxian52='>'   youxian53='$' 

12、;  youxian54='$'   youxian55='>'   youxian56='>'   /_   youxian60='<'   youxian61='<'   youxian62='<'   youxian63='<'   youxian64='<&#

13、39;   youxian65='$'   youxian66='='  /_    printf("現(xiàn)在就要進(jìn)行算符優(yōu)先分析,請做好準(zhǔn)備               n");   printf("*n");   printf("請輸入要進(jìn)行分析的句子n&q

14、uot;);     cin.get(lexbuf,SIZE); /將輸入的字符串存到數(shù)組   printf("步驟     棧    優(yōu)先關(guān)系   當(dāng)前符號  剩余輸入串  移進(jìn)或歸約n");   k=0; fenxizhank='#'   fenxizhank+1='0'   int lenth,i1; /初始化 剩余串?dāng)?shù)

15、組為輸入串   lenth=strlen(lexbuf);   for(i1=0;i1<lenth;i1+)    lexi1=lexbufi1;   lexi1='0'   fenxi();    void fenxi()  int i,j,f,z,z1,n,n1,z4,n4; int flag=0;/操作的步驟數(shù) char a; /存放正在分析的字符 char p6,Q,p1,p4;

16、0;   f=strlen(lexbuf);  /測出數(shù)組的長度 for(i=0;i<f;i+)   a=lexbufi;  if(fenxizhank='+'|fenxizhank='*'|fenxizhank=''|fenxizhank='i'|fenxizhank='('|fenxizhank=')'|fenxizhank='#')   j=k;  else  &

17、#160; j=k-1;          z=panduanyou(fenxizhanj);/ 從優(yōu)先關(guān)系表中查出sj和a的優(yōu)先關(guān)系  if(a='+'|a='*'|a=''|a='i'|a='('|a=')'|a='#')   n=panduanyou(a);  else /如果句子含有不是終結(jié)符集合里的其它字符,不合法     p

18、rintf("error!不合法的句子");   break;   p6=youxianzn;  if(p6='>')  loop:  Q=fenxizhanj;    if(fenxizhanj-1='+'|fenxizhanj-1='*'|fenxizhanj-1=''|fenxizhanj-1='i'|fenxizhanj-1='('|fenxizhanj-1=')

19、9;|fenxizhanj-1='#')    j=j-1;   else    j=j-2;   z1=panduanyou(fenxizhanj);   n1=panduanyou(Q);   p1=youxianz1n1;   if(p1='<')  /fenxizhanj+1fenxizhank歸約為N       k=j+1;&#

20、160;   shengyuchuan();    flag+; printf("(%d)       %s        %c        %c        %s       

21、0;   歸約n",flag,fenxizhan,p6,a,lex); i-;    fenxizhank='N' int hou,hou1; hou=strlen(fenxizhan);  for(hou1=k+1;hou1<hou;hou1+)     fenxizhanhou1='0'/多個字符歸約,把棧頂后面的舍棄    zengjia();/歸約剩余串沒變化  

22、;    else       goto  loop;   else     if(p6='<')  /移進(jìn)          有一個問題就是如果上一步是不歸約,剩余的字符串減少一個        shengyuchuan();    &

23、#160; lexbuff='0'      flag=flag+1;    printf("(%d)       %s        %c        %c        %s   

24、0;       移進(jìn)n",flag,fenxizhan,p6,a,lex);   /printf("1  ");   /printf("     %s  ",fenxizhan);   /printf("     %c  ",p);  / printf("  

25、;   %c  ",a);   /printf("        %s",lex);   /printf("            移進(jìn)n");  / printf("%s",lex);      /printf(&qu

26、ot;(i)");   k=k+1;   fenxizhank=a;      else     if(p6='=')       z4=panduanyou(fenxizhanj);    n4=panduanyou('#');    p4=youxianz4n4;    if(p4='=')

27、60;     shengyuchuan();  flag+; printf("(%d)       %s        %c        %c        %s             接受n",flag,fenxizhan,p6,a,lex);     printf("合法的句子");     break;      

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論