2023年計算LL析法實(shí)驗(yàn)報告_第1頁
2023年計算LL析法實(shí)驗(yàn)報告_第2頁
2023年計算LL析法實(shí)驗(yàn)報告_第3頁
2023年計算LL析法實(shí)驗(yàn)報告_第4頁
2023年計算LL析法實(shí)驗(yàn)報告_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

班級:計算機(jī)122姓名:張凱華學(xué)號:實(shí)驗(yàn)名稱:LL(1)分析法實(shí)驗(yàn)?zāi)康暮鸵?guī)定(-)目的通過設(shè)計、編制、調(diào)試一個典型的語法分析程序,實(shí)現(xiàn)對詞法分析程序所提供的單詞序列進(jìn)行語法檢查和結(jié)構(gòu)分析,進(jìn)一步掌握常用的語法分析方法。㈡規(guī)定⑴選擇最有代表性的語法分析方法,如算符優(yōu)先法、遞歸子程序法和LR分析法⑵選擇對各種常見程序語言都用的語法結(jié)構(gòu),如賦值語句(尤指表達(dá)式)作為分析對象,并且與所選語法分析方法要比較貼切。(3)實(shí)習(xí)時間為4-6小時。實(shí)驗(yàn)內(nèi)容和環(huán)節(jié):一、實(shí)驗(yàn)內(nèi)容對下列文法,用LL(1)分析法對任意輸入的符號串進(jìn)行分析:E->TG、T->FSG->+TGG->AS->*FSS->AF->(E)F->im=j;/*行號*/。2。。break;oa)for(j=0;j<=5;j++)。oif(ch==v1[j])對an=j;/*列號*/。。break;oo|cha=C[m][n];,if(cha.origin!='N')/*判斷是否為空*/°(。。Print();。?printi();。oprintf("%c-\cha.origin)輸出產(chǎn)生式7。for(j=0;j<cha.1ength;j++)printf("%c",cha.array[j]);。?printf(,f\n");gfor(j=(cha.1ength-1);j>=0;j-)/*產(chǎn)生式逆序入棧*/8A[++top]=cha.array[j];。if(A[toP]=='人"為空則不進(jìn)棧*/ooofop--J。}/*if7?eIse/*犯錯解決7。oprint();print1();叩rintf("%c犯錯\n”,x);/*輸出犯錯非終結(jié)符*/exit(1);.}/*e1se*/?}/*else*/}while(finish==0);}/*main*/(2)給出運(yùn)營結(jié)果?'E:\MicrosoftVisualStudio\MyProjects\KMeans\K_Means\SUY\Debug\LLl.exe*1ttGT2ttGSF3ttGSiRGS5ItGSF*MGSFttGS>E<8UGS)E9ttGS>GTIMAGS〉GSF11ttGS>GSi12ttGS>GS13ttGS>GL4UGS>GT>L5MGS>GTL6#GS〉?'E:\MicrosoftVisualStudio\MyProjects\KMeans\K_Means\SUY\Debug\LLl.exe*1ttGT2ttGSF3ttGSiRGS5ItGSF*MGSFttGS>E<8UGS)E9ttGS>GTIMAGS〉GSF11ttGS>GSi12ttGS>GS13ttGS>GL4UGS>GT>L5MGS>GTL6#GS〉GSFL7HGS〉GSiL8MGSXISttGS>G,,〈,,,),構(gòu)乘除字符i*<i+i>tt*<i+i>tti*i>#i*i>#?i>??i>??i>tti>tti>tti>tt>tt>lt成的以,肥結(jié)束的字符串進(jìn)行分析,所用產(chǎn)生式E-TG己S己>己酉甲酉E酉GT匹T匹Y匹TT-FSF-ii匹配S-*G己已T酉S酉T匹TT匹,G?TFiS1921ttGS22ttG23acc?四、實(shí)驗(yàn)總結(jié):通過對語法分析程序的設(shè)計和編寫,使自己獲得了很大的收獲,并且使自己對語法分析程序的功能有了更進(jìn)一步結(jié)識。雖然在程序的設(shè)計和編寫過程中出現(xiàn)了一些錯誤,但是通過同學(xué)的幫助和指導(dǎo),順利的將程序中存在的錯誤順利解決,從而順利完畢了本程序的設(shè)計和編程。輸出的格式如下:(1)提醒:本程序只能對由‘「,''構(gòu)成的以#結(jié)束的字符串進(jìn)行分析(2)請輸入要分析的字符串:(3)輸出過程如下:環(huán)節(jié)分析棧剩余輸入串所用產(chǎn)生式1Ei+i*i#E->TG(4)輸入符號串為非法符號串(或者為合法符號串)備注:(1)在“所用產(chǎn)生式”一列中假如相應(yīng)有推導(dǎo)則寫出所用產(chǎn)生式;假如為匹配終結(jié)符則寫明匹配的終結(jié)符;如分析異常犯錯則寫為“分析犯錯”;若成功結(jié)束則寫為“分析成功工(2)在此位置輸入符號串為用戶自行輸入的符號串。(3)上述描述的輸出過程只是其中一部分的。注意:.表達(dá)式中允許使用運(yùn)算符(+?*/)、分割符(括號)、字符i,結(jié)束符#;.假如碰到錯誤的表達(dá)式,應(yīng)輸犯錯誤提醒信息(該信息越具體越好);二、實(shí)驗(yàn)環(huán)節(jié).程序編寫(1)定義部分:定義常量、變量、數(shù)據(jù)結(jié)構(gòu)。(2)初始化:設(shè)立LL(1)分析表、初始化變量空間(涉及堆棧、結(jié)構(gòu)體、數(shù)組、臨時變量等);(3)控制部分:從鍵盤輸入一個表達(dá)式符號串;(4)運(yùn)用LL(1)分析算法進(jìn)行表達(dá)式解決:根據(jù)LL(1)分析表對表達(dá)式符號串進(jìn)行堆棧(或其他)操作,輸出分析結(jié)果,假如碰到錯誤則顯示錯誤信息。三、實(shí)驗(yàn)過程記錄:(1)寫出程序/*LL(1)分析法源程序,只能在VC++中運(yùn)營7inc1ude<stdio.h>include<std1ib.h>include<string.h>include<dos.h>charA[20];/*分析棧*/charB[20]:/*剩余串*/TOC\o"1-5"\h\zcharv1[20]={-,+,*;&)'#');/*終結(jié)符*/charv2[20]={'E'/G';T,S,'F'};/*非終結(jié)符7intj=0,b=0,top=0,I;/*L為輸入串長度*/typedefstructtype/*產(chǎn)生式類型定義*/(charorigin;/*大寫字符*/chararray[5];/*產(chǎn)生式右邊字符7Ant1ength;/*字符個數(shù)*/}type;typee,t,g,g1,s,s1,f,f1;/*結(jié)構(gòu)體變量*/typeC[10][10];/*預(yù)測分析表7voidprint()/*輸出分析棧7(inta;/*指針*/4or(a=0;a<=top+1;a++)。printf("%c",A[a]);printf(At\t");}"print*/voidprint1()/*輸出剩余串*/(intj;for(j=0:j<b;j++)/*輸出對齊符*/?printf(H");4or(j=b;j<=1;j++)Printf("%c,B[j]);oprintf("\t\t\tH);}/*print17voidmain()(ntm,n,k=O,flag=O,finish=0;charch,x;typecha;/*用來接受C[m][n]7/*把文法產(chǎn)生式賦值結(jié)構(gòu)體*/e.origin=,E,;strcpy(e.array,"TGM);?e.\ength=2;origin=T;°strcpy(t.array,"FS");4.length=2;g.origin=,G';strcpy(g.array,"+TG");g.length=3;og1.origin=rG';g1.array[0]=,A,;gl.length=1;s.origin=zSstrcpy(s.array,n*FS");1ength=3;origin='S';?s1.array[0]=,A,;S1.Iength=1;。f.origin='F';strcpy(f.array,M(E)");4.length=3:41.origin』F';41.array[0]='i";f1.Iength=1;for(m=0;m<=4;m++)/*初始化分析表*/for(n=0;n<=5;n++)。C[m][n].origin=/N';/*所有賦為空*//*填充足析表*/C[0][0]=e;C[0][3]=e;C[1][1]=g;C[1][4]=g1;C[1][5]=g1;C[2][0]=t;C[2][3]=t;C[3][1]=S1;C[3][2]=s;C[3][4]=C[3][5]=s1;C[4][0]=f1;C[4][3]=f;printf("提醒:本程序只能對由',中,'*:⑺構(gòu)成的以#結(jié)束的字符串進(jìn)行分析,\n");printf("請輸入要分析的字符串:”);do/*讀入分析串*/(seanf("%c",&ch);if((ch!Jiz)&&(ch!=,+/)&&(ch!=,*')&&(ch!='(')&&(ch!=')')&&(ch!=,#'))(printf("輸入串中有非法字符\rT);exit⑴;)B[j]=ch;j++;}while(ch!='#,);l=J;/*分析串長度7ch=B[0];/*當(dāng)前分析字符*/A[top]='#';A「++top]='E,E,進(jìn)棧*/Printf("環(huán)節(jié)\t\t分析棧\t\t剩余字符\t\t所用產(chǎn)生式\n");dox=A[top--];/*x為當(dāng)前棧頂字符*/printf("%d”,k++);Printf(H\t\t");for0=O;j<=5;j++)/*判斷是否為終結(jié)符*/if(x==v1[j])(flag=1;break;)if(flag==1)/*假如是終結(jié)符*/if(x==,#')(finish=17*結(jié)束標(biāo)記*/printf(”acc!\n");/*接受7。getchar();ggetchar():ex*1);}/*if*/if(x==ch)a。print();aprint1();。,printf("%c匹配\n",ch)

溫馨提示

  • 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

提交評論