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

2021-04-20 15:44:16 字數 3860 閱讀 4508

實驗1 詞法分析實驗報告

一、 實驗目的

除錯並完成乙個詞法分析程式,加深對詞法分析原理的理解。

。。。。。

二、 實驗要求

1、 待分析的簡單語言的詞法

(1) 關鍵字:

begin if then while do end

所有關鍵字都是小寫。

(2) 運算子和界符:

< <= <> > >

(3) 其他單詞是識別符號(id)和整型常數(num),通過以下正規式定義:

id=letter(letter| digit)*

num=digit digit *

(4) 空格由空白、製表符和換行符組成。空格一般用來分隔id、num,運算子、界符和關鍵字,詞法分析階段通常被忽略。

。。。。

2、 各種單詞符號對應的種別碼

3、 詞法分析程式的功能

輸入:所給文法的源程式字串。

輸出:二元組(syn,token或sum)構成的序列。

其中:syn為單詞種別碼;

token為存放的單詞自身字串;

sum為整型常數。

。。。。

三、 源程式**:

#include

#include

#include

char prog[80],token[8];

char ch;

int syn,p,m=0,n,row,sum=0;

char *rwtab[6]=;

void scaner()

if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))

token[m++]='\0';

p--;

syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0)

syn=n+1;

break;

}else if((ch>='0'&&ch<='9'))

p--;

syn=11;

if(sum>32767)

syn=-1;

}else switch(ch)

else if(ch=='=')

else

break;

case'>':m=0;token[m++]=ch;

ch=prog[p++];

if(ch=='=')

else

break;

case':':m=0;token[m++]=ch;

ch=prog[p++];

if(ch=='=')

else

break;

case'*':syn=13;token[0]=ch;break;

case'/':syn=14;token[0]=ch;break;

case'+':syn=15;token[0]=ch;break;

case'-':syn=16;token[0]=ch;break;

case'=':syn=25;token[0]=ch;break;

case';':syn=26;token[0]=ch;break;

case'(':syn=27;token[0]=ch;break;

case')':syn=28;token[0]=ch;break;

case'#':syn=0;token[0]=ch;break;

case'\n':syn=-2;break;

default: syn=-1;break;

}}void main()

while(ch!='#');

p=0;

do}while (syn!=0);

}。。。。。

四、 結果驗證

1、 給定源程式

begin x:=9; if x>0 then x:=2*x+1/3; end#

輸出結果

2、 源程式(包括上式未有的while、do以及判斷錯誤語句):

begin

x<=$;

while

a<0dob<>9-x;

end#

輸出結果

五、 收穫(體會)與建議

通過此次實驗,讓我了解到如何設計、編制並除錯詞法分析程式,加深對詞法分析原理的理解;熟悉了構造詞法分析程式的手工方式的相關原理,根據識別語言單詞的狀態轉換圖,使用某種高階語言(例如c++語言)直接編寫此法分析程式。另外,也讓我重新熟悉了c++語言的相關內容,加深了對c++語言的用途的理解。比如:

main()函式中,用cin>>ch;語句得到ch值的話,給定源程式的結果第一行得到的是(10,beginx),因為得到的字串中省略了空格,改用cin.get(ch);問題便解決了。另外,我在程式中加入了row變數,以便能夠準確得到錯誤所在。

實驗二時發現怎麼出結果都會出現乙個缺:=錯誤,便回頭檢查**才發現實驗一時的scaner()函式最後的:和:=的種別碼互相寫錯了,所以回過頭來重新修正了**和實驗結果圖。

實驗1 詞法分析實驗報告

六、 實驗目的

除錯並完成乙個詞法分析程式,加深對詞法分析原理的理解。

七、 實驗要求

1、 待分析的簡單語言的詞法

(1) 關鍵字:

begin if then while do end

所有關鍵字都是小寫。

(2) 運算子和界符:

< <= <> > >

(3) 其他單詞是識別符號(id)和整型常數(num),通過以下正規式定義:

id=letter(letter| digit)*

num=digit digit *

(4) 空格由空白、製表符和換行符組成。空格一般用來分隔id、num,運算子、界符和關鍵字,詞法分析階段通常被忽略。

2、 各種單詞符號對應的種別碼

3、 詞法分析程式的功能

輸入:所給文法的源程式字串。

輸出:二元組(syn,token或sum)構成的序列。

其中:syn為單詞種別碼;

token為存放的單詞自身字串;

sum為整型常數。

八、 源程式**:

#include

#include

#include

char prog[80],token[8];

char ch;

int syn,p,m=0,n,row,sum=0;

char *rwtab[6]=;

void scaner()

if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))

token[m++]='\0';

p--;

syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0)

syn=n+1;

break;

}else if((ch>='0'&&ch<='9'))

p--;

syn=11;

if(sum>32767)

syn=-1;

}else switch(ch)

else if(ch=='=')

else

break;

case'>':m=0;token[m++]=ch;

ch=prog[p++];

if(ch=='=')

else

break;

case':':m=0;token[m++]=ch;

ch=prog[p++];

if(ch=='=')

else

break;

case'*':syn=13;token[0]=ch;break;

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

實驗一詞法分析器設計 實驗目的 1 熟悉詞法分析的基本原理,詞法分析的過程和詞法分析中要注意的問題。2 複習高階語言,進一步加強用高階語言來解決實際問題的能力。3 通過完成詞法分析程式,了解詞法分析的過程。實驗內容 用c語言編寫乙個pl 0詞法分析器,為語法語義分析提供單詞,使之能把輸入的字串形式的...

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

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

編譯原理 詞法分析

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