版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
大學(xué)學(xué)院實(shí)驗(yàn)報(bào)告學(xué)號:姓名:專業(yè):班級:第周課程名稱?編譯原理課程設(shè)計(jì)實(shí)驗(yàn)課時(shí)實(shí)驗(yàn)項(xiàng)目基于YACC勺語法解析器實(shí)驗(yàn)時(shí)間實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)環(huán)境
1.學(xué)習(xí)基于YACC勺語法解析器的構(gòu)造方法。2.學(xué)習(xí)C-的語法構(gòu)造。?ParserGeneratorVC++基于YACC勾造詞法解析器的方法1YACC文件格式Lex文件分成三個(gè)部分,分別為definitions、rules以及auxiliaryroutines,中間用%切割開。實(shí)驗(yàn)內(nèi)容(算法、程序、步驟和方法)
Definitions包括要加入到生成的C程序的頭部的代碼,包括#include語句、#define語句及一些全局變量的定義。token也在Definitions部分定義,YACC?定,必定自己定義token,他將token定義為一系列從258開始的正整數(shù),如在Definition部分加入了以下定義:%tokenNUMBER則]在生成的C代碼中:#defineNUMBE。自然這個(gè)值也能夠由用戶定義。Definitions中同時(shí)還定義了YACC中的返回值種類,由于rules部分是由固疋符號來代替一個(gè)Symbol的返回值,其默認(rèn)種類為int,若是用戶布望返回其他種類的值(如ParseTree樹結(jié)點(diǎn)),則能夠在Definition中定義Symbol的返回值。第一使用一(%union{}包括所有需要的返回值種類,疋義%type<t>{}其中包括所有返回值為t的Symbol。Definitions中能夠定義語法的結(jié)合性來除掉二義性,包括兩個(gè)符號%left表示左結(jié)合和%right表示右結(jié)合。rules部分定義所有語法,以及語法鑒別出后執(zhí)行的操作。比方:declaration:var_declaration{$$=$1;}|fun_declaration{$$=$1;}J表示產(chǎn)生式左邊,$n表示產(chǎn)生式右邊第n個(gè)字符的返回值,這條規(guī)則表示var_declaration或fun_declaration鑒別出后,將其賦值給declaration。Auxiliary部分包括rules部分使用的一些輔助函數(shù),同時(shí),main函數(shù)也在其中定義。YACC中會自動(dòng)調(diào)用yylex()獲取token,默認(rèn)yylex()返回int,代表鑒別出的token,若是文件結(jié)束返回0。因此一般會進(jìn)行以下定義:staticTypeyylex(void){returngetToken();}Type就是int,特地代表token值。Auxiliary部分還可以夠定義YACC勺出錯(cuò)辦理函數(shù),yyerror(char*s),其中s是YAC(在遇到錯(cuò)誤時(shí)產(chǎn)生的錯(cuò)誤信息。YACC勺入口函數(shù)為:yyparse(),調(diào)用這個(gè)函數(shù)即開始語法解析過程。數(shù)據(jù)構(gòu)造我們需要再YACC中構(gòu)造ParseTree,必定定義樹結(jié)點(diǎn),觀察C-的語法,我們能夠?qū)⒄Z法分為三類:Declaration:包括函數(shù)與變量的聲明。Statement:包括各種語句,如循環(huán)語句,選擇語句等。Expression:包括各種表達(dá)式及各種變量、常量。我們也將節(jié)點(diǎn)種類分為Dec、Stmt、Exp。節(jié)點(diǎn)種類定義以下:typedefstructtreeNode{果有NUM則立刻用一個(gè)變量暫存,由于后邊的鑒別會把TokenValue覆蓋掉。女口:
type_specifieridLBRACKETNUM{/*
記錄
NUM*/currentNum=atoi(tokenString);}RBRACKETSEMICOLON若是有ID,與NU同理,用立刻一個(gè)字符串暫存。3.若是產(chǎn)生式右邊有節(jié)余一個(gè)的右邊的Symbo作為他的兒子,若是有字,則不需建立結(jié)點(diǎn),直接賦值給結(jié)點(diǎn)中明)。如:
Symbol,則必定為$$建立結(jié)點(diǎn),并將ID、NUMtype_specfier,和要點(diǎn)的變量或忽略(結(jié)點(diǎn)種類自動(dòng)說iteration_stmt:WHILELPARENTHESISexpressionRPARENTHESISstatement{$$=newStmtNode(WhileK);$$->child[0]=$3;$$->child[1]=$5;}4.若是右邊僅有一個(gè)Symbol,若是為Token,則返回Token值,若是為Nonterminal,直接$$=$1。如:statement:expression_stmt{$$=$1;}5.若是有左遞歸,則一致用下面代碼辦理,注意,左遞歸的結(jié)點(diǎn)儲藏在sibling中而不是child中。tatement_list:statement_liststatement{TreeNode*t=$1;if(t!=NULL){while(t->sibling!=NULL)t=t->sibling;t->sibling=$2;$$=$1;}else$$=$2;}|{$$=NULL;}YACC是由yylex()供應(yīng)Token,因此需要編寫getToken()函數(shù),使用lex或手工實(shí)現(xiàn)均可,但需注意,其返回的Token值必定是YACC中定義的int,也就是說,不能夠在別處定義TokenTypeo在main函數(shù)中調(diào)用yyparse()即可進(jìn)行編譯。實(shí)驗(yàn)源程序以下:數(shù)據(jù)記錄和計(jì)算
/*aprogramtoperformselectionsortona10elementarray.*/intx[10];intminioc(inta[],intlow,inthigh){inti;intx;intk;k=low;x=a[low];i=low+1;while(i<high){if(a[i]<x){x=a[i];k=i;}}returnk;}生成的ParseTree以下所示:|__Arrname:x,type:INT|__Numbertype:INT,value:10|__FunDecname:minioc,return:INT|__ArrParamname:a,type:INT|__ValParamname:low,type:INT|__ValParamname:high,type:INT|__Comp結(jié)論(結(jié)果)
|__Varname:i,type:INT|__Varname:x,type:INT|__Varname:k,type:INT|__Assign|__VarIdname:k|__VarIdname:low|__Assign|__VarIdname:x|__ArrIdname:low|__VarIdname:low|__Assign|__VarIdname:i|__Expressiontype:+|__VarIdname:low|__Numbertype:INT,value:1|__While|__Expressiontype:<|__VarIdname:i都被記錄在結(jié)點(diǎn)中。經(jīng)過本實(shí)驗(yàn),我熟悉了C-的語法規(guī)則,學(xué)習(xí)了ParseTree的構(gòu)造方法。2.學(xué)習(xí)了經(jīng)過
YACC
勾造語法解析器的方法,認(rèn)識了
YACC
勺三個(gè)部分:declarations
、rules
、auxiliary
的聲明、實(shí)現(xià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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國電阻率儀市場發(fā)展分析及市場趨勢與投資方向研究報(bào)告2024-2029版
- 中國超導(dǎo)材料行業(yè)深度調(diào)研及投資前景預(yù)測研究報(bào)告2024-2029版
- 信息通信設(shè)備市場投資前景分析及供需格局研究預(yù)測報(bào)告2024-2029版
- 暖氣機(jī)市場前景分析及投資策略與風(fēng)險(xiǎn)管理研究報(bào)告2024-2029版
- 2024年年暖通合作協(xié)議書
- 2024年創(chuàng)客中心合作協(xié)議書
- 壓力容器設(shè)備安裝施工方案
- 《2024年 信息披露質(zhì)量與股權(quán)融資成本》范文
- 《2024年 IP電影文化傳播的發(fā)展策略》范文
- 器材租約樣本
- 外研社八年級英語M1-M2單元測試卷(共8頁)
- 人教版四年級數(shù)學(xué)上冊《第6單元第5課時(shí) 練習(xí)課(商是一位數(shù)除數(shù)接近整十?dāng)?shù)的筆算除法)》教學(xué)設(shè)計(jì)
- (完整版)綜合工時(shí)及特殊工時(shí)申請會議紀(jì)要
- 交通運(yùn)輸行政執(zhí)法人員培訓(xùn)考試題庫
- 《幼兒心理學(xué)》——第一章-幼兒心理學(xué)概述
- 衛(wèi)生部消毒技術(shù)規(guī)范
- SF_T 0111-2021 法醫(yī)臨床檢驗(yàn)規(guī)范_(高清版)
- 室內(nèi)裝飾裝修材料木家具中有害物質(zhì)限量GB18584-2001
- 新人教版九年級數(shù)學(xué)上冊:《公式法》表格式教案
- 哈爾濱工程大學(xué)本碩博學(xué)位論文latex模板
- 人教版小學(xué)數(shù)學(xué)“數(shù)與代數(shù)”教材梳理
評論
0/150
提交評論