編譯原理實(shí)驗(yàn)報(bào)告-2_第1頁
編譯原理實(shí)驗(yàn)報(bào)告-2_第2頁
編譯原理實(shí)驗(yàn)報(bào)告-2_第3頁
編譯原理實(shí)驗(yàn)報(bào)告-2_第4頁
編譯原理實(shí)驗(yàn)報(bào)告-2_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

編譯原理實(shí)驗(yàn)報(bào)告姓名:***班級(jí):***學(xué)號(hào):***指導(dǎo)老師:***實(shí)驗(yàn)一編譯程序的分析與驗(yàn)證實(shí)驗(yàn)?zāi)康模菏炀氄莆誏R分析表以及編譯原理的基本過程,學(xué)會(huì)分析編譯程序。二、實(shí)驗(yàn)要求: 理論聯(lián)系實(shí)際,將所學(xué)知識(shí)用到實(shí)處。上機(jī)實(shí)驗(yàn),驗(yàn)證老師給的代碼的正確性,進(jìn)而學(xué)會(huì)怎么寫編譯程序。三、實(shí)驗(yàn)內(nèi)容:驗(yàn)證自己的文法的正確性,識(shí)別文法中的單詞、句子、關(guān)鍵字、變量,等等。驗(yàn)證下述程序輸出結(jié)果的正確性:while(a>b)dobeginifm>=nthena:=a+1elsewhilek=hdox:=x+2;m:=n+x*(m+y)end#~程序部分代碼:#include"stdio.h"#include"string.h"#defineACC-2/**************************************/#definesy_if0#definesy_then1#definesy_else2#definesy_while3#definesy_begin4#definesy_do5#definesy_end6#definea7#definesemicolon8#definee9#definejinghao10#defineS11#defineL12#definetempsy15#defineEA18#defineE019#defineplus34#definesub 35#definetimes36#definediv 37#definebecomes38#defineop_and39#defineop_or40#defineop_not41#definerop42#definelparent48#definerparent49#defineident56#defineintconst57/********************算術(shù)表達(dá)式的LR分析表********************/staticintaction1[14][9]={{-1,-1,-1,-1,2,-1,3,-1,1},{4,5,6,7,-1,-1,-1,ACC,-1},{-1,-1,-1,-1,2,-1,3,-1,8},{106,106,106,106,-1,106,-1,106,-1},{-1,-1,-1,-1,2,-1,3,-1,9},{-1,-1,-1,-1,2,-1,3,-1,10},{-1,-1,-1,-1,2,-1,3,-1,11}, {-1,-1,-1,-1,2,-1,3,-1,12},{4,5,6,7,-1,13,-1,-1,-1},{101,101,101,101,-1,101,-1,101,-1},{102,102,102,102,-1,102,-1,102,-1}, {103,103,103,103,-1,103,-1,103,-1}, {104,104,104,104,-1,104,-1,104,-1}, {105,105,105,105,105,105,105,105,-1},};/********************布爾表達(dá)式的LR分析表*********************/staticintaction2[16][11]={{1,-1,4,-1,5,-1,-1,-1,13,7,8},{-1,2,-1,101,-1,101,101,101,-1,-1,-1},{3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,102,-1,102,102,102,-1,-1,-1},{1,-1,4,-1,5,-1,-1,-1,11,7,8},{1,-1,4,-1,5,-1,-1,-1,6,7,8},{-1,-1,-1,104,-1,9,10,104,-1,-1,-1},{1,-1,4,-1,5,-1,-1,-1,14,7,8},{1,-1,4,-1,5,-1,-1,-1,15,7,8},{105,-1,105,-1,105,-1,-1,-1,-1,-1,-1},{107,-1,107,-1,107,-1,-1,-1,-1,-1,-1},{-1,-1,-1,12,-1,9,10,-1,-1,-1,-1},{-1,-1,-1,103,-1,103,103,103,-1,-1,-1},{-1,-1,-1,-1,-1,9,10,ACC,-1,-1,-1},{-1,-1,-1,106,-1,9,10,106,-1,-1,-1},{-1,-1,-1,108,-1,9,10,108,-1,-1,-1}};/********************從文件讀一行到緩沖區(qū)**********************/readline(){charch1;pline=line;ch1=fgetc(cfile);while((ch1!='\n')&&(ch1!=EOF)){*pline=ch1;pline++;ch1=fgetc(cfile);}*pline='\0';pline=line;}/***********************生成四元式**************************/gen(charop1[],structaaarg11,structaaarg22,intresult1){strcpy(fexp[nxq].op,op1);fexp[nxq].arg1.sy1=arg11.sy1;fexp[nxq].arg1.pos=arg11.pos;fexp[nxq].arg2.sy1=arg22.sy1;fexp[nxq].arg2.pos=arg22.pos;fexp[nxq].result=result1;nxq++;returnnxq-1;}運(yùn)行結(jié)果截圖:學(xué)習(xí)體會(huì):上課的時(shí)候,編譯原理有很多地方不明白,在學(xué)習(xí)完了后對(duì)各個(gè)方面的知識(shí)精華不是不了解,通過本次實(shí)驗(yàn)后,我漸漸熟悉了編譯程序的原理,對(duì)編譯程序處理過程有了更清晰的認(rèn)識(shí),程序在詞法分析,語法分析語義分析,代碼生成都有了更清楚的體會(huì),詞法分析的步驟,狀態(tài)棧加工過程的詳細(xì)內(nèi)容,以及這之中四元式的產(chǎn)生分析以及歸約的一些內(nèi)容。實(shí)驗(yàn)二算術(shù)表達(dá)式的擴(kuò)充實(shí)驗(yàn)?zāi)康模簩W(xué)會(huì)推到LR分析表,擴(kuò)充算術(shù)表達(dá)式。即:將原來的擴(kuò)展成+、-、×、/。實(shí)驗(yàn)要求:參照算術(shù)表達(dá)式LR分析表的設(shè)計(jì)方法,設(shè)計(jì)擴(kuò)充后的算術(shù)表達(dá)式LR分析表,并對(duì)原語義加工程序進(jìn)行修改,加入新添加的內(nèi)容。實(shí)驗(yàn)內(nèi)容:算術(shù)表達(dá)式文法擴(kuò)充如下:E—>E+E|E-E|E*E|E/E|(E)|i試根據(jù)該文法添加單詞“-”、“/”的內(nèi)部定義以及重新設(shè)計(jì)LR分析表,并修改語義加工程序,最后驗(yàn)證修改的結(jié)果。四、程序修改部分代碼:#include"stdio.h"#include"string.h"#defineACC-2/**************************************/#definesy_if0#definesy_then1#definesy_else2#definesy_while3#definesy_begin4#definesy_do5#definesy_end6#definea7#definesemicolon8#definee9#definejinghao10#defineS11#defineL12#definetempsy15#defineEA18#defineE019#defineplus34#defineminus 35//增加的#definetimes36#definediv 37//增加的#definebecomes38#defineop_and39#defineop_or40#defineop_not41#definerop42//#definesy_for 43//addfor#definelparent48#definerparent49#defineident56#defineintconst57/********************************************//********************算術(shù)表達(dá)式的LR分析表********************/staticintaction1[14][9]=//修改3{{3,-1,-1,-1,-1,2,-1,-1,1},{-1,4,5,6,7,-1,-1,ACC,-1},{3,-1,-1,-1,-1,2,-1,-1,8},{-1,106,106,106,106,-1,106,106,-1},{3,-1,-1,-1,-1,2,-1,-1,9},{3,-1,-1,-1,-1,2,-1,-1,10},{3,-1,-1,-1,-1,2,-1,-1,11},{3,-1,-1,-1,-1,2,-1,-1,12},{-1,4,5,6,7,-1,13,-1,-1},{-1,101,101,6,7,-1,101,101,-1},{-1,102,102,6,7,-1,102,102,-1},{-1,103,103,103,103,-1,103,103,-1},{-1,104,104,104,104,-1,104,104,-1},{-1,105,105,105,105,-1,105,105,-1}};case'+': buf[count].sy1=plus; count++; break; case'-': //增加的 buf[count].sy1=minus; count++; break; case'*': buf[count].sy1=times; count++; break; case'/'://增加的 buf[count].sy1=div; count++; break; case':': readch(); if(ch=='=') buf[count].sy1=becomes; count++; break; case'=': buf[count].sy1=rop; buf[count].pos=5; count++; break; case';': buf[count].sy1=semicolon; count++; break;change1(intchan)//{ switch(chan) { caseident: caseintconst:return0; caseplus:return1; caseminus:return2;//added casetimes:return3; casediv:return4;//added caselparent:return5; caserparent:return6; casejinghao:return7; casetempsy:return8; }}switch(lr1) { case100:break; //S'-->E case101:E.pos=newtemp(); //E->E+E gen("+",sstack[ssp-2],sstack[ssp],E.pos+100); ssp=ssp-2; sstack[ssp].sy1=tempsy; sstack[ssp].pos=E.pos; sp1=sp1-3; break; case102:E.pos=newtemp();//E->E-E gen("-",sstack[ssp-2],sstack[ssp],E.pos+100); ssp=ssp-2; sstack[ssp].sy1=tempsy; sstack[ssp].pos=E.pos; sp1=sp1-3; break; case103:E.pos=newtemp();//E->E*E gen("*",sstack[ssp-2],sstack[ssp],E.pos+100); ssp=ssp-2; sstack[ssp].sy1=tempsy; sstack[ssp].pos=E.pos; sp1=sp1-3; break; case104:E.pos=newtemp();//E->E/E gen("/",sstack[ssp-2],sstack[ssp],E.pos+10

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論