




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)硬件實(shí)驗(yàn)室實(shí)驗(yàn)報(bào)告姓名學(xué)號班 級成 績 設(shè)備名稱及軟件環(huán)境LL(1)一、實(shí)驗(yàn)?zāi)康模?根據(jù)某一文法編制調(diào)試LL(1)分析程序,以便對任意輸入的符號串進(jìn)行分析。本次實(shí)驗(yàn)的目的主要是加深對預(yù)測分析LL(1)分析法的理解。二、實(shí)驗(yàn)要求:對下列文法,用LL(1)分析法對任意輸入的符號串進(jìn)行分析: (1)E->TG(2)G->+TG|TG(3)G->(4)T->FS(5)S->*FS|/FS(6)S->(7)F->(E)(8)F->i輸出的格式如下:(1)LL(1)分析程序,編制人:姓名,學(xué)號,班級(2)輸入一以#結(jié)束的符號串(包括+*/()i#):在
2、此位置輸入符號串 (3)輸出過程如下: 步驟分析棧剩余輸入串 所用產(chǎn)生式 1Ei+i*i#E->TG(4)輸入符號串為非法符號串(或者為合法符號串)備注:(1)在“所用產(chǎn)生式”一列中如果對應(yīng)有推導(dǎo)則寫出所用產(chǎn)生式;如果為匹配終結(jié)符則寫明匹配的終結(jié)符;如分析異常出錯則寫為“分析出錯”;若成功結(jié)束則寫為“分析成功”。(2) 在此位置輸入符號串為用戶自行輸入的符號串。(3)上述描述的輸出過程只是其中一部分的。 注意:1.表達(dá)式中允許使用運(yùn)算符(+-*/)、分割符(括號)、字符i,結(jié)束符#; 2.如果遇到錯誤的表達(dá)式,應(yīng)輸出錯誤提示信息(該信息越詳細(xì)越好);三、實(shí)驗(yàn)過程:1.模塊設(shè)計(jì)
3、:將程序分成合理的多個模塊(函數(shù)),每個模塊做具體的同一事情。2.寫出(畫出)設(shè)計(jì)方案:模塊關(guān)系簡圖、流程圖、全局變量、函數(shù)接口等。3.程序編寫(1)定義部分:定義常量、變量、數(shù)據(jù)結(jié)構(gòu)。(2)初始化:設(shè)立LL(1)分析表、初始化變量空間(包括堆棧、結(jié)構(gòu)體、數(shù)組、臨時(shí)變量等);(3)控制部分:從鍵盤輸入一個表達(dá)式符號串;(4)利用LL(1)分析算法進(jìn)行表達(dá)式處理:根據(jù)LL(1)分析表對表達(dá)式符號串進(jìn)行堆棧(或其他)操作,輸出分析結(jié)果,如果遇到錯誤則顯示錯誤信息。四、實(shí)驗(yàn)結(jié)果:(1)寫出程序流程圖(2)給出運(yùn)行結(jié)果示例程序:注意:本示例只要修改分析的句子即可,不要改寫文法/*LL(1)分析法源程序
4、,只能在VC+中運(yùn)行 */#include<stdio.h>#include<stdlib.h>#include<string.h>#include<dos.h>char A20;/*分析棧*/char B20;/*剩余串*/char v120='i','+','-','*','/','(',')','#'/*終結(jié)符 */char v220='E','G','T','
5、;S','F'/*非終結(jié)符 */int j=0,b=0,top=0,l;/*L為輸入串長度 */typedef struct type/*產(chǎn)生式類型定義 */char origin;/*大寫字符 */char array5;/*產(chǎn)生式右邊字符 */int length;/*字符個數(shù) */type;type e,t,g,g1,g2,s,s2,s1,f,f1;/*結(jié)構(gòu)體變量 */type C1010;/*預(yù)測分析表 */void print()/*輸出分析棧 */int a;/*指針*/for(a=0;a<=top+1;a+)printf("%c"
6、,Aa);printf("tt");/*print*/void print1()/*輸出剩余串*/int j;for(j=0;j<b;j+)/*輸出對齊符*/printf(" ");for(j=b;j<=l;j+)printf("%c",Bj);printf("ttt");/*print1*/void main()int m,n,k=0,flag=0,finish=0;char ch,x;type cha;/*用來接受Cmn*/*把文法產(chǎn)生式賦值結(jié)構(gòu)體*/e.origin='E'strc
7、py(e.array,"TG");e.length=2;t.origin='T'strcpy(t.array,"FS");t.length=2;g.origin='G'strcpy(g.array,"+TG");g.length=3;g1.origin='G'strcpy(g1.array,"-TG");g1.length=3;g2.origin='G'g2.array0=''g2.length=1;/ s.origin='S&
8、#39;strcpy(s.array,"*FS");s.length=3;s1.origin='S'strcpy(s1.array,"/FS");s1.length=3;s2.origin='S's2.array0=''s2.length=1;/f.origin='F'strcpy(f.array,"(E)");f.length=3;f1.origin='F'f1.array0='i'f1.length=1;for(m=0;m<=4;
9、m+)/*初始化分析表*/for(n=0;n<=5;n+)Cmn.origin='N'/*全部賦為空*/ /*填充分析表*/char v120='i','+','-','*','/','(',')','#'/*終結(jié)符 */char v220='E','G','T','S','F'/*非終結(jié)符 */ C00=e;C05=e; C11=g;C12=g1;C13=C14=C
10、17=g2; C20=t;C23=t;C25=t; C31=C32=s2;C33=s;C34=s1;C36=C37=s2; C40=f1; C45=f; printf("LL(1)分析程序,編制人:武普泉,20號,1020562班n"); printf("輸入一以#結(jié)束的符號串(包括+ - * / () i #):"); do/*讀入分析串*/ scanf("%c",&ch); if (ch!='i') &&(ch!='+') &&(ch!='-'
11、)&&(ch!='*')&&(ch!='/')&&(ch!='(')&&(ch!=')')&&(ch!='#') printf("輸入串中有非法字符n"); exit(1); Bj=ch; j+; while(ch!='#'); l=j;/*分析串長度*/ ch=B0;/*當(dāng)前分析字符*/ Atop='#' A+top='E'/*'#','E
12、39;進(jìn)棧*/ printf("步驟tt分析棧 tt剩余字符 tt所用產(chǎn)生式 n"); do x=Atop-;/*x為當(dāng)前棧頂字符*/ printf("%d",k+); printf("tt"); for(j=0;j<=7;j+)/*判斷是否為終結(jié)符*/ if(x=v1j) flag=1; break; if(flag=1)/*如果是終結(jié)符*/ if(x='#') finish=1;/*結(jié)束標(biāo)記*/ printf("acc!n");/*接受 */ getchar(); getchar(); e
13、xit(1); /*if*/ if(x=ch) print(); print1(); printf("%c匹配n",ch); ch=B+b;/*下一個輸入字符*/ flag=0;/*恢復(fù)標(biāo)記*/ /*if*/ else/*出錯處理*/ print(); print1(); printf("%c出錯n",ch);/*輸出出錯終結(jié)符*/ exit(1); /*else*/ /*if*/ else/*非終結(jié)符處理*/ for(j=0;j<=4;j+)if(x=v2j)m=j;/*行號*/break; for(j=0;j<=7;j+)if(ch=v1j)n=j;/*列號*/break; cha=Cmn; if(cha.origin!='N')/*判斷是否為空*/ print();print1();printf("%c->",cha.origin);/*輸出產(chǎn)生式*/for(j=0;j<cha.length;j+) printf("%c",cha.arrayj);printf("n");
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出租垂釣大棚合同范本
- 鄉(xiāng)鎮(zhèn)家具采購合同范本
- 可以合伙人合同范本
- 別墅腳手架合同范本
- 醫(yī)院食堂ppp合同范本
- 會議汽車租賃合同范本
- 個人草魚養(yǎng)殖合同范本
- 項(xiàng)目代理協(xié)議
- 會計(jì)臨時(shí)合同范本
- 勞動力合同范本
- 人工智能對輿情管理的價(jià)值
- 地理-河南省部分重點(diǎn)高中九師聯(lián)盟2024-2025學(xué)年高三下學(xué)期2月開學(xué)考試試題和答案
- 老年護(hù)理相關(guān)法律法規(guī)
- 《陶瓷工藝技術(shù)》課件
- 變更強(qiáng)制措施的申請書
- 供電所安全演講
- 供應(yīng)鏈韌性提升與風(fēng)險(xiǎn)防范-深度研究
- 化工原理完整(天大版)課件
- 《淞滬會戰(zhàn)》課件
- 《智能制造技術(shù)基礎(chǔ)》課件-第4章 加工過程的智能監(jiān)測與控制
- 罪犯正常死亡報(bào)告范文
評論
0/150
提交評論