




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上裝訂線 編譯原理實驗報告 題目: C_minus語言詞法分析器 學(xué) 院 計算機(jī)科學(xué)與技術(shù) 專 業(yè) xxxxxxxxxxxxxxxx 學(xué) 號 xxxxxxxxxxxx 姓 名 xxxx 指導(dǎo)教師 xxxx 20xx年xx月xx日C_minus語言詞法分析器一、實驗?zāi)康?#160; 1.理解詞法分析器的設(shè)計方法:利用DFA編寫相應(yīng)的程序。 2.掌握手工編寫詞法分析程序的方法。 3.復(fù)習(xí)熟悉以前學(xué)過的編程語言
2、160; 4.通過實驗了解編譯器詞法分析的工作原理 二、實驗原理 1.文法的概念,DFA的表示方法。 2.詞法分析程序的輸出和輸入:詞法分析程序的功能是讀入源程序,輸出單詞符號。單詞符號是程序設(shè)計語言的比本語法符號,程序設(shè)計語言的單詞符號一般分為如下幾種:關(guān)鍵字,標(biāo)示符,常數(shù),運算符,界符,單詞的輸出是二元式的形
3、式,需要知道二元式的表示方法,把得到的二元式寫入輸出文件。 轉(zhuǎn)化圖如下: 源程序 詞法分析程序 記號文件 3.熟悉單詞的描述工具,如正規(guī)文法,正規(guī)式,以及知道正規(guī)文法和正規(guī)式的等價性以及他們之間的互相轉(zhuǎn)化。熟悉把正規(guī)文法轉(zhuǎn)化為正規(guī)式,把正規(guī)式轉(zhuǎn)化為NFA以及把NFA轉(zhuǎn)為相應(yīng)的DFA,最后再把DFA簡化,DFA的狀態(tài)轉(zhuǎn)化為相應(yīng)的子程序,最后得到詞法分析器 &
4、#160; 4.C語言的基本語法。 三、實驗要求 1、該個詞法分析器要求至少能夠識別以下幾類單詞: 關(guān)鍵字:else if int return void while共6個,所有的關(guān)鍵字都是保留字,并且必須是小寫; 標(biāo)識符:識別與C語言詞法規(guī)定相一致的標(biāo)識符,通過下列正則表達(dá)式定義:ID = letter (letter | digit)*
5、; 常數(shù):NUM = digit digit*(.digit digit* |)(e(+ | - |) digit digit* |),letter = a|.|z|A|.|Z|,digit = 0|.|9,包括整數(shù),如123等;小數(shù),如123.45等;科學(xué)計數(shù)法表示的常數(shù),如1.23e3,2.3e-9等; 專用符號:+ - * / < <= >
6、160;>= = != = , ( ) /* */; 2、分析器的輸入為由上述幾類單詞構(gòu)成的程序,輸出為該段程序的機(jī)內(nèi)表示形式,即關(guān)鍵字、運算符、界限符變?yōu)槠鋵?yīng)的機(jī)內(nèi)符,常數(shù)使用二進(jìn)制形式,標(biāo)識符使用相應(yīng)的標(biāo)識符表指針表示。 3、詞法分析器應(yīng)當(dāng)能夠指出源程序中的詞法錯誤,如不可識別的符號、錯誤的詞法等。四、實驗結(jié)果(程序)及分析 #include<stdio.h> #include&l
7、t;stdlib.h>#include<string.h> #define N 100 typedef struct char name30; int code; int addr; token;/存儲剛從文件中讀取的字符typedef struct char name30; int code; K
8、eyword; typedef struct char name30; int code; int addr;symbol; Keyword key6="else",1,"if",2,"int",3,"return",4,"void",5,"where",6; char ch;/接受字符 FILE&
9、#160;*source;/源文件 FILE *keytxt;/關(guān)鍵字輸出文件 FILE *badgetxt;/標(biāo)識符輸出文件 FILE *othertxt;/其他單詞輸出文件 FILE *number; int error_count;/錯誤的個數(shù) int addr_count;/標(biāo)識符表的指針 int lineof;/行號 token current;/ 暫時存放讀入的字符 token za
10、ncun; symbol currentsymbol; symbol symboltableN;/標(biāo)識符表void error(int i); void main() void scan(); error_count=0; addr_count=0; error_count=0; lineof=0;
11、160;scan(); void scan() int i=0; void iskeyword();/判斷關(guān)鍵字void isOthers() /判斷其他單詞 void output_1();/關(guān)鍵字輸出文件 void output_2();/標(biāo)識符輸出文件 void output_others();/其他單詞輸出文件void Iszhushi(); v
12、oid isnumber(); if(source=fopen("Source.txt","r")=NULL) /打開源文件printf("file open error/n"); exit(0); if(keytxt=fopen("key.txt","w")=NULL) /打開關(guān)鍵字文
13、件printf("file open error/n"); exit(0); if(badgetxt=fopen("badge.txt","w")=NULL) /打開標(biāo)識符文件 printf("file open error/n"); exit(0); if(othertxt
14、=fopen("others.txt","w")=NULL) printf("file open errorn"); exit(0); if(number=fopen("number.txt","w")=NULL) printf("file open errorn"
15、); exit(0); ch=fgetc(source); while(ch!=EOF) for(i=0;i<30;i+) i='0' if(ch>='a' && ch<='z'
16、;) |(ch>='A' && ch<='Z') | ch='_' ) iskeyword(); if(ch='') Iszhushi(); if(ch>='0'&
17、amp;& ch<='9') isnumber(); else isOthers(); ch=fgetc(source); fclose(source); fclose(keytxt);
18、60; fclose(badgetxt); fclose(othertxt); fclose(number); void iskeyword() int i=0,k=0,j=0; int h=0; while(ch>='a') && (ch<='z') |(ch>='A') &&
19、160;(ch<='Z') | ch='_' | (ch>'0' && ch<'9') i=ch; i+;
20、160; ch=fgetc(source); zancun=current; for(i=0;i<6;i+) for(j=0;j<30;j+) if(j=j) h=0; else
21、; h=1; break; if(h=0) break; if(h=0) current.code=keyi.code; output_1(); else &
22、#160; strcpy(symboltableaddr_,); symboltableaddr_count.code=10; symboltableaddr_count.addr=addr_count;
23、; addr_count+; output_2(); void isOthers()char ch1;int i; for(i=0;i<30;i+) i='0'
24、0; switch(ch) case '+': 0='+'
25、0; current.code=13; current.addr=-1; output_others(); &
26、#160; break; case '-': 0='-'
27、; current.code=14; current.addr=-1; output_others();
28、160; break; case '*': 0='*' current.code=15; &
29、#160; current.addr=-1; output_others(); break;
30、 case '/': 0='/' current.code=16; current.addr=-1;
31、160; output_others(); break; case'<': ch1=fgetc(source);
32、0; if(ch1='=') 0='<' 1='=' current
33、.code=17; output_others(); break; else fseek(source,-1,1); &
34、#160; 0='<' current.code=18; current.addr=-1;
35、0; output_others(); break; case'>': ch1=fgetc(so
36、urce); if(ch1='=') 0='>' 1='=' current.code=19;
37、160;output_others(); break; else fseek(source,-1,1); 0='>' current.code=20; output_others();
38、 break; case'=': ch1=fgetc(source); if(ch1='=')0='='1='='current.code=21;current.addr=-1;output_others();break;else 0='=
39、39; current.code=22; current.addr=-1; output_others(); fseek(source,-1,1);break;case '!': ch1=fgetc(source); if(ch1='=')0='!'1='='current.code=23;current.addr=-1;output_others();break;elsefseek(source,-1,1);
40、160; 0='!' current.code=24; current.addr=-1;output_others();break;case '': 0='' current.code=25; current.addr=-1; output_others(); break; case
41、',': 0=',' current.code=26; current.addr=-1; output_others(); case '(': int i=ftell(source);
42、 char ch1=ch; char ch2; while(ch!=')') ch=fgetc(source); if(ch=')') 0
43、=ch1; 1=ch; current.code=27; current.addr=-1; output_others(); fseek(source,i,0); ch2=fgetc(source); ch2=fgetc(source);
44、160; break; else error_count+; error(1); fseek(source,i,0); ch2=fgetc(source); ch2=fgetc(source); break; case '':
45、60;0='' current.code=28; current.addr=-1; output_others(); break; case '': 0='' current.code=28; current.addr=-1; output_others();
46、 break; case '': 0='' current.code=29; current.addr=-1;
47、; output_others(); break; case '': 0='' current.code=29;
48、; current.addr=-1; output_others(); break; case'10': lineof+; break; void Iszhushi() char
49、ch1; ch1=ch;ch=fgetc(source); if(ch='*') for(;) ch=fgetc(source); if(ch=EOF) error(2); break; if(ch='*') ch1=ch; ch=fgetc(source); if(ch='') ch=fgetc(source); break; &
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年事業(yè)單位和公務(wù)員招聘考試公共基礎(chǔ)知識法律常識題庫及答案(共100題)
- 2025年外研版高中英語必修第二冊Unit 5綜合檢測試卷及答案
- 2026高考生物一輪復(fù)習(xí)講義:第七單元 穩(wěn)態(tài)與調(diào)節(jié)階段排查 回扣落實(七)含答案
- 《半角的正弦、余弦和正切》參考教案1
- 2026年中考道德與法治一輪復(fù)習(xí):九年級上、下冊知識點考點背誦提綱
- 2025年體育知識競賽考試題庫及答案(共160題)
- 辦公室行政培訓(xùn)課件模板
- 2025年蘇科版八年級物理培優(yōu)練:密度(解析版)
- 銀發(fā)經(jīng)濟(jì)2025:老年旅游市場潛力挖掘與旅游產(chǎn)品創(chuàng)新研發(fā)深度報告
- 辦事處消防知識培訓(xùn)課件信息
- 2024項目投資協(xié)議書
- CJT 526-2018 軟土固化劑 標(biāo)準(zhǔn)
- JT-T-747.1-2020交通運輸信息資源目錄體系第1部分:總體框架
- DZ∕T 0173-2022 大地電磁測深法技術(shù)規(guī)程
- 中國絕經(jīng)管理與絕經(jīng)激素治療指南(2023版)解讀
- 生物藥制造工藝經(jīng)濟(jì)與成本分析
- 《電站鍋爐壓力容器檢驗規(guī)程》
- 國標(biāo)《電化學(xué)儲能系統(tǒng)儲能變流器技術(shù)要求》
- 2024年黑龍江檢察機(jī)關(guān)法院書記員招聘筆試參考題庫附帶答案詳解
- 2024年重慶酉陽縣公安局輔警招聘筆試參考題庫附帶答案詳解
- 綠化養(yǎng)護(hù)工作日記錄表
評論
0/150
提交評論