編譯原理詞法分析實驗報告

2022-09-04 18:03:06 字數 1908 閱讀 4808

實驗一詞法分析器設計

【實驗目的】

1.熟悉詞法分析的基本原理,詞法分析的過程和詞法分析中要注意的問題。

2.複習高階語言,進一步加強用高階語言來解決實際問題的能力。

3.通過完成詞法分析程式,了解詞法分析的過程。

【實驗內容】

用c語言編寫乙個pl/0詞法分析器,為語法語義分析提供單詞,使之能把輸入的字串形式的源程式分割成乙個個單詞符號傳遞給語法語義分析,並把分析結果(基本字,運算子,識別符號,常數以及界符)輸出。

【源程式】

#include<>

#include<>

#include<>

char ch;

bool isletter(char ch);

bool isnumber(char ch);

void scanner(file *f);

void main()

while(!fp);

scanner(fp);

fclose(fp);

}bool isletter(char ch)//是否為字母

bool isnumber(char ch)//是否為數字

void scanner(file *f)

else if(isletter(ch))//是字母開頭的

else if( ch=='=')//符號「==」「=」

else if(ch=='>')//符號 「> 「 和」>=」

ch=fgetc(f);

if(ch=='=')

printf("(運算子\t\"%s\")\n",">=");

else

printf("(運算子\t\"%s\")\n",">");

fseek(f,-1l,seek_cur);

}else if(ch=='<')//符號 「< 「 和」<=」

ch=fgetc(f);

if(ch=='=')

printf("(運算子\t\"%s\")\n","<=");

else

printf("(運算子\t\"%s\")\n","<");

fseek(f,-1l,seek_cur);

}else if(ch=='!')//符號 「! 「 和」!=」

ch=fgetc(f);

if(ch=='=')

printf("(運算子\t\"%s\")\n","!=");

else

printf("(%d\t\"%s\")\n",-1,"error");

fseek(f,-1l,seek_cur);

}else

//符號 「+「

if(ch=='-') //符號 「-「

if(ch=='*') //符號 「*「

if(ch=='/') //符號 「/「

if(ch=='(') //符號 「(「

if(ch==')') //符號 「)「

if(ch=='[') //符號 「[「

if(ch==']') //符號 「]「

if(ch=='//符號 「') ");continue;}//符號 「}「

if(ch==';') //符號 「;「

if(ch==',') //符號 「,「

if(ch=='.')

if(ch==eof) break;

else printf("(%d\t\"%s\")\n",-1,"error");//出錯了,輸出出錯資訊

}}}(自己編寫)

【執行結果】

圖一待分析程式

圖二詞法分析結果

【實驗總結】

1、 在編寫源程式之前,要熟練掌握詞法分析的基本原理和過程;

2、 通過這次實驗,複習了c語言程式設計的有關知識;

3、 編寫的程式沒能將詞法分析的結果儲存到檔案中,供語法分析的需要。

編譯原理詞法分析實驗報告

實驗1 詞法分析實驗報告 一 實驗目的 除錯並完成乙個詞法分析程式,加深對詞法分析原理的理解。二 實驗要求 1 待分析的簡單語言的詞法 1 關鍵字 begin if then while do end 所有關鍵字都是小寫。2 運算子和界符 3 其他單詞是識別符號 id 和整型常數 num 通過以下正...

編譯原理詞法分析器實驗報告

北華航天工業學院 編譯原理 課程實驗報告 課程實驗題目 詞法分析器實驗 作者所在系部 電腦科學與工程系 作者所在專業 電腦科學與技術 作者所在班級 b08512 作者學號18 作者姓名 李桂丁 指導教師姓名 李建義 完成時間 2010年3月26日 一 實驗目的 了解詞法分析程式的兩種設計方法 1.根...

編譯原理 詞法分析

編譯原理 課程 實驗報告 一.實驗序號 編譯原理 第一次實驗 二.實驗題目 詞法分析 三.實驗日期 2012.10.20 至2012.11.3 四.實驗環境 作業系統,開發語言 作業系統 windows 開發語言 c 五.實驗要求 1 將識別符號的詞法改為 以大寫字母或小寫字母開頭,後面可以跟大寫字...