




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、編譯原理綜合性實驗報告實驗學期 2016 至 2017 學年 第學期專業(yè)計算機科學與技術班級 1403學生姓名 黃世增 學號 1411640305任課教師趙嘎實驗成績16編譯原理課程綜合性實驗報告開課實驗室:C2102016年 12月 6日實驗題目詞法分析器的設計一、實驗目的通過設計、編制、調試一個具體的詞法分析程序,實現對高級程序設計語言源 程序進行掃描,并將其分解為各種單詞的詞法分析方法;加深對課堂教學的理解;提高詞法分析方法的實踐能力。二、實驗要求任選一種高級程序設計語言編程完成詞法分析器。詞法分析器應以教材所述 分詞原理為依據,使用恰當的數據結構和方法,結構清晰、高效。編制一個讀單詞過
2、程,源程序保存在文本文件中(也可鍵盤輸入),讀取該文 件,識別出各個具有獨立意義的單詞,即關鍵字、標識符、常數、運算符、分界符 五大類。依次輸出各個單詞的內部單詞種別及單詞符號自身值,遇到錯誤時可顯示“Eorror”,然后跳過錯誤部分繼續(xù)顯示。二、實驗設備與環(huán)境1 .硬件:PC機 Pentium100 以上。2 .軟件:Win10, VS2010三、實驗內容1 .正規(guī)文法< 關鍵字 >-> int |for| while | do | return | break | continue< 運算符和界符 >-> |+ | - | * | /1=| < |
3、 <= |!= | > | >= | , | ; | ( | ) | |市識符 >-> letter (letter | digit)*< 整型常數 >-> digit digit*2 .算法思想算法的基本任務是從字符串表示的源程序中識別出具有獨立意義的單詞符號, 其基本思想是根據掃描到單詞符號的第一個字符的種類,拼接出相應的單詞符號。2.1 主程序圖1詞法分析主程序示意圖其中初始包括關鍵字、運算符、界限符的置初值。2.2 掃描子程序的算法思想:在詞法分析中,先以只讀方式讀取一個文件,自文件頭開始掃描文本,濾去開頭的空格、回車符、換行符等。讀取的
4、字符送入word。掃描第一個字符,看匹配的類型,并進行相應的類型分析,滿足判斷類型時,輸出其種別碼和值。四、實驗步驟編寫程序時,先定義幾個全局變量,key口事先存放7個關鍵字,words口用 來存放識別出來的單詞二元組,text用來存放從文件讀取的內容,word用于存放 識別出來的單詞,length存放字符個數,k存放識別出來的單詞個數。首先,將文本內容讀取到text中,文本內容最后一個字符是空白符,然后調 用scan方法,逐個掃描每個字符,如果 word的第一個字符是字母,則進行拼字 符串,再判斷是關鍵字還是標識符;如果 word的第一個字符是數字,則在 word 清空之前判斷是否有識別出非
5、數字字符,若有,則出錯,若沒有,則識別出來的 字符串是常數;若word第一個字符是運算符或界限符,則各自存到 words口中。最后掃描結束后輸出 五、實驗結果及分析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六、實驗小結和思考通過這次實驗,我對詞法分析器有了進一步的了解,而且對詞法分析和語法 分析在實踐中的應用有了深入
6、的掌握,讓我對高級語言的學習有了更深的認識 了解得更透徹。七、源程序清單#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" ;/ 關鍵字 WordString wordsMAX;/創(chuàng)建一個單詞符號串string text;/讀入的文本存入text中string word;分割出的單詞用 word表示int length;/字符個數int k;/總單詞個數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; /表土標識符 ) 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= '!')/首字符是運算符 if(texti= '=') word+=texti;wordsk.Word=word;wordsk.category=4; / 表示運算符 k+;word="" else wordsk.Word=word
11、;wordsk.category=4; / 表示運算符 k+;word="" i-; else if(word0>=48&&word0<=57)/ 首字符是數字if(texti>=48&&texti<=57) word+=texti;else if(texti>= A'&&texti<= 'Z')|(texti>= 'a'&&texti<= 'z') word+=texti;wordsk.category=6
12、; /表示出錯,標識符以數字開頭 else wordsk.Word=word;if (wordsk.category!=6)wordsk.category=3; / 表示常數 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)/判斷是否到文件結尾 text+=fgetc(fp); i+;length=i; /text最后一個字符是空字符fclose(fp);/ 關閉文件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;開課實驗室:C2102016年 12月 8日實驗題目語法分析 LL(1)語法分析方法的實現一、實驗目的通過設計、開發(fā)一個高級語言的LL (1)語法分析程序,實現對源程序的語法 檢查和結構分析,加深對相關課堂教學內容(包括自頂向下語法分析、First集、Follow集、Select集、判斷LL (1)文法的方法、文法等價變換、LL分析表的構 造、對某一輸入用的分析過程的理解,提高語法分析方法的實踐能力。、實驗要求消除直接左遞歸前的文法G E: E- E+TE-TT - T*FT-FF -(E)|i消除直接左遞歸后的等價文法G' E E- TE
15、'E' 一+TE' | £T - FT'T' 一*FT' | £F -(E)|i根據文法建立LL(1)分析表,并對輸入用i+i*i進行語法分析,判斷其是否是合 法的句子,給出句子的分析過程。具體要求如下:1、理解語法分析在編譯程序中的作用;2、理解LL(1)語法分析方法對文法的要求(必須是LL(1)文法);3、理解LL(1)分析器模型;4、熟練掌握文法變換方法(消除直接左遞歸和提取左公共因子)。5、熟練掌握Select集合的求解方法和LL(1)分析表的構造方法; 二、實驗設備與環(huán)境1.硬件:PC機 Pentium100 以上。
16、2,軟件:Win10, VS2010三、實驗內容給定一個上下文無關文法 G,在LL(1)語法分析方法中,必須先求出Select集 通過Select集判斷是否是LL(1)文法,若是,則構造預測分析表。求出預測分析表 之后,鍵盤輸入一個字符串,依據LL(1)分析表單步輸出字符串的分析過程。四、實驗步驟五、實驗結果及分析所用產生式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«£六、頭驗小結和思考本實驗加深了我對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)分析表內容int main()char
19、ch10='#','E' ;/用于存放符號棧內容char str10;/存放輸入出char str110;/用于存放最初輸入的字符串char cha;/分析字符int i,j,m,n;/j :終結符所代表數字;m:非終結符所代表數字;n :產生式右部大小intl=1;/符號棧大小intk=1;/分析輸入用的第幾個字符inthow;/利用哪個產生式intstep=1;/步驟intlength=0;printf("請輸入一用字符串,以#結尾:");doscanf( "%c” ,&cha);strlength=cha;str1le
20、ngth=cha;length+; while (cha!= '#');printf("步驟t符號棧tt 輸入用tt 所用產生式n"); docha=str1k-1;printf( "%dt" ,step);for (i=0;i<=l;i+)printf( "%c" ,chi);/ 輸出符號棧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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣西中國舞培訓教程課件
- 2025年福建客運從業(yè)資格證考試模擬題
- 東風本田培訓課件
- 領導培訓課件名稱
- 內控手冊培訓課件
- ERP精彩培訓課件
- 防錯驗證培訓課件資源
- 大型商場保潔培訓課件
- 校園之星答辯題目及答案
- 小學政治題目及答案
- 超級抗原問題
- 23J916-1 住宅排氣道(一)
- 中鐵員工勞動合同范本
- 生物基復合材料的LCA(生命周期評估)
- 三位數乘一位數豎式
- 外墻保溫吊籃施工方案
- DB43-T 2142-2021學校食堂建設與食品安全管理規(guī)范
- 體外診斷試劑盒線性范圍研究線性區(qū)間評價資料及可報告區(qū)間建立
- AQ 1097-2014 井工煤礦安全設施設計編制導則(正式版)
- 嬰幼兒配方乳粉市場銷售管理規(guī)范
- 小班語言《誰的救生圈》課件
評論
0/150
提交評論