




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上集美大學(xué)實(shí)驗(yàn)報告課程名稱:編譯原理班級:指導(dǎo)教師: 姓名: 實(shí)驗(yàn)項(xiàng)目編號:實(shí)驗(yàn)三學(xué)號:實(shí)驗(yàn)項(xiàng)目名稱:詞法分析器的設(shè)計實(shí)驗(yàn)成績:一、實(shí)驗(yàn)?zāi)康?通過設(shè)計編制調(diào)試一個具體的詞法分析程序,加深對詞法分析原理的理解。并掌握在對程序設(shè)計語言源程序進(jìn)行掃描過程中將其分解為各類單詞的詞法分析方法。二、實(shí)驗(yàn)內(nèi)容編寫一個詞法分析器,從輸入的源程序(編寫的語言為C語言的一個子集)中,識別出各個具有獨(dú)立意義的單詞,即基本保留字、標(biāo)識符、常數(shù)、運(yùn)算符、分隔符五大類。并依次輸出各個單詞的內(nèi)部編碼及單詞符號自身值。(遇到錯誤時可顯示“Error”,然后跳過錯誤部分繼續(xù)顯示) 三、實(shí)驗(yàn)要求 1、
2、160; 詞法分析器的功能和輸出格式詞法分析器的功能是輸入源程序,輸出單詞符號。詞法分析器的單詞符號常常表示成以下的二元式(單詞種別碼,單詞符號的屬性值)。單詞示例單詞種別碼要求保留字if、else、int、while、do每個保留字的單詞種別都單獨(dú)為一種標(biāo)識符以字母開頭且包含字母和數(shù)字的字符串標(biāo)識符作為一種常數(shù)(只識別無符號整數(shù))123、343無符號整數(shù)作為一種運(yùn)算符+、-、*、/、=、= = 、!=、> 、<、 >=、 <=每符一種,也可以每一類符號一種分隔符,、;、(、)每符一種2、上述要求僅為基本要求,可以在此基礎(chǔ)上擴(kuò)充,例如刪除注釋,增加識別單詞的類型,將標(biāo)識
3、符和常量分別插入到相應(yīng)的符號表中,增加錯誤處理等。3、編程語言不限。四、實(shí)驗(yàn)設(shè)計方案 1、數(shù)據(jù)字典本實(shí)驗(yàn)用到的數(shù)據(jù)字典如下表所示:單詞示例標(biāo)識ID保留字void、if、else、for、while、do、return、break、main、int、float、char、double、String1標(biāo)識符以字母開頭且包含字母和數(shù)字的字符串2常數(shù)(只識別無符號整數(shù))無符號整數(shù)和小數(shù)3運(yùn)算符+、-、*、/、=、> 、<、4分隔符,、;、(、)5本實(shí)驗(yàn)所使用的開發(fā)語言是C語言,在Test2類中定義了以下幾個函數(shù): 開始2.程序流程圖:讀入文件,把內(nèi)容存入string中,m=0,check=
4、ture,error=falsech是分隔符?check=false?error=ture?check=false?輸出str,標(biāo)識為標(biāo)示符check=ture輸出str,標(biāo)識為運(yùn)算符從string中讀出一個字符放入ch中結(jié)束ch是最后一個字符? Ych是運(yùn)算符? N Y Nerror=ture? N輸出str,標(biāo)識為無法識別的串check=ture,error=false Y Y N輸出str,標(biāo)識為無法識別的串check=ture,error=false Y N Y Y 輸出str,標(biāo)識為標(biāo)示符check=ture 輸出str,標(biāo)識為分隔符 N Nch是數(shù)字? NCh是字母?check=t
5、ure?check=ture? Y Y N N N打印出錯清空str,ch加到str中,check=falsech加到str中清空str,ch加到str中,check=false Y Ych加到str中ch是關(guān)鍵字?ch是數(shù)字? Y 輸出str,標(biāo)識為關(guān)鍵字,check=true N Y Nch加到str中,error=true3、實(shí)驗(yàn)程序#include<stdio.h>#include<string.h>#include<ctype.h>#include<windows.h>/判斷讀入的字符是否為字母bool isLetter(char c)
6、if(c >= 'a' && c <= 'z') | (c >= 'A' && c <= 'Z')return true;elsereturn false;/判斷讀入的字符是否為數(shù)字bool isDigit(char c)if(c >='0' && c <= '9')return true;elsereturn false;/判斷是否為關(guān)鍵字bool isKey(char *string) if(!strcmp(st
7、ring,"void") | !strcmp(string,"if")| !strcmp(string,"for")| !strcmp(string,"while") | !strcmp(string,"do")| !strcmp(string,"return")| !strcmp(string,"break")| !strcmp(string,"main")| !strcmp(string,"int")| !str
8、cmp(string,"float")| !strcmp(string,"char")| !strcmp(string,"double")| !strcmp(string,"String")return true;else return false;bool isError(char ch)if(ch = '' | ch = '$' | ch = '&' | ch = '#' | ch = '' | ch = ''
9、;)return true;elsereturn false;void main()char string500=""/存放文件中讀出來的字符串char str10=""/存放需要對比的字符串char ch,c;/ch存放文件中的單個字符(翻譯時用),c存放文件中的單個字符(從文件中提取信息時用)char filename20;/文件名int j=0;printf("請輸入文件名進(jìn)行詞法翻譯:");scanf("%s",filename);FILE *cfPtr; if(cfPtr=fopen(filename,&
10、quot;r")=NULL)printf("文件未找到!");elsewhile(!feof(cfPtr)if(isspace(c=fgetc(cfPtr)/判斷是否是字符串;elsestringj=c;/從文件中一一提取字符j+;int m = 0,k=0;/m翻譯時用,k是str數(shù)組的下標(biāo)stringj=' 'j+;bool check=true,error=false;/用于判斷標(biāo)識for(int i = 0;i < j;i+)/實(shí)現(xiàn)語法翻譯器switch (m)case 0:ch = stringi;if(ch = '+
11、9; | ch = '-' | ch = '*' | ch = '/' | ch = '='| ch = '>' | ch = '<')if(error)printf("%s,此字符無法是識別!n",str);error=false;check=true;else if(!check)printf("(2,%s)標(biāo)示符n",str);check=true;m = 4;else if(ch = ',' | ch = ''
12、; | ch = '' | ch = '' | ch = '(' | ch = ')')if(error)printf("%s此字符無法識別n",str);error=false;check=true;else if(!check)printf("(2,%s)標(biāo)示符n",str);check=true;m = 5; else if ( isDigit(ch =stringi) ) )if(check)memset(str, 0, strlen(str);/清空k=0;strk=ch;k+;m
13、 = 3;check=false; elsestrk=ch;k+;else if ( isLetter(ch = stringi) )if(check)check=false;memset(str, 0, strlen(str);k=0;strk=ch;k+;elsestrk=ch;k+;if(isKey(str)printf("(1,%s)關(guān)鍵字n",str);check=true;else if(isError(ch = stringi)if(check)memset(str, 0, strlen(str);/清空k=0;strk=ch;k+;check=false;e
14、rror=true;elsestrk=ch;k+;error=true;elsebreak;case 3:if(isLetter(ch =stringi)printf("程序有錯誤!n");strk = ch;k+;error=true;m = 0;break;if(isError(ch = stringi)printf("程序有錯誤!n");strk = ch;k+;error=true;m = 0;break;if (isDigit(ch =stringi ) )strk = ch;k+;else if(ch='.')strk=ch;k+;else printf("( 3,%s) 數(shù)字n",str);i -;m = 0;check=true;break;case 4:i-;printf("( 4 ,%c) 運(yùn)算符n"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 付費(fèi)會員活動方案
- 代發(fā)營銷活動方案
- 代表倡議活動方案
- 以往紗窗活動方案
- 儀仗兵自由活動方案
- 仲夏集體活動方案
- 企業(yè)中秋拓展活動方案
- 湖北省T8聯(lián)盟2025屆高三下學(xué)期高考考前模擬(一)數(shù)學(xué)試題
- 企業(yè)會議活動方案
- 企業(yè)公司元旦活動方案
- 公務(wù)員心理健康與自我調(diào)適
- 藏獒渡魂讀后感600字
- 獨(dú)柱墩鋼蓋梁安裝施工要點(diǎn)
- 燃?xì)夤こ炭⒐を?yàn)收備案表
- 跨文化溝通的本質(zhì)-PPT課件
- 財政一體化業(yè)務(wù)系統(tǒng)
- 北美連續(xù)油管技術(shù)的新進(jìn)展及發(fā)展趨勢李宗田
- 光電效應(yīng)測普朗克常數(shù)-實(shí)驗(yàn)報告
- 110千伏變電站工程檢測試驗(yàn)項(xiàng)目計劃
- 《鐵路貨物運(yùn)價規(guī)則》
- YD_T 3956-2021 電信網(wǎng)和互聯(lián)網(wǎng)數(shù)據(jù)安全評估規(guī)范_(高清版)
評論
0/150
提交評論