![編譯原理實驗報告_第1頁](http://file4.renrendoc.com/view/214c9bf3e165a9565282b4a3f531e0c9/214c9bf3e165a9565282b4a3f531e0c91.gif)
![編譯原理實驗報告_第2頁](http://file4.renrendoc.com/view/214c9bf3e165a9565282b4a3f531e0c9/214c9bf3e165a9565282b4a3f531e0c92.gif)
![編譯原理實驗報告_第3頁](http://file4.renrendoc.com/view/214c9bf3e165a9565282b4a3f531e0c9/214c9bf3e165a9565282b4a3f531e0c93.gif)
![編譯原理實驗報告_第4頁](http://file4.renrendoc.com/view/214c9bf3e165a9565282b4a3f531e0c9/214c9bf3e165a9565282b4a3f531e0c94.gif)
![編譯原理實驗報告_第5頁](http://file4.renrendoc.com/view/214c9bf3e165a9565282b4a3f531e0c9/214c9bf3e165a9565282b4a3f531e0c95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
編譯原理實驗報告實驗一一、實驗名稱:詞法解析器的設計二、實驗目的:1,詞法解析器可以鑒別簡單語言的單詞符號,鑒別出并輸出簡單語言的基本字.標示符.無符號整數(shù).運算符.和界符。、實驗要求:給出一個簡單語言單詞符號的種別編碼詞法解析器四、實驗原理:1、詞法解析程序的算法思想算法的基本任務是從字符串表示的源程序中鑒別出擁有獨立意義的單詞符號,其基本思想是依照掃描到單詞符號的第一個字符的種類,拼出相應的單詞符號。2、程序流程圖(1)主程序輸入要解析的語句判斷讀入字符可否為“#”調(diào)用掃描、解析程序輸出單詞符號二元組結(jié)束(2)掃描子程序Token清空Get()當前字符=?標示符常數(shù)表中查找結(jié)束Error()基本字用戶標示符輸出二元式結(jié)束3、各種單詞符號對應的種別碼單詞符號種別碼助記符內(nèi)碼值while1while-if2if-else3else-switch4switch-case5case-表記符6idid在符號表中的地址常數(shù)7numnum在常數(shù)表中的地址+8+--9--*10*-<=11relopLE<11relopLT==11relopEQ=12=-;13;-五、實驗內(nèi)容:1、實驗解析編寫程序時,先定義幾個全局變量a[]、token[](均為字符串數(shù)組),c,s(char型),i,j,k(int型),a[]用來存放輸入的字符串,token[]另一個則用來幫助鑒別單詞符號,s用來表示正在解析的字符。字符串輸入此后,逐個解析輸入字符,判斷其可否‘#’,若是表示字符串輸入解析達成,結(jié)束解析程序,若否則經(jīng)過intdigit(charc)、intletter(charc)判斷其是數(shù)字,字符還是算術(shù)符,分別為用以判斷數(shù)字或字符的情況,算術(shù)符的判斷可以在switch語句中進行,還要經(jīng)過函數(shù)intlookup(chartoken[])來判斷表記符和保留字。2
實驗詞法解析器源程序:#include<>#include<>#include<>inti,j,k;charc,s,a[20],token[20]={'0'};intletter(chars){if((s>=97)&&(s<=122))return(1);elsereturn(0);}intdigit(chars){if((s>=48)&&(s<=57))return(1);elsereturn(0);}voidget( ){s=a[i];i=i+1;}voidretract( ){i=i-1;}intlookup(chartoken[20]){if(strcmp(token,"while")==0)return(1);elseif(strcmp(token,"if")==0)return(2);elseif(strcmp(token,"else")==0)return(3);elseif(strcmp(token,"switch")==0)return(4);elseif(strcmp(token,"case")==0)return(5);elsereturn(0);}voidmain( ){printf("pleaseinputstring:\n");i=0;do{i=i+1;scanf("%c",&a[i]);}while(a[i]!='#');i=1;j=0;get( );while(s!='#'){memset(token,0,20);switch(s){case'a':case'b':case'c':case'd':case'e':case'f':case'g':case'h':case'i':case'j':case'k':case'l':case'm':case'n':case'o':case'p':case'q':case'r':case's':case't':case'u':case'v':case'w':case'x':case'y':case'z':while(letter(s)||digit(s)){token[j]=s;j=j+1;get( );}retract( );k=lookup(token);if(k==0)printf("(%d,%s)",6,token);elseprintf("(%d,-)",k);break;case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':while(digit(s)){token[j]=s;j=j+1;get( );}retract( );printf("%d,%s",7,token);break;case'+':printf("('+',NULL)");break;case'-':printf("('-',null)");break;case'*':printf("('*',null)");break;case'<':get( );if(s=='=')printf("(relop,LE)");else{retract( );printf("(relop,LT)");}break;case'=':get( );if(s=='=')printf("(relop,EQ)");else{retract( );printf("('=',null)");}break;case';':printf("(;,null)");break;case'':break;default:printf("!\n");}j=0;get( );}}六:實驗結(jié)果:實驗二一、實驗名稱:語法解析器的設計二、實驗目的:用C語言編寫對一個算術(shù)表達式實現(xiàn)語法解析的語法解析程序,并以四元式的形式輸出,以加深對語法語義解析原理的理解,掌握語法解析程序的實現(xiàn)方法和技術(shù)。三、實驗原理:1、算術(shù)表達式語法解析程序的算法思想第一經(jīng)過關(guān)系圖法構(gòu)造出終結(jié)符間的左右優(yōu)先函數(shù)f(a),g(a)。在解析的過程中,經(jīng)過左右優(yōu)先函數(shù)比較當前讀入終結(jié)符與前一個讀入終結(jié)符間的優(yōu)先關(guān)系,解析后合時的以四元式形式輸出相關(guān)的符號。2、經(jīng)過優(yōu)先函數(shù)關(guān)系圖構(gòu)造優(yōu)先函數(shù)優(yōu)先函數(shù)表+*i()f46626g35772優(yōu)先函數(shù)關(guān)系圖f+f*fif(f四、實驗內(nèi)容:
g+
g*
g
g(
g1、實驗解析本實驗所用文法是:G[E]:E->E+E|E-E|E*E|E/E|(E)E->0|1|2|3||9依照此文法編寫程序時,算術(shù)表達式的求解過程需要用到算術(shù)符號的優(yōu)先判斷,定義兩個字符串數(shù)組
optr[]
、opnd[]
用來模擬棧,存放算術(shù)符和操作數(shù)
,用
a[]
來存放表達式字符串,
在解析時還要通過函數(shù)
int?f(char?c)
和
int?g(char?c)
,判斷運算符之間的優(yōu)先關(guān)系,
依照不同樣情況作各種不同樣操作。流程圖以下:輸入算數(shù)表達式,以#結(jié)束初始化loptr[1]=’#’用get()取一個待解析字符sOptr[1]和s可否同時為判斷S可否為運算量存入opnd[]get( )其他情況errorFloptrj]<g(s)Floptr[j]=g(s)Floptr[j]>g(s)當前字符棧optr棧頂元素出棧結(jié)束2,實驗程序源代碼:#include<>chara[21],optr[10],op,s;intopnd[10],i,j,k,x1,x2,x3;intoperand(chars){if((s>=48)&&(s<=57))return1;elsereturn0;}intf(chars){switch(s){case'+':return4;break;case'*':return6;break;case'i':return6;break;case'(':return2;break;case')':return6;break;default:return0;}}intg(chars){switch(s){case'+':return3;break;case'*':return5;break;case'i':return7;break;case'(':return7;break;case')':return2;break;default:return0;}}voidget( ){s=a[i];i++;}voidmain( ){printf("請輸入表達式(以‘#’結(jié)束):\n");i=0;do{i++;scanf("%c",&a[i]);}while(a[i]!='#');i=j=k=1;optr[j]='#';get( );while(!((optr[j]=='#')&&(s=='#'))){if(operand(s)){opnd[k]=s-48;k++;get( );}elseif(f(optr[j])<g(s)){j++;optr[j]=s;get( );}elseif(f(optr[j])>g(s)){op=optr[j];j--;x1=opnd[k-1];x2=opnd[k-2];k=k-2;switch(op){case'+':x3=x1+x2;break;case'*':x3=x1*x2;break;default:break;}opnd[k]=x3;k++;printf("(%c,%d,%d,%d)\n
溫馨提示
- 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年度文化旅游產(chǎn)業(yè)股權(quán)投資與品牌運營合同
- 2025年度股東間綠色環(huán)保項目借款合同規(guī)范
- 2025年度互聯(lián)網(wǎng)數(shù)據(jù)中心設備采購與服務合同樣本
- 漯河2024年河南漯河市第三人民醫(yī)院(漯河市婦幼保健院)招聘9人筆試歷年參考題庫附帶答案詳解
- 深圳廣東深圳市第一職業(yè)技術(shù)學校招聘購買教育服務教師筆試歷年參考題庫附帶答案詳解
- 漢中2025年陜西漢中市中心醫(yī)院招聘19人筆試歷年參考題庫附帶答案詳解
- 昆明2025年云南昆明市盤龍區(qū)婦幼保健院招聘編外口腔醫(yī)師筆試歷年參考題庫附帶答案詳解
- 廣西2025年廣西安全工程職業(yè)技術(shù)學院招聘10人筆試歷年參考題庫附帶答案詳解
- 2025年縮水鋼角尺項目可行性研究報告
- 2025年皮帶傳動手控項目可行性研究報告
- 工廠主文件(新)
- 儀表基礎知識培訓.ppt課件
- 數(shù)據(jù)結(jié)構(gòu)英文教學課件:chapter2 Array
- 20以內(nèi)分成表算式x
- 井下探放水設計編制培訓PPT課件
- 數(shù)據(jù)結(jié)構(gòu)英文教學課件:chapter9 Sorting
- 營養(yǎng)學緒論(精)
- 最新ICD-9手術(shù)編碼
- 軟件項目報價方法參考模板
- 國際形式發(fā)票模板
- 陜西延長石油(集團)有限責任公司企業(yè)年金方案
評論
0/150
提交評論