實驗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 將識別符號的詞法改為 以大寫字母或小寫字母開頭,後面可以跟大寫字...