編譯原理-C++編譯器課程設(shè)計(jì)報(bào)告.doc

編譯原理-C++編譯器課程設(shè)計(jì)報(bào)告.doc

ID:58371110

大小:167.00 KB

頁(yè)數(shù):27頁(yè)

時(shí)間:2020-04-30

編譯原理-C++編譯器課程設(shè)計(jì)報(bào)告.doc_第1頁(yè)
編譯原理-C++編譯器課程設(shè)計(jì)報(bào)告.doc_第2頁(yè)
編譯原理-C++編譯器課程設(shè)計(jì)報(bào)告.doc_第3頁(yè)
編譯原理-C++編譯器課程設(shè)計(jì)報(bào)告.doc_第4頁(yè)
編譯原理-C++編譯器課程設(shè)計(jì)報(bào)告.doc_第5頁(yè)
資源描述:

《編譯原理-C++編譯器課程設(shè)計(jì)報(bào)告.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、編譯器的設(shè)計(jì)與分析學(xué)號(hào):姓名:李博專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)__課程:編譯原理指導(dǎo)教師:閆紅實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)設(shè)計(jì)的小型編譯程序涉及到編譯前端的三個(gè)階段:詞法分析、語(yǔ)法分析和語(yǔ)義分析生成中間代碼 ((四元式),編譯程序的重點(diǎn)放在中間代碼生成階段。編譯程序的輸出結(jié)果包括詞法分析后的二元式序 列、變量名表;語(yǔ)法分析后的狀態(tài)棧分析過程顯示;語(yǔ)義分析生成中間代碼后的四元式程序。整個(gè)程序 分為三個(gè)部分:(1)詞法分析部分(2)語(yǔ)法分析、語(yǔ)義分析及四元式生成部分(3)輸出顯示部分實(shí)驗(yàn)要求:本程序僅考慮由下面產(chǎn)生式所定義的程序語(yǔ)句:S→ifBthenSelseS

2、whileBdoS

3、beginLend

4、AL→

5、S;L

6、SA→i:=EB→B∧B

7、B∨B

8、~B

9、(B)

10、Iropi

11、i其中,各個(gè)非終結(jié)符的含義是:S---語(yǔ)句L—語(yǔ)句串A—賦值句B---布爾表達(dá)式E---算術(shù)表達(dá)式各個(gè)終結(jié)符的含義:i---整型變量或常數(shù),布爾變量或常數(shù);rop---為六種關(guān)系運(yùn)算符的代表;;---起語(yǔ)句分隔作用;:=---賦值符號(hào)~--邏輯非運(yùn)算符;∧----邏輯與運(yùn)算符;∨---邏輯或運(yùn)算符;規(guī)定程序是由一條語(yǔ)句或由begin和end嵌套起來的復(fù)合語(yǔ)句組成的,并且規(guī)定的語(yǔ)句末加上#@表示程序結(jié)束。下面是符合規(guī)定的程序示例:beginA:=A+B*C;C:=A+2;whileABdoifM=NT

12、HENC:=DelsewhileA<=DdoA:=Dend#@實(shí)驗(yàn)內(nèi)容:第一部分:詞法分析一.詞法分析的功能:輸入:所給文法的源程序字符串輸出:1.二元組(單詞種別,單詞符號(hào)的屬性值)構(gòu)成的序列2.關(guān)鍵字:{(相當(dāng)于Pascal語(yǔ)言中的begin),if,else,while,}(相當(dāng)于Pascal語(yǔ)言中的end)所有的關(guān)鍵字都是小寫字母.3.運(yùn)算符:+,-,*,/,=,<,<=,==,>,>=,<>,&&,

13、

14、,!4.界符:逗號(hào),分號(hào),左圓括號(hào),右圓括號(hào),#5.常數(shù):在這里只涉及到int型常量6.其他單詞是標(biāo)識(shí)符(ID)和整形常數(shù)(NUM),通過以下正規(guī)式定義:ID=letter(le

15、tter

16、digit)*NUM=digitdigit*7.空格由空白,制表符和換行符組成,空格一般用來分隔ID,NUM,運(yùn)算符,界符和關(guān)鍵字,詞法分析階段通常會(huì)被過濾掉。二.詞法分析程序設(shè)計(jì)單詞內(nèi)部碼編碼號(hào)IfSy_if0thenSy_then1elseSy_else2whileSy_while3beginSy_begin4DoSy_do5endSy_end6andop_and39Orop_or40notop_not41+Plus34*Times36:becomes38;Semicolon8(lparent48)rparent49AccAcc-2=rop423.自動(dòng)機(jī)轉(zhuǎn)換圖三.程序?qū)崿F(xiàn)數(shù)

17、據(jù)結(jié)構(gòu):structnTab{inttc;intfc;}nTab2[200];intLabel=0;structrWords{charsp[10];intsy;};structrWordsResWords[10]={{"if",Sy_if},{"do",Sy_do},{"else",Sy_else},{"while",Sy_while},{"then",Sy_then},{"begin",Sy_begin},{"end",Sy_end},{"and",op_and},{"or",op_or},{"not",op_not}};structaa{intsy1;intpos;}buf[1000

18、],n,n1,E,sstack[100],ibuf[100],stack[1000];voidReadLine(){charch1;Pline=Line;ch1=cfile.get();while(ch1!=''){*Pline=ch1;Pline++;ch1=cfile.get();}*Pline='