格式說明:排版時注意按此模板的字型,字型大小和行距。
報告提交和列印輸出時請去掉此框。
實驗
一、詞法分析實驗
專業 商業軟體工程 姓名 李桂源 學號 201506110201
一、實驗目的
通過設計編制除錯乙個具體的詞法分析程式,加深對詞法分析原理的理解。並掌握在對程式語言源程式進行掃瞄過程中將其分解為各類單詞的詞法分析方法,識別出各個具有獨立意義的單詞,即基本保留字、識別符號、常數、運算子、分隔符五大類。
二、實驗內容和要求
設計乙個程式,除錯、編譯,實現詞法分析的功能,識別各單詞或字元所屬類別,並顯示在螢幕上或儲存在某個檔案中。
要求:逐個讀入源程式字元並按照構詞規則切分成一系列單詞。包括保留字、識別符號、運算子、標點符號和常量。輸入:所給c源程式字串。輸出:二元組構成的序列。
三、實驗方法、步驟及結果測試
1.源程式名:壓縮包檔案(rar或zip)中源程式名:詞法分析程式
可執行程式名:詞法分析程式
2.原理分析及流程圖
原理分析:通過構詞規則切分成一系列單詞,判斷是否為保留字、識別符號、運算子、標點符號和常量,再按照二元組輸出。
1.主要程式段及其解釋:
dowhile(ch!='#'); //將輸入的字元賦值給ch,再存放在陣列total[n]中
if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))
while((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z')||(ch>='0'&&ch<='9'))
keyword2[m]=ch;
m++;
ch=total[n];
n++;
keyword2[m]='\0';
code=10;
for(i=0;i<6;i++)
if(strcmp(keyword2,keyword[i])==0)
code=i+1;
else if(ch==':'||ch=='')
switch(ch)
case ':':code=17;m=0;keyword2[m]=ch;m++;ch=total[n];n++;
if(ch=='=')
keyword2[m]=ch;m++;n++;code=18;keyword[m]='\0';
break;
case '
if(ch=='=')
keyword2[m]=ch;m++;n++;code=21;keyword[m]='\0';
else if(ch=='>')
keyword2[m]=ch;m++;n++;code=22;keyword[m]='\0';
}break;
case '>':code=23;keyword2[m]=ch;m++;ch=total[n];n++;
if(ch=='=')
keyword2[m]=ch;m++;n++;code=24;keyword[m]='\0';
}break;
} //通過switch語句,判斷是什麼符號,並用if語句做進一步判斷。
2.執行結果及分析
分析:能夠比較輸出想要輸出的語法語句,但每個語法都中間都得加空格,不然就會出現錯誤,這是程式的不足之處。
一、實驗總結
在完成程式的過程中,面對了許多問題,首先,是不知道怎麼單獨將字串取出來分析,通過查閱書料才得知getchar()的功能,忘記了字串的輸出可以通過字元陣列儲存後加'\0',就可以直接將字串輸出。在面對許多的各類詞法時,起初不知道從何下手,在敲打程式時也易邏輯、語句混亂。
詞法分析實驗報告
實驗 一 詞法分析實驗 專業 商軟三班 姓名 姚棋輝 學號201506110250 一 實驗目的 編譯乙個詞法分析程式 實驗內容和要求 輸入字串,輸出這些字串的種別碼。二 實驗方法 步驟及結果測試 方法 鍵盤輸入字串時,使用陣列放起來,再從陣列這裡放進佇列。步驟 1 鍵盤輸入字串,存放在陣列中,2 ...
詞法分析實驗報告
實驗 一 詞法分析實驗 商業軟體工程 麥振澎 201506110162 一 實驗目的 對使用者輸入的字串進行判斷,區分它們的型別,熟悉詞法分析的過程。二 實驗內容和要求 使用者輸入的字串進行判斷,分別輸出每個字串所屬的型別。其中的判斷標準如下 無符號整數 整數 識別符號 字母 數字 0 1 2 8 ...
詞法分析實驗報告 201506110151 董廣樞
實驗 一 詞法分析 專業 商業軟體工程二班 姓名 董廣樞 學號201506110151 一 實驗目的 編制乙個詞法分析程式 二 實驗內容和要求 1 輸入 源程式字串 2 輸出 二元組 種別,單詞本身 3 待分析語言的詞法規則 三 實驗方法 步驟及結果測試 include include char p...