




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、編譯原理綜合性實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)學(xué)期 2016 至 2017 學(xué)年 第學(xué)期專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí) 1403學(xué)生姓名 黃世增 學(xué)號(hào) 1411640305任課教師趙嘎實(shí)驗(yàn)成績(jī)16編譯原理課程綜合性實(shí)驗(yàn)報(bào)告開課實(shí)驗(yàn)室:C2102016年 12月 6日實(shí)驗(yàn)題目詞法分析器的設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康耐ㄟ^設(shè)計(jì)、編制、調(diào)試一個(gè)具體的詞法分析程序,實(shí)現(xiàn)對(duì)高級(jí)程序設(shè)計(jì)語言源 程序進(jìn)行掃描,并將其分解為各種單詞的詞法分析方法;加深對(duì)課堂教學(xué)的理解;提高詞法分析方法的實(shí)踐能力。二、實(shí)驗(yàn)要求任選一種高級(jí)程序設(shè)計(jì)語言編程完成詞法分析器。詞法分析器應(yīng)以教材所述 分詞原理為依據(jù),使用恰當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)和方法,結(jié)構(gòu)清晰、高效。編制一個(gè)讀單詞過
2、程,源程序保存在文本文件中(也可鍵盤輸入),讀取該文 件,識(shí)別出各個(gè)具有獨(dú)立意義的單詞,即關(guān)鍵字、標(biāo)識(shí)符、常數(shù)、運(yùn)算符、分界符 五大類。依次輸出各個(gè)單詞的內(nèi)部單詞種別及單詞符號(hào)自身值,遇到錯(cuò)誤時(shí)可顯示“Eorror”,然后跳過錯(cuò)誤部分繼續(xù)顯示。二、實(shí)驗(yàn)設(shè)備與環(huán)境1 .硬件:PC機(jī) Pentium100 以上。2 .軟件:Win10, VS2010三、實(shí)驗(yàn)內(nèi)容1 .正規(guī)文法< 關(guān)鍵字 >-> int |for| while | do | return | break | continue< 運(yùn)算符和界符 >-> |+ | - | * | /1=| < |
3、 <= |!= | > | >= | , | ; | ( | ) | |市識(shí)符 >-> letter (letter | digit)*< 整型常數(shù) >-> digit digit*2 .算法思想算法的基本任務(wù)是從字符串表示的源程序中識(shí)別出具有獨(dú)立意義的單詞符號(hào), 其基本思想是根據(jù)掃描到單詞符號(hào)的第一個(gè)字符的種類,拼接出相應(yīng)的單詞符號(hào)。2.1 主程序圖1詞法分析主程序示意圖其中初始包括關(guān)鍵字、運(yùn)算符、界限符的置初值。2.2 掃描子程序的算法思想:在詞法分析中,先以只讀方式讀取一個(gè)文件,自文件頭開始掃描文本,濾去開頭的空格、回車符、換行符等。讀取的
4、字符送入word。掃描第一個(gè)字符,看匹配的類型,并進(jìn)行相應(yīng)的類型分析,滿足判斷類型時(shí),輸出其種別碼和值。四、實(shí)驗(yàn)步驟編寫程序時(shí),先定義幾個(gè)全局變量,key口事先存放7個(gè)關(guān)鍵字,words口用 來存放識(shí)別出來的單詞二元組,text用來存放從文件讀取的內(nèi)容,word用于存放 識(shí)別出來的單詞,length存放字符個(gè)數(shù),k存放識(shí)別出來的單詞個(gè)數(shù)。首先,將文本內(nèi)容讀取到text中,文本內(nèi)容最后一個(gè)字符是空白符,然后調(diào) 用scan方法,逐個(gè)掃描每個(gè)字符,如果 word的第一個(gè)字符是字母,則進(jìn)行拼字 符串,再判斷是關(guān)鍵字還是標(biāo)識(shí)符;如果 word的第一個(gè)字符是數(shù)字,則在 word 清空之前判斷是否有識(shí)別出非
5、數(shù)字字符,若有,則出錯(cuò),若沒有,則識(shí)別出來的 字符串是常數(shù);若word第一個(gè)字符是運(yùn)算符或界限符,則各自存到 words口中。最后掃描結(jié)束后輸出 五、實(shí)驗(yàn)結(jié)果及分析IMTT7 JTTnZS KA4 . f_*.JIIVY L-.r LtTTm n o = o Jr<lz- hl Q nb » 3 - 1 - b = 3 + 2 - a + 1 E5.1,¥用2"2,鴛&5?2?露2?鴛3?工2?4,工53工 h"*-* -1 1a六、實(shí)驗(yàn)小結(jié)和思考通過這次實(shí)驗(yàn),我對(duì)詞法分析器有了進(jìn)一步的了解,而且對(duì)詞法分析和語法 分析在實(shí)踐中的應(yīng)用有了深入
6、的掌握,讓我對(duì)高級(jí)語言的學(xué)習(xí)有了更深的認(rèn)識(shí) 了解得更透徹。七、源程序清單#includ e<stdio.h>#includ e<stdlib.h>#includ e<string> using namespace std;#define MAX 10000struct WordString string Word; / 單詞 int category; / 類別 ;char *key7 = "int" ,"for" , "while" , "do", "return&q
7、uot; , "break" , "continue" ;/ 關(guān)鍵字 WordString wordsMAX;/創(chuàng)建一個(gè)單詞符號(hào)串string text;/讀入的文本存入text中string word;分割出的單詞用 word表示int length;/字符個(gè)數(shù)int k;/總單詞個(gè)數(shù)void scan() int i,j;k=0;word=""for(i=0;i<=length-1;i+) if (word!= "")if(word0>= 'A)&&(word0<= &
8、#39;Z')|(word0>= 'a')&&(word0<= 'z') 首字符是字母 if(texti>= 'A')&&(texti<= 'Z')|(texti>= 'a')&&(texti<= 'z')|(texti>=48)&&(texti <=57) word+=texti; else wordsk.Word=word; for(j=0;j<7;j+) if(word
9、sk.Word=keyj) wordsk.category=1; /break;)else if(j=6) wordsk.category=2; /表土標(biāo)識(shí)符 ) k+;word="" i-;)elseif(word0= ','|word0= ''|word0= ''|word0= ''|word0= '('|word0= ')')/首字符是界限符wordsk.Word=word;wordsk.category=5; / 表示界限符k+;word=""i-;e
10、lseif(word0= '+'|word0= '-' |word0= '*'|word0= '/' |word0= '=' |word0= '>' | word0= '<' |word0= '!')/首字符是運(yùn)算符 if(texti= '=') word+=texti;wordsk.Word=word;wordsk.category=4; / 表示運(yùn)算符 k+;word="" else wordsk.Word=word
11、;wordsk.category=4; / 表示運(yùn)算符 k+;word="" i-; else if(word0>=48&&word0<=57)/ 首字符是數(shù)字if(texti>=48&&texti<=57) word+=texti;else if(texti>= A'&&texti<= 'Z')|(texti>= 'a'&&texti<= 'z') word+=texti;wordsk.category=6
12、; /表示出錯(cuò),標(biāo)識(shí)符以數(shù)字開頭 else wordsk.Word=word;if (wordsk.category!=6)wordsk.category=3; / 表示常數(shù) k+;word=""; i-;elseif(texti!=10&&texti!=32&&texti!=9)word+=texti; int main() FILE *fp;/文件指針fp=fopen( "text.txt" ,"r");/ 打開文件if(fp=NULL) printf( "Can't open t
13、his fil e!n"); exit(0); int i=0; while (!feof(fp)/判斷是否到文件結(jié)尾 text+=fgetc(fp); i+;length=i; /text最后一個(gè)字符是空字符fclose(fp);/ 關(guān)閉文件scan();for(i=0;i<k;i+)/ 輸出 if (wordsi.category=6)printf( "%s Eorrorn" ,wordsi.Word.c_str(); elseprintf( "(%d, %s)n" ,wordsi.category,wordsi.Word.c_str
14、(); getchar();return 0;開課實(shí)驗(yàn)室:C2102016年 12月 8日實(shí)驗(yàn)題目語法分析 LL(1)語法分析方法的實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康耐ㄟ^設(shè)計(jì)、開發(fā)一個(gè)高級(jí)語言的LL (1)語法分析程序,實(shí)現(xiàn)對(duì)源程序的語法 檢查和結(jié)構(gòu)分析,加深對(duì)相關(guān)課堂教學(xué)內(nèi)容(包括自頂向下語法分析、First集、Follow集、Select集、判斷LL (1)文法的方法、文法等價(jià)變換、LL分析表的構(gòu) 造、對(duì)某一輸入用的分析過程的理解,提高語法分析方法的實(shí)踐能力。、實(shí)驗(yàn)要求消除直接左遞歸前的文法G E: E- E+TE-TT - T*FT-FF -(E)|i消除直接左遞歸后的等價(jià)文法G' E E- TE
15、'E' 一+TE' | £T - FT'T' 一*FT' | £F -(E)|i根據(jù)文法建立LL(1)分析表,并對(duì)輸入用i+i*i進(jìn)行語法分析,判斷其是否是合 法的句子,給出句子的分析過程。具體要求如下:1、理解語法分析在編譯程序中的作用;2、理解LL(1)語法分析方法對(duì)文法的要求(必須是LL(1)文法);3、理解LL(1)分析器模型;4、熟練掌握文法變換方法(消除直接左遞歸和提取左公共因子)。5、熟練掌握Select集合的求解方法和LL(1)分析表的構(gòu)造方法; 二、實(shí)驗(yàn)設(shè)備與環(huán)境1.硬件:PC機(jī) Pentium100 以上。
16、2,軟件:Win10, VS2010三、實(shí)驗(yàn)內(nèi)容給定一個(gè)上下文無關(guān)文法 G,在LL(1)語法分析方法中,必須先求出Select集 通過Select集判斷是否是LL(1)文法,若是,則構(gòu)造預(yù)測(cè)分析表。求出預(yù)測(cè)分析表 之后,鍵盤輸入一個(gè)字符串,依據(jù)LL(1)分析表單步輸出字符串的分析過程。四、實(shí)驗(yàn)步驟五、實(shí)驗(yàn)結(jié)果及分析所用產(chǎn)生式DTE 卜沂F->i丁->藝E' ->+TE'I-/FT'F->iT'沖FT'垢第 f P,1J -L- LU. + l*+,d_ 1 / 1 ! 士口4L - lz吊s.E £->->如
17、成* i i+1+11*"£i # #Fir T r T T TrTTTTTTT HyE eeeeeeeebefefef #"# 4 #*#A-鬟亭D 0 12 3 4 5 6 r 1 £ E5 8 7 CO O 二-1 -二 -:iI5§e-sKu a nq 二 hi zer qU es ktu埠n 14U3 -141 "I黃世魯-L1后去:君析口 ebu q_L I 由-均忻,e«£六、頭驗(yàn)小結(jié)和思考本實(shí)驗(yàn)加深了我對(duì)LL(1)分析法的算法和思想的理解。七、源程序清單#include <string.h&g
18、t;#include <stdio.h>#include <stdlib.h>#include <conio.h>/*1:E->TE' 2:E'->+TE' 3:E'->£ ? 4:T->FT' 5T->*FT 6:T'->7:F->(E) 8:F->i*/int ll156=1,0,0,1,0,0,0,2,0,0,3,3,4,0,0,4,0,0,0,6,5,0,6,6,8,0,0,7,0,0;/ 表示 LL(1)分析表內(nèi)容int main()char
19、ch10='#','E' ;/用于存放符號(hào)棧內(nèi)容char str10;/存放輸入出char str110;/用于存放最初輸入的字符串char cha;/分析字符int i,j,m,n;/j :終結(jié)符所代表數(shù)字;m:非終結(jié)符所代表數(shù)字;n :產(chǎn)生式右部大小intl=1;/符號(hào)棧大小intk=1;/分析輸入用的第幾個(gè)字符inthow;/利用哪個(gè)產(chǎn)生式intstep=1;/步驟intlength=0;printf("請(qǐng)輸入一用字符串,以#結(jié)尾:");doscanf( "%c” ,&cha);strlength=cha;str1le
20、ngth=cha;length+; while (cha!= '#');printf("步驟t符號(hào)棧tt 輸入用tt 所用產(chǎn)生式n"); docha=str1k-1;printf( "%dt" ,step);for (i=0;i<=l;i+)printf( "%c" ,chi);/ 輸出符號(hào)棧printf( "tt");for (i=k-1;i<length;i+)printf( "%c" ,stri);printf( "tt");switch (
21、cha) case 'i' j=0; break ; case '+': j=1; break ; case '*' j=2; break ; case '(' j=3; break ; case ')' j=4; break ; case '#': j=5; break ; defult: j=-1; break ; if(j!=-1)/正確的字符if (chl!=cha) if (chl!=39) switch (chl) case 'E': m=0;break ; case &
22、#39;T': m=2;break ; case 'F': m=4;break ; default m=-1; break ; else switch (chl-1) case 'E': m=1;break ; case 'T': m=3;break ; default : m=-1; break ; if (m!=-1) if (chl!=cha) how=ll1mj; if (how=1) printf( "E->TE'n"); n=3;l=l+n-1; chl= 'T' chl-1=
23、39; chl-2='E'step=step+1;else if (how=2)printf( "E'->+TE'n");n=4;l=l+n-2;chl= '+'chl-1='T'chl-2=39;chl-3='E'step=step+1;else if (how=3)printf( "E'-> £ ?n");l=l-2;step=step+1;else if (how=4)printf( "T->FT'n");n=3;l=l+n-1;chl= 'F'chl
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中醫(yī)情志療法與病情護(hù)理
- 參戰(zhàn)企業(yè)現(xiàn)場(chǎng)活動(dòng)管理
- 教育學(xué)中的美育探索
- 中國(guó)石油安全培訓(xùn)
- 深度清潔培訓(xùn)課件
- 怎樣做腦梗死護(hù)理
- 專業(yè)國(guó)家培訓(xùn)總結(jié)
- 養(yǎng)生館店面培訓(xùn)課件
- 汽車電工電路培訓(xùn)課件
- 研究性課題研究報(bào)告高中生社會(huì)實(shí)踐
- 教科版四年級(jí)下冊(cè)科學(xué)期末測(cè)試卷含完整答案(各地真題)
- 硬核贏創(chuàng)新智慧樹知到期末考試答案2024年
- 小班語言《誰的救生圈》課件
- 海思芯片PC-測(cè)試技術(shù)規(guī)范
- 內(nèi)陸?zhàn)B殖與水生植物種植
- 集體協(xié)商培訓(xùn)課件
- Unit 3 What would you like A Let's learn(教學(xué)設(shè)計(jì))人教PEP版英語五年級(jí)上冊(cè)
- 物業(yè)社區(qū)團(tuán)購(gòu)方案
- 仙家送錢表文-文字打印版
- 實(shí)驗(yàn)室規(guī)劃裝修設(shè)計(jì)
- 2023年麻城市社區(qū)工作者招聘考試真題
評(píng)論
0/150
提交評(píng)論