編譯原理實(shí)驗(yàn)報(bào)告(詞法分析器語(yǔ)法分析器)_第1頁(yè)
編譯原理實(shí)驗(yàn)報(bào)告(詞法分析器語(yǔ)法分析器)_第2頁(yè)
編譯原理實(shí)驗(yàn)報(bào)告(詞法分析器語(yǔ)法分析器)_第3頁(yè)
編譯原理實(shí)驗(yàn)報(bào)告(詞法分析器語(yǔ)法分析器)_第4頁(yè)
編譯原理實(shí)驗(yàn)報(bào)告(詞法分析器語(yǔ)法分析器)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

編譯原理實(shí)驗(yàn)報(bào)告

實(shí)驗(yàn)一

一、實(shí)驗(yàn)名稱:詞法分析器的設(shè)計(jì)二、實(shí)驗(yàn)?zāi)康模?,詞法分析器能夠識(shí)別簡(jiǎn)單語(yǔ)言的單詞符號(hào)2識(shí)別出并輸出簡(jiǎn)單語(yǔ)言的基本字.標(biāo)示符.無(wú)符號(hào)整數(shù).運(yùn)算符.和界符三、實(shí)驗(yàn)要求:給出一個(gè)簡(jiǎn)單語(yǔ)言單詞符號(hào)的種別編碼詞法分析四、實(shí)驗(yàn)原理:1、詞法分析程序的算法思算法的基本任務(wù)是從字符串表示的源程序中識(shí)別出具有獨(dú)立意義的單詞符號(hào)基本思想是根據(jù)掃描到單詞符號(hào)的第一個(gè)字符的種類,拼出相應(yīng)的單詞符號(hào)2、程序流程(1)主程(2)掃描子程輸入要分析的語(yǔ)判斷讀入字符是否為#調(diào)用掃描、分析程輸出單詞符號(hào)二元結(jié)束

Token清Get當(dāng)前字符=標(biāo)示符 常數(shù) 表中查找 結(jié)束 Erro(基本字 用戶標(biāo)示符輸出二元結(jié)束3、各種單詞符號(hào)對(duì)應(yīng)的種別碼單詞符號(hào) 種別碼 助記符 內(nèi)碼值while 1 while -if 2 if -else 3 else -switch 4 switch -case 5 case -標(biāo)識(shí)符 6 id id位置常數(shù) 7 num num位置+ 8 + -

- 9 - -* 10 * -<= 11 relop LE< 11 relop LT== 11 relop EQ= 12 = -; 13 ; -五、實(shí)驗(yàn)內(nèi)容:1、實(shí)驗(yàn)分析編寫程序時(shí),先定義幾個(gè)全局變量a[token[(均為字符串?dāng)?shù)),c,s(char型(int型,a[]用來(lái)存放輸入的字符串token[另一個(gè)則用來(lái)幫助識(shí)別單詞符號(hào)s在分析的字符。字符串輸入之后,逐個(gè)分析輸入字符,判斷其是否‘#析完畢,結(jié)束分析程序,若否則通過(guò)intdigit(charc字符還是算術(shù),分別為用以判斷數(shù)字或字符的情況,算術(shù)符的判斷可以在switch還要通過(guò)函數(shù)intlookup(chartoken[]來(lái)判斷標(biāo)識(shí)符和保留字2實(shí)驗(yàn)詞法分析器源程序:#include<#include<#include<inti,j,kcharc,s,a[20],token[20]={'0'}intletter(chars) if((s>=97)&&(s<=122))return(1) elsereturn(0)}intdigit(chars)

j=0 get() while(s!='#'){memset(token,0,20) switch(s { case'a' case'b': case'c' case'd' case'e' case'f' case'g' case'h' case'i' case'j' case'k' case'l' case'm' case'n' case'o' case'p' case'q' case'r' case's' case't' case'u' case'v'

首先通過(guò)關(guān)系圖法構(gòu)造出終結(jié)符間的左右優(yōu)先函數(shù)f(a),g(a)通過(guò)左右優(yōu)先函數(shù)比較當(dāng)前讀入終結(jié)符與前一個(gè)讀入終結(jié)符間的優(yōu)先關(guān)系分析后適時(shí)的以四元式形式輸出相關(guān)的符號(hào)。2、通過(guò)優(yōu)先函數(shù)關(guān)系圖構(gòu)造優(yōu)先函數(shù)優(yōu)先函數(shù) + * i ( )f 4 6 6 2 6g 3 5 7 7 2優(yōu)先函數(shù)關(guān)系圖g+ g+ g* g g( ff* fi f( 四、實(shí)驗(yàn)內(nèi)容:1、實(shí)驗(yàn)分本實(shí)驗(yàn)所用文法是G[E]:E->E+E|E-E|E*E|E/E|(E)E->0|1|2|3|……|9根據(jù)此文法編寫程序時(shí),算術(shù)表達(dá)式的求解過(guò)程需要用到算術(shù)符號(hào)的優(yōu)先判斷,定義兩個(gè)字符串?dāng)?shù)組optr[]opnd[]用來(lái)模擬棧存放算術(shù)符和操作數(shù),用a[來(lái)存放表達(dá)式字符串過(guò)函數(shù)intf(charc)和intg(charc)判斷運(yùn)算符之間的優(yōu)先關(guān)系操作。流程圖如下:

輸入算數(shù)表達(dá)式,#初始化loptr[1]=#用get()取一個(gè)待分析字符Optr[1和s判斷S是否為運(yùn)算存入opnd[] get()其他情況error Floptrj]<g(s Floptr[j]=g(s Floptr[j]>g(s當(dāng)前字符棧optr 棧頂元素出棧結(jié)2,實(shí)驗(yàn)程序源代碼#include<chara[21],optr[10],op,s;intopnd[10],i,j,k,x1,x2,x3intoperand(chars{if((s>=48)&&(s<=57))return1elsereturn0}intf(chars

心得體會(huì):通過(guò)本次

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論