版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、編譯原理課內(nèi)實驗報告學院 計算機學院專業(yè)計算機科學與技術(shù)年級班別2012級6班學號3112006028學生姓名曾主賜輔導教師劉添添成績2014年12月一.完成內(nèi)容1 .擴充單詞:(1)保留字:for,step, until,char,real,return雙字符:*=,/=;(3)單字符:,*,/ ;2 .擴充語句:var a;begina:=1;doa:=a+1while a<5;write(a);end.二.設計思路1 .擴充單詞1)修改變量定義:void init()int i;for(i=0;i<=255;i+)ssymi=nul;ssym'+'=plus;
2、ssym'-'=minus;ssym'*'=times;ssym'/'=slash;ssym'('=lparen;ssym')'=rparen;ssym'='=eql;ssym','=comma;ssym'.'=period;ssym'#'=neq;ssym''=semicolon;ssym''=l1;ssym''=r1;/*設置保留字名字,按照字母順序便于折半查找*/strcpy(&(word0
3、0),"begin");strcpy(&(word10),"call");strcpy(&(word20),"char");strcpy(&(word30),"const");strcpy(&(word40),"do");strcpy(&(word50),"end");strcpy(&(word60),"for");strcpy(&(word70),"if");strcpy(&am
4、p;(word80),"odd");strcpy(&(word90),"procedure");strcpy(&(word100),"read");strcpy(&(word110),"real");strcpy(&(word120),"return");strcpy(&(word130),"step");strcpy(&(word140),"then");strcpy(&(word150),&quo
5、t;until");strcpy(&(word160),"var");strcpy(&(word170),"while");strcpy(&(word180),"write");/*設置保留字符號*/wsym0=beginsym;wsym1=callsym;wsym2=charsym;wsym3=constsym;wsym4=dosym;wsym5=endsym;wsym6=forsym;wsym7=ifsym;wsym8=oddsym;wsym9=procsym;wsym10=readsym;wsy
6、m11=realsym;wsym12=returnsym;wsym13=stepsym;wsym14=thensym;wsym15=untilsym;wsym16=varsym;wsym17=whilesym;wsym18=writesym;修改pl0.h頭文件里定義的全局數(shù)據(jù)# define norw 19# define txmax 100# define nmax 14# define al 10# define amax 2047# define levmax 3# define cxmax 200*/*關(guān)鍵字個數(shù)*/*名字表容量*/*number的最大位數(shù)*/*符號的最大長度*/*地
7、址上界*/*最大允許過程嵌套聲明層數(shù)0, lexmax*/*最多的虛擬機代碼數(shù)*/*符號*/ enum symbolnul,ident,number,plus,minus, times,slash,oddsym,eql,neq,lss,leq,gtr,geq, lparen,rparen, comma, semicolon,period, becomes, beginsym,endsym,ifsym,thensym,whilesym, writesym,readsym,dosym,callsym,constsym, varsym,procsym,forsym,stepsym,untilsym,
8、 charsym,realsym,returnsym,p,q,l1,r1;#define symnum 42 /*2)修改GetSym()方法:/*詞法分析,獲取一個符號*/int getsym() int i,j,k;while( ch=' '|ch=1011ch=9) getchdo;)if(ch>='a'&&ch<='z')(k=0;doif(k<al)ak=ch;k+;)getchdo;while(ch>='a'&&ch<='z'|ch>=
9、'0'&&ch<='9');ak=0;strcpy(id,a);i=0;j=norw-1;dok=(i+j)/2;if(strcmp(id,wordk)<=0)j=k-1;if(strcmp(id,wordk)>=0)i=k+1;while(i<=j);if(i-1>j)sym=wsymk;printf("保留字 n");elsesym=ident;printf("標識符 n");elseif(ch>='0'&&ch<='9&
10、#39;)k=0;num=0;sym=number;donum=10*num+ch-'0'k+;getchdo;while(ch>='0'&&ch<='9'); /* 獲取數(shù)字的值 */ k-;if(k>nmax)error(30);elseif(ch=':')/*檢測賦值符號*/getchdo;if(ch='=')sym=becomes;printf("kn");getchdo; else sym=nul;printf("n");/*不能識
11、別的符號*/elseif(ch='*')/*xiugai*/getchdo; if(ch='=') sym=p; printf("*=n"); getchdo; else sym=times; printf("*n"); getchdo;elseif(ch='/') getchdo; if(ch='=') sym=q;printf("/=n"); getchdo; else sym=slash; printf("八n");getchdo;elseif(
12、ch='<,)/*檢測小于或小于等于符號*/getchdo;if(ch='=')sym=leq;printf("<=n");getchdo;elsesym=lss;printf("<n");elseif(ch='>')/*檢測大于或大于等于符號*/getchdo;if(ch='=')sym=geq;printf(">=n");getchdo;elsesym=gtr;printf(">n"); else sym=ssymch;
13、/*當符號不滿足上述條件時,全部按照單 字符號處理*/printf("單字符 n");/getchdo;/richardif(sym!=period) getchdo;/end richardreturn 0;2 .擴充語句1)產(chǎn)生式以及語法描述圖:產(chǎn)生式:a:=1 do a:=a+1 while a<5語法描述圖:a:=1a:=a+1whilea<52)遞歸下降子程序:if(sym=dosym)getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum);nxtlevwhilesym=true;statementdo(fsy
14、s,ptx,lev);if(sym=whilesym) getsymdo; conditiondo(nxtlev,ptx,lev); else error(18);3)舉例設計語句的pcode代碼:var a;begina:=1;doa:=a+1while a<5;write(a);end.1 int 0 42 int 0 13 sto 0 34 lod 0 35 lit 0 16 opr 0 27 sto 0 38 lod 0 39 lit 0 510 opr 0 1011 jpc 0 1312 jmp 0 413 lod 0 314 opr 0 1415 opr 0 1516 opr
15、 0 04)在遞歸下降子程序中增加語義動作:if(sym=dosym) cx1=cx;getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum); nxtlevwhilesym=true;statementdo(fsys,ptx,lev); if(sym=whilesym) getsymdo;conditiondo(nxtlev,ptx,lev);cx2=cx;gendo(jpc,0,0);gendo(jmp,0,cx1); codecx2.a=cx; else error(18);三.運行測試1.擴充單詞的測試(貼運行結(jié)果截圖)ps:測試情況要全!圖片大
16、小合適!截圖如下所示:Input pl/0 file ?11.pl0 List object code ?<Y/N)y List symbol table ? <Y/N)y 0 begin保留字TABLE: NULL2 step保留字XXXX f192 until保留字2 char保留字2 real保留字return保留字2 *=單字符 單字符2 end.單字符.int 0 3! opr 0 0in pl/0 progpan iess any key to continue2.語句的測試(貼運行結(jié)果截圖) 截圖如下所示:Input pl/0 file ?22-pl0 List object code ?<¥/N>y List symbol table ?0 vai* a ;住留字fel1 begin保留字TABLE: 1 u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能交通系統(tǒng)保密管理與服務合同
- 二零二五年度科技型中小企業(yè)貸款合同
- 2025年度知識產(chǎn)權(quán)授權(quán)委托書簽訂協(xié)議
- 2025年度門面出租合同終止與租賃合同終止后合同解除及違約賠償協(xié)議
- 2025年度銀行存款賬戶遠程開戶服務協(xié)議
- 2025年度私人房產(chǎn)使用權(quán)轉(zhuǎn)讓與智能家居系統(tǒng)安裝合同
- 二零二五年度農(nóng)業(yè)科技園區(qū)用地租賃合同
- 二零二五年度酒店員工福利與社會保障聘用合同
- 2025年度電動自行車租賃與品牌授權(quán)合作協(xié)議
- 二零二五年車庫購置與產(chǎn)權(quán)登記服務一體化合同樣本3篇
- 2024年全國體育專業(yè)單獨招生考試數(shù)學試卷試題真題(含答案)
- 北師大版小學三年級上冊數(shù)學第五單元《周長》測試卷(含答案)
- DB45T 1950-2019 對葉百部生產(chǎn)技術(shù)規(guī)程
- 2025屆河北省衡水市衡水中學高考仿真模擬英語試卷含解析
- 新修訂《保密法》知識考試題及答案
- 電工基礎(chǔ)知識培訓課程
- 住宅樓安全性檢測鑒定方案
- 廣東省潮州市潮安區(qū)2023-2024學年五年級上學期期末考試數(shù)學試題
- 市政道路及設施零星養(yǎng)護服務技術(shù)方案(技術(shù)標)
- 《論語》學而篇-第一課件
- 《寫美食有方法》課件
評論
0/150
提交評論