版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
本文格式為Word版,下載可任意編輯——編譯原理四則表達式試驗1、前序
這是編譯原理的試驗,自認為是上大學以來做過的最難的一個試驗。所以寫篇博客記錄一下。
試驗用到的基礎知識:C語言、數(shù)據(jù)結(jié)構(gòu)、匯編(只需簡單的了解)。開發(fā)工具:VC
2、問題描述
編譯整數(shù)四則運算表達式,將整數(shù)四則運算表達式翻譯為匯編語言代碼。消除左遞歸后的文法: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ù))的定義*******************/
//輸入的表達式最大長度,可以看做是緩沖區(qū)的長度#defineMAX_EXPRESSION_LENGTH50
//存放輸入的表達式
charexpression[MAX_EXPRESSION_LENGTH];
//表達式字符數(shù)組的下標intexpression_index=0;
//存放一個單詞符號
charstrToken[MAX_EXPRESSION_LENGTH/2];
//判斷是否是數(shù)字
intisNum(char*strToken){
inti=0;
while(strToken[i]){}
returnstrToken[i]==0;
2
if(!isdigit(strToken[i]))i++;
break;
}
//錯誤處理程序
voiderror(char*errerMessage){
printf(\exit(0);
}
/*************************以上是全局變量(函數(shù))的定義******************/#endif
4、詞法分析
詞法分析的要求是:接受一個表達式,輸出該表達式中的各類單詞符號
一般有兩種方法來進行詞法分析,一種是用狀態(tài)圖來實現(xiàn),一種是用狀態(tài)轉(zhuǎn)換表。下面采用狀態(tài)圖實現(xiàn)
首先定義單詞符號的種類和所屬類型
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)圖進行詞法分析以及測試詞法分析***/
#include\
//枚舉類型
typedefenumSymbol{ERR=-1,END,NUM,PLUS,MINUS,TIMES,SLASH,LPAREN,RPAREN}Symbol;
//獲取一個單詞符號,該單詞符號存放在strToken中。返回該單詞符號的枚舉類型
SymbolgetToken();
//根據(jù)傳入的枚舉類型輸出對應的單詞符號voidprintToken(Symboli);
//測試詞法分析
voidtestLexAnalyse();
//獲取一個單詞符號,該單詞符號存放在strToken中。返回該單詞符號的枚舉類型
SymbolgetToken(){
charch;
intstate=0;//每次都是從狀態(tài)0開始intj=0;
//表達式遍歷完成,單詞符號為'#'
if(expression[expression_index]=='\\0'){
strToken[0]='#';strToken[1]='\\0';
returnEND;
4
}
while(1){
switch(state){
case0:
//讀取一個字符
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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024裝修工程保修服務合同版B版
- 二零二五年度出租車企業(yè)車輛GPS定位服務合同2篇
- 專屬2024委托招標項目管理協(xié)議樣式
- 2024年05月北京2024屆中國民生銀行資產(chǎn)管理部畢業(yè)生“未來銀行家”暑期管培生校園招考筆試歷年參考題庫附帶答案詳解
- 2025年度房地產(chǎn)開發(fā)項目承包商資金保障擔保合同3篇
- 2025年度拆遷安置補償合同模板(含房屋買賣)4篇
- 2025年度廠房用電安全改造安裝合同范本4篇
- 2025年度城市地下綜合管廊建設場地平整與施工合同4篇
- 2025年度茶園場地承包合同范本-茶樹種植基地合作經(jīng)營4篇
- 2024年04月江蘇交通銀行信用卡中心蘇州分中心校園招考筆試歷年參考題庫附帶答案詳解
- 2024人教新版七年級上冊英語單詞英譯漢默寫表
- 《向心力》參考課件4
- 2024至2030年中國膨潤土行業(yè)投資戰(zhàn)略分析及發(fā)展前景研究報告
- 【地理】地圖的選擇和應用(分層練) 2024-2025學年七年級地理上冊同步備課系列(人教版)
- 2024年深圳中考數(shù)學真題及答案
- 土方轉(zhuǎn)運合同協(xié)議書
- Module 3 Unit 1 Point to the door(教學設計)-2024-2025學年外研版(三起)英語三年級上冊
- 智能交通信號燈安裝合同樣本
- 安全生產(chǎn)法律法規(guī)清單(2024年5月版)
- 江蘇省連云港市2023-2024學年八年級下學期期末道德與法治試卷(含答案解析)
- 2024年大學試題(宗教學)-佛教文化筆試考試歷年高頻考點試題摘選含答案
評論
0/150
提交評論