版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——編譯原理四則表達(dá)式試驗(yàn)1、前序
這是編譯原理的試驗(yàn),自認(rèn)為是上大學(xué)以來做過的最難的一個(gè)試驗(yàn)。所以寫篇博客記錄一下。
試驗(yàn)用到的基礎(chǔ)知識(shí):C語言、數(shù)據(jù)結(jié)構(gòu)、匯編(只需簡(jiǎn)單的了解)。開發(fā)工具:VC
2、問題描述
編譯整數(shù)四則運(yùn)算表達(dá)式,將整數(shù)四則運(yùn)算表達(dá)式翻譯為匯編語言代碼。消除左遞歸后的文法:E→TE'E'→+TE'|εT→FT'T'→*FT'|ε
F→(E)|i
消除左遞歸后的翻譯模式:E::=T{E'.i:=T.nptr}E'{E.nptr:=E'.s}
E'::=+T{E'1.i:=mknode(‘+’,E'.i,T.nptr)}E'1{E'.s:=E1.s}
E'::=-T{E'1.i:=mknode(‘-’,E'.i,T.nptr)}E'1{E'.s:=E1.s}
E'::=ε{E'.s:=E'.i}T::=F{T'.i:=F.nptr}T'{T.nptr:=T'.s}
T'::=*F{T'1.i:=mknode(‘*’,T'.i,F.nptr)}T'1{T'.s:=T1.s}
T'::=/F{T'1.i:=mknode(‘/’,T'.i,F.nptr)}T'1{T'.s:=T1.s}T'::=ε{T'.s:=T'.i}F::=(E){F.nptr:=E.nptr}
F::=num{F.nptr:=mkleaf(num,num.val)}
3、全局定義
test.c文件
#ifndefTEST_C#defineTEST_C/**
*全局變量和全局函數(shù)文件**/
#include#include#include#include
/*************************以下是全局變量(函數(shù))的定義*******************/
//輸入的表達(dá)式最大長(zhǎng)度,可以看做是緩沖區(qū)的長(zhǎng)度#defineMAX_EXPRESSION_LENGTH50
//存放輸入的表達(dá)式
charexpression[MAX_EXPRESSION_LENGTH];
//表達(dá)式字符數(shù)組的下標(biāo)intexpression_index=0;
//存放一個(gè)單詞符號(hào)
charstrToken[MAX_EXPRESSION_LENGTH/2];
//判斷是否是數(shù)字
intisNum(char*strToken){
inti=0;
while(strToken[i]){}
returnstrToken[i]==0;
2
if(!isdigit(strToken[i]))i++;
break;
}
//錯(cuò)誤處理程序
voiderror(char*errerMessage){
printf(\exit(0);
}
/*************************以上是全局變量(函數(shù))的定義******************/#endif
4、詞法分析
詞法分析的要求是:接受一個(gè)表達(dá)式,輸出該表達(dá)式中的各類單詞符號(hào)
一般有兩種方法來進(jìn)行詞法分析,一種是用狀態(tài)圖來實(shí)現(xiàn),一種是用狀態(tài)轉(zhuǎn)換表。下面采用狀態(tài)圖實(shí)現(xiàn)
首先定義單詞符號(hào)的種類和所屬類型
typedefenumSymbol{ERR=-1,END,NUM,PLUS,MINUS,TIMES,SLASH,LPAREN,RPAREN}Symbol;
然后轉(zhuǎn)態(tài)轉(zhuǎn)換圖如下所示:
3
test1.c文件用代碼表示如下:
#ifndefTEST1_C#defineTEST1_C/**
*采用狀態(tài)圖進(jìn)行詞法分析以及測(cè)試詞法分析***/
#include\
//枚舉類型
typedefenumSymbol{ERR=-1,END,NUM,PLUS,MINUS,TIMES,SLASH,LPAREN,RPAREN}Symbol;
//獲取一個(gè)單詞符號(hào),該單詞符號(hào)存放在strToken中。返回該單詞符號(hào)的枚舉類型
SymbolgetToken();
//根據(jù)傳入的枚舉類型輸出對(duì)應(yīng)的單詞符號(hào)voidprintToken(Symboli);
//測(cè)試詞法分析
voidtestLexAnalyse();
//獲取一個(gè)單詞符號(hào),該單詞符號(hào)存放在strToken中。返回該單詞符號(hào)的枚舉類型
SymbolgetToken(){
charch;
intstate=0;//每次都是從狀態(tài)0開始intj=0;
//表達(dá)式遍歷完成,單詞符號(hào)為'#'
if(expression[expression_index]=='\\0'){
strToken[0]='#';strToken[1]='\\0';
returnEND;
4
}
while(1){
switch(state){
case0:
//讀取一個(gè)字符
ch=strToken[j++]=expression[expression_index++];
if(isspace(ch)){j--;//注意退格}
elseif(isdigit(ch))state=1;elseif(ch=='+')elsebreak;
returnERR;state=2;state=3;state=4;state=5;state=6;state=7;
elseif(ch=='-')
elseif(ch=='*')elseif(ch=='/')elseif(ch=='(')elseif(ch==')')
state=0;
case1:
ch=strToken[j++]=exp
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024深圳租賃合同租賃物租賃條件規(guī)范文本3篇
- 二零二五年度機(jī)械設(shè)備出口業(yè)務(wù)購(gòu)銷合同規(guī)范4篇
- 2025年度UPS主機(jī)模塊化設(shè)計(jì)與快速部署服務(wù)合同3篇
- 2025年度城市配送中心冷鏈餐飲產(chǎn)品合作協(xié)議3篇
- 2024年銷售合同醫(yī)療器械銷售代理協(xié)議
- 2025年度物業(yè)管理員工加班費(fèi)計(jì)算與支付方式合同3篇
- 2024洗車店新能源汽車充電設(shè)施維護(hù)與升級(jí)合同3篇
- 2024年高端裝備制造基地建設(shè)與運(yùn)營(yíng)協(xié)議
- 2025年度環(huán)保型工業(yè)機(jī)器人采購(gòu)與租賃合同3篇
- 2024年研學(xué)旅行安全保障與風(fēng)險(xiǎn)防控合同3篇
- 學(xué)前兒童發(fā)展心理學(xué)(高職)全套教學(xué)課件
- 2023年手機(jī)維修行業(yè)分析報(bào)告及未來五至十年行業(yè)發(fā)展報(bào)告
- 【SPD】醫(yī)院器械耗材SPD管理技術(shù)方案
- 未成年人保護(hù)法ppt
- GB/T 24804-2023提高在用電梯安全性的規(guī)范
- 中國(guó)各省省會(huì)-地級(jí)市-縣級(jí)市明細(xì)表-
- 變曲率雙向可調(diào)收縫式翻升模板施工工法
- 2023年中國(guó)社會(huì)科學(xué)院外國(guó)文學(xué)研究所專業(yè)技術(shù)人員招聘3人(共500題含答案解析)筆試歷年難、易錯(cuò)考點(diǎn)試題含答案附詳解
- 2023年廣東石油化工學(xué)院公開招聘部分新機(jī)制合同工20名高頻考點(diǎn)題庫(共500題含答案解析)模擬練習(xí)試卷
- 一種基于STM32的智能門鎖系統(tǒng)的設(shè)計(jì)
- 貨車安全隱患排查表
評(píng)論
0/150
提交評(píng)論