![編譯原理詞法分析源代碼_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/27/72ff301e-4d7e-4c90-8d03-ae63fc095bd8/72ff301e-4d7e-4c90-8d03-ae63fc095bd81.gif)
![編譯原理詞法分析源代碼_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/27/72ff301e-4d7e-4c90-8d03-ae63fc095bd8/72ff301e-4d7e-4c90-8d03-ae63fc095bd82.gif)
![編譯原理詞法分析源代碼_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/27/72ff301e-4d7e-4c90-8d03-ae63fc095bd8/72ff301e-4d7e-4c90-8d03-ae63fc095bd83.gif)
![編譯原理詞法分析源代碼_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/27/72ff301e-4d7e-4c90-8d03-ae63fc095bd8/72ff301e-4d7e-4c90-8d03-ae63fc095bd84.gif)
![編譯原理詞法分析源代碼_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/27/72ff301e-4d7e-4c90-8d03-ae63fc095bd8/72ff301e-4d7e-4c90-8d03-ae63fc095bd85.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上一. 實(shí)驗(yàn)?zāi)康? 深入理解有限自動(dòng)機(jī)及其應(yīng)用2 掌握根據(jù)語(yǔ)言的詞法規(guī)則構(gòu)造識(shí)別其單詞的有限自動(dòng)機(jī)的方法3基本掌握詞法分析程序的開發(fā)。二. 實(shí)驗(yàn)內(nèi)容及要求1、 詞法分析器的功能和輸出格式詞法分析器的功能是輸入源程序,輸出單詞符號(hào)。詞法分析器的單詞符號(hào)常常表示成以下的二元式(單詞種別碼,單詞符號(hào)的屬性值)。本實(shí)驗(yàn)中,采用的是一類符號(hào)一種別碼的方式。2、 單詞的BNF表示<標(biāo)識(shí)符>-> <字母><字母數(shù)字串><字母數(shù)字串>-><字母><字母數(shù)字串>|<數(shù)字><字母數(shù)字串&g
2、t;|<下劃線><字母數(shù)字串>|<無符號(hào)整數(shù)>-> <數(shù)字><數(shù)字串><數(shù)字串>-> <數(shù)字><數(shù)字串> |<加法運(yùn)算符>-> +<減法運(yùn)算符>-> -<大于關(guān)系運(yùn)算符>-> ><大于等于關(guān)系運(yùn)算符>-> >=3、“超前搜索”方法詞法分析時(shí),常常會(huì)用到超前搜索方法。如當(dāng)前待分析字符串為“a>+”,當(dāng)前字符為>,此時(shí),分析器倒底是將其分析為大于關(guān)系運(yùn)算符還是大于等于關(guān)系運(yùn)算符呢?顯然,只有知道下
3、一個(gè)字符是什么才能下結(jié)論。于是分析器讀入下一個(gè)字符+,這時(shí)可知應(yīng)將>解釋為大于運(yùn)算符。但此時(shí),超前讀了一個(gè)字符+,所以要回退一個(gè)字符,詞法分析器才能正常運(yùn)行。在分析標(biāo)識(shí)符,無符號(hào)整數(shù)等時(shí)也有類似情況。4、模塊結(jié)構(gòu)緩沖區(qū)掃描一個(gè)字符主函數(shù)main()N輸入文件名,判斷能否打開文件Y緩沖區(qū)中是否還有字符Y結(jié)束取單詞掃描一個(gè)字符調(diào)用返回輸出N5.程序思路 這里以開始定義的C語(yǔ)言子集的源程序作為詞法分析程序的輸入數(shù)據(jù)。在詞法分析中,自文件頭開始掃描源程序字符,一旦發(fā)現(xiàn)符合“單詞”定義的源程序字符串時(shí),將它翻譯成固定長(zhǎng)度的單詞內(nèi)部表示,并查填適當(dāng)?shù)男畔⒈?。?jīng)過詞法分析后,源程序字符串(源程序的外部
4、表示)被翻譯成具有等長(zhǎng)信息的單詞串(源程序的內(nèi)部表示),并產(chǎn)生兩個(gè)表格:常數(shù)表和標(biāo)識(shí)符表,它們分別包含了源程序中的所有常數(shù)和所有標(biāo)識(shí)符。0.定義部分:定義常量、變量、數(shù)據(jù)結(jié)構(gòu)。1.初始化:從文件將源程序全部輸入到字符緩沖區(qū)中。2.取單詞前:去掉多余空白。3.取單詞后:去掉多余空白(可選,看著辦)。4.取單詞:利用實(shí)驗(yàn)一的成果讀出單詞的每一個(gè)字符,組成單詞,分析類型。(關(guān)鍵是如何判斷取單詞結(jié)束?取到的單詞是什么類型的單詞?)5.顯示結(jié)果。6.實(shí)驗(yàn)程序的源代碼如下:#include <stdio.h>#include <ctype.h>#include <malloc
5、.h>#include <stdlib.h>#include <string.h>#define NULL 0FILE *fp;char cbuffer;char *key8="if","else","for","while","do","return","break","continue"char *border6=",","","","
6、;","(",")"char *arithmetic4="+","-","*","/"char *relation6="<","<=","=",">",">=","<>"char *consts20="0","1","2","3",&
7、quot;4","5","6","7","8","9"char *label20;int constnum=0,labelnum=0;int search(char searchchar,int wordtype) int i=0; switch (wordtype) case 1:for (i=0;i<=7;i+) if (strcmp(keyi,searchchar)=0) return(i+1); break; case 2:for (i=0;i<=5;i+) if
8、(strcmp(borderi,searchchar)=0) return(i+1); return(0); break; case 3:for (i=0;i<=3;i+) if (strcmp(arithmetici,searchchar)=0) return(i+1); return(0); break; case 4:for (i=0;i<=5;i+) if (strcmp(relationi,searchchar)=0) return(i+1); return(0); break; case 5: for (i=0;i<=constnum;i+) if (strcmp
9、(constsi,searchchar)=0) return(i+1); break; case 6:for (i=0;i<=labelnum;i+) if (strcmp(labeli,searchchar)=0) return(i+1); labeli-1=(char *)malloc(sizeof(searchchar); strcpy(labeli-1,searchchar); labelnum+; return(i); break; char alphaprocess(char buffer) int atype; int i=-1; char alphatp20; while
10、 (isalpha(buffer)|(isdigit(buffer) alphatp+i=buffer; buffer=fgetc(fp); alphatpi+1='0' if (atype=search(alphatp,1) printf("%s t(1,%d)n",alphatp,atype-1);/結(jié)束 else atype=search(alphatp,6); printf("%s t(6,%d)n",alphatp,atype-1); return(buffer);char digitprocess(char buffer) i
11、nt i=-1; char digittp20; int dtype; while (isdigit(buffer) digittp+i=buffer; buffer=fgetc(fp); digittpi+1='0' dtype=search(digittp,5); printf("%s t(5,%d)n",digittp,dtype-1); return(buffer);char otherprocess(char buffer) int i=-1; char othertp20; int otype,otypetp; othertp0=buffer;
12、othertp1='0' if (otype=search(othertp,3) printf("%s t(3,%d)n",othertp,otype-1); buffer=fgetc(fp); goto out; if (otype=search(othertp,4) buffer=fgetc(fp); othertp1=buffer; othertp2='0' if (otypetp=search(othertp,4) printf("%s t(4,%d)n",othertp,otypetp-1); goto out;
13、 else othertp1='0' printf("%s t(4,%d)n",othertp,otype-1); goto out; if (buffer=':') buffer=fgetc(fp); if (buffer='=') printf(":= (2,2)n"); buffer=fgetc(fp); goto out; else if (otype=search(othertp,2) printf("%s t(2,%d)n",othertp,otype-1); buffer=
14、fgetc(fp); goto out; if (buffer!='n')&&(buffer!=' ') printf("%c error,not a wordn",buffer); buffer=fgetc(fp);out: return(buffer);void main() int i; for (i=0;i<=20;i+) labeli=NULL; ; if (fp=fopen("example.txt","r")=NULL) printf("error"); elsecbuffer = fgetc(fp);while (cbuffer!=EOF) if (isalpha(cbuffer) cbuffer=alphaprocess(cbuffer); else if (isdigit(cbuffer) cbuffer=digitprocess(cbuffer); else cbuffer=otherprocess
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 清華大學(xué)申請(qǐng)書
- 知識(shí)產(chǎn)權(quán)商業(yè)化從申請(qǐng)到授權(quán)的路徑
- 2025年的離婚財(cái)產(chǎn)分割協(xié)議詳細(xì)版
- “平行四邊形的面積計(jì)算”(教案)-五年級(jí)上冊(cè)數(shù)學(xué)滬教版
- 環(huán)境保護(hù)設(shè)施落實(shí)及運(yùn)轉(zhuǎn)情況報(bào)告
- 2025年苜蓿草項(xiàng)目可行性研究報(bào)告
- 金華戶外LED照明產(chǎn)品項(xiàng)目投資分析報(bào)告
- 知產(chǎn)交易市場(chǎng)在提升企業(yè)競(jìng)爭(zhēng)力中的作用
- 電商與物流行業(yè)的創(chuàng)新合作案例分享
- 吉林省化學(xué)防曬劑項(xiàng)目可行性研究報(bào)告
- 2025年北京廣播電視臺(tái)招聘(140人)歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- (主城一診)重慶市2025年高2025屆高三學(xué)業(yè)質(zhì)量調(diào)研抽測(cè) (第一次)物理試卷(含答案)
- 2025年中國(guó)電信集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 《糖尿病足護(hù)理查房》課件
- 2025年全國(guó)計(jì)算機(jī)二級(jí)等級(jí)考試全真模擬試卷及答案(共九套卷)
- 2024復(fù)工復(fù)產(chǎn)安全培訓(xùn)
- 2025中國(guó)南光集團(tuán)限公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 機(jī)加工行業(yè)安全生產(chǎn)風(fēng)險(xiǎn)辨識(shí)及控制清單
- 江蘇省蘇州市2024-2025學(xué)年第一學(xué)期八年級(jí)數(shù)學(xué)期末模擬卷(一)(無答案)
- 呼吸科護(hù)理組長(zhǎng)述職報(bào)告
- 【歷史】秦漢時(shí)期:統(tǒng)一多民族國(guó)家的建立和鞏固復(fù)習(xí)課件-2024-2025學(xué)年統(tǒng)編版七年級(jí)歷史上冊(cè)
評(píng)論
0/150
提交評(píng)論