![實驗四-編譯-用Yacc工具構(gòu)造語法分析器10頁_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/ecf474fe-6703-426f-b1fa-c1dc49083310/ecf474fe-6703-426f-b1fa-c1dc490833101.gif)
![實驗四-編譯-用Yacc工具構(gòu)造語法分析器10頁_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/ecf474fe-6703-426f-b1fa-c1dc49083310/ecf474fe-6703-426f-b1fa-c1dc490833102.gif)
![實驗四-編譯-用Yacc工具構(gòu)造語法分析器10頁_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/ecf474fe-6703-426f-b1fa-c1dc49083310/ecf474fe-6703-426f-b1fa-c1dc490833103.gif)
![實驗四-編譯-用Yacc工具構(gòu)造語法分析器10頁_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/ecf474fe-6703-426f-b1fa-c1dc49083310/ecf474fe-6703-426f-b1fa-c1dc490833104.gif)
![實驗四-編譯-用Yacc工具構(gòu)造語法分析器10頁_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/ecf474fe-6703-426f-b1fa-c1dc49083310/ecf474fe-6703-426f-b1fa-c1dc490833105.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗4 用Yacc工具構(gòu)造語法分析器一、實驗?zāi)康恼莆找七M(jìn)-歸約技術(shù)語法分析技術(shù),利用語法分析器生成工具Yacc/Bison實現(xiàn)語法分析器的構(gòu)造。二、實驗內(nèi)容利用語法分析器生成工具Yacc/Bison編寫一個語法分析程序,與詞法分析器結(jié)合,能夠根據(jù)語言的上下文無關(guān)文法,識別輸入的單詞序列是否文法的句子。源語言的文法定義見教材附錄 A.1,p394,要求實現(xiàn)完整的語言。三、實驗要求個人完成,提交實驗報告。實驗報告中給出采用測試源代碼片斷,及其對應(yīng)的最右推導(dǎo)過程(形式可以自行考慮,如依次給出推導(dǎo)使用的產(chǎn)生式)。例如,程序片斷四、實驗思路本次實驗是一次實現(xiàn)詞法分析和語法分析的過程,詞法分析的內(nèi)容與第二
2、次實驗類似,對關(guān)鍵詞,數(shù)字,標(biāo)識符以及其他類型的字符進(jìn)行識別,分別返回對應(yīng)的數(shù)據(jù)類型,這個過程相對來說是比較簡單的,由于有特定的詞法分析過程的格式,很容易將代碼編寫出來。語法分析的過程則給出了文法以及相應(yīng)的語義動作,代碼的編寫相對比較復(fù)雜。首先,在D:FlexBison的目錄下建立一個文件夾,我命名為expmt3,將bison.exe和flex.exe放到expmt3目錄下。然后編寫mylex.l文件和myyacc.y文件,在dos下切換到expmt3目錄下,先用命令flex mylex.l生成lex.yy.c文件,再用命令bison d myyacc.y生成myyacc.tab.c文件和my
3、yacc.tab.h文件,在這個目錄中再新建一個example.c文件,用vc+打開這個文件,然后編譯這個文件,再將前兩步生成的lex.yy.c、myyacc.tab.c和myyacc.tab.h文件加入到工程中,再編譯并連接生成可執(zhí)行文件。最后測試程序的正確性要在expmt3的debug目錄下創(chuàng)建一個測試文件test.txt,將測試片段放入其中,然后在dos界面運行程序,知道產(chǎn)生正確的結(jié)果,實驗就完成了。五、具體代碼Mylex.l%option noyywrap%#include<ctype.h>#include<string.h>#include<stdio.
4、h>#include<stdlib.h>#include "myYacc.tab.h"%delim tnws delim+letter A-Za-zdigit 0-9%ws "if" printf("IF ");return(IF);"else" printf("ELSE ");return(ELSE);"int" printf("INT "); return(BASIC);"float" printf("F
5、LOAT "); return(BASIC);"break" printf("BREAK");return(BREAK);"do" printf("DO ");return(DO);"while" printf("WHILE ");return(WHILE);"true" printf("TRUE ");return(TRUE);"index" printf("INDEX "); ret
6、urn(INDEX);"bool" printf("BOOL "); return(BASIC);"char" printf("CHAR "); return(BASIC);"real" printf("real");return(REAL);"false" printf("FLASE "); return(FALSE);a-zA-Z_a-zA-Z0-9_* printf("ID");return(ID);+-?0-
7、9+ printf("NUM");return(NUM);+-?0-9*.0-9+ printf("NUM");return(NUM);"<" printf("LT ");return('<');"<=" printf("LE ");return(LE);"=" printf("= ");return('=');"=" printf("EQ ");
8、return(EQ);"!=" printf("NE ");return(NE);">" printf("GT ");return('>');">=" printf("GE ");return(GE);"+" printf("+ ");return('+');"-" printf("- ");return('-');"&q
9、uot; printf(" ");return('');"" printf(" ");return('');"" printf("");return(''); "" printf("");return('');"(" printf("(");return('(');")" printf(")");r
10、eturn(')');"" printf("");return('');"," printf(",");return(',');"&&" printf("&&");return(AND);"|" printf("|");return(OR);%Myyacc.y%#include<ctype.h>#include<stdio.h>ext
11、ern int yylex();extern int yyerror();%token NUM%token ID %token IF WHILE DO BREAK REAL TRUE FALSE BASIC ELSE INDEX GE LE NE EQ AND OR%program : block printf("program->blockn"); ;block : '' decls stmts '' printf("block->decls stmtsn"); ;decls : | decls decl p
12、rintf("decls->decls decln"); ;decl : type ID '' printf("decl->type id;n"); ;type : type '' NUM '' printf("type->typenumn"); | BASIC printf("type->basicn"); ;stmts : | stmts stmt printf("stmts->stmts stmtn"); ;st
13、mt : matched_stmt printf("stmt->matched_stmtn"); | open_stmt printf("stmt->open_stmtn"); ;open_stmt: IF '(' booL ')' stmt printf("open_stmt->if(bool)stmtn"); | IF '(' booL ')' matched_stmt ELSE open_stmt printf("open_stmt-&g
14、t;if(bool) matched_stmt else open_stmtn"); ;matched_stmt: IF '(' booL ')' matched_stmt ELSE matched_stmt printf("matched_stmt->if(bool) matched_stmt else matched_stmtn"); | other printf("matched_stmt->othern"); ;other: loc '=' booL '' pr
15、intf("stmt->loc=bool;n"); | WHILE '(' booL ')' stmt printf("stmt->while(bool)stmtn"); | DO stmt WHILE '(' booL ')' '' printf("stmt->do stmt while(bool);n"); | BREAK '' printf("stmt->break;n"); | block
16、 printf("stmt->blockn"); ;loc : loc '' booL '' printf("loc->locbooln"); | ID printf("loc->idn"); ;booL : booL OR join printf("bool->bool|joinn"); | join printf("bool->joinn"); ;join : join AND equality printf("join
17、->join&&equalityn"); | equality printf("join->equalityn"); ;equality : equality EQ rel printf("equality->equality=reln"); | equality NE rel printf("equality->equality!=reln"); | rel printf("equality->reln"); ;rel : expr '<
18、9; expr printf("rel->expr<exprn"); | expr LE expr printf("rel->expr<=exprn"); | expr GE expr printf("rel->expr>=exprn"); | expr '>' expr printf("rel->expr>exprn"); | expr printf("rel->exprn"); ;expr : expr '+
19、' term printf("expr->expr+termn"); | expr '-' term printf("expr->expr-termn"); | term printf("expr->termn"); ;term : term '*' unary printf("term->term*unaryn"); | term '/' unary printf("term->term/unaryn");
20、| unary printf("term->unaryn"); ;unary : '!' unary printf("unary->!unaryn"); | '-' unary printf("unary->-unaryn"); | factor printf("unary->factorn"); ;factor : '(' booL ')' printf("factor->(bool)n"); | loc printf("factor->locn"); | NUM printf("factor->numn"); | REAL printf("factor->realn"); | TRUE p
溫馨提示
- 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年二手車個體交易策劃合同范本
- 2025年專利權(quán)交換協(xié)議格式
- 2025年個人信用管理協(xié)議書
- 2025年二手汽車交易未過戶合同模板
- 2025年農(nóng)資研發(fā)與實驗勞動合同
- 2025年體重管理服務(wù)協(xié)議
- 2025年企業(yè)員工住房公積金貸款合同
- 2025年上海市新能源汽車產(chǎn)業(yè)投資合作協(xié)議
- 2025年養(yǎng)殖場租賃協(xié)議正式版本
- 2025年云服務(wù)器租用合同示范
- 安全生產(chǎn)技術(shù)規(guī)范 第25部分:城鎮(zhèn)天然氣經(jīng)營企業(yè)DB50-T 867.25-2021
- 現(xiàn)代企業(yè)管理 (全套完整課件)
- 走進(jìn)本土項目化設(shè)計-讀《PBL項目化學(xué)習(xí)設(shè)計》有感
- 《網(wǎng)店運營與管理》整本書電子教案全套教學(xué)教案
- 教師信息技術(shù)能力提升培訓(xùn)課件希沃的課件
- 高端公寓住宅項目營銷策劃方案(項目定位 發(fā)展建議)
- 執(zhí)業(yè)獸醫(yī)師聘用協(xié)議(合同)書
- 第1本書出體旅程journeys out of the body精教版2003版
- [英語考試]同等學(xué)力英語新大綱全部詞匯
- 2022年肝動脈化療栓塞術(shù)(TACE)
- 形式發(fā)票格式2 INVOICE
評論
0/150
提交評論