實驗
一、詞法分析實驗
專業:商業軟體工程三班 姓名:鄭錦誠 學號:201506110198
一、實驗目的
詞法分析是編譯的第一階段,它的主要任務是從左至右逐個字元地對源程式進行掃瞄,產生乙個個單詞序列,用於語法分析。
二、實驗內容和要求
讓使用者輸入一段程式段,然後逐個讀取字元,將它們拼在一起,獲取乙個有意義的單詞或符號,識別出單詞或符號種別以及自身的值,並輸出。
各種單詞符號對應的種別碼:
單詞符號
種別碼單詞符號
種別碼begin
ifthen
while
doend
l(l|d)*
dd*三、實驗方法、步驟及結果測試
1.源程式名:壓縮包檔案(rar或zip)中源程式名詞法分析.c
可執行程式名:詞法分析.exe
2.原理分析及流程圖
主要總體設計問題:本次實驗程式是用順序儲存結構,關鍵函式為mor,沒有引數,也沒有返回值,全用全域性變數來實現執行**,多次使用迴圈語句while、do whlie以及for,也使用了判斷語句if、else判斷是否為符號時使用了switch語句進行執行判斷。
3.主要程式段及其解釋:
void mor()//四、實驗執行結果結果符合預期,詞法分析程式先識別字母if進行判斷,符合字元陣列word的保留字進行輸出種別碼以及自身的值,遇到空格就指向下一位,從而執行i,以此類推,當識別到!時程式結束。主要函式的呼叫
p--; //
迴圈結束後,p減一,為了防止漏掉字元
syn=10; //
先把syn賦值為10,再進行判斷是否是保留字或是關鍵字
b[m++]='
\0';//
並把陣列b的下一位賦值為\0,這樣防止系統出現混亂
for(n=0;n<6;n++) //
迴圈6次進行判斷是否為保留字
if(strcmp(b,word[n])==0) //
關鍵字陣列比較,相同則表示為關鍵字,種別碼即為下標值加一
}
else
if((ch>='
0')&&(ch<='
9')) //
或者字元ch是數字的
p--; //
迴圈結束後,p減一,為了防止漏掉字元
syn=11; //
數字的種別碼是11
}
else
//else語句內識別除關鍵字、識別符號、數字以外的其他字元
else
//否則賦值為18,再p減一
break
;
case'!
': //
為!則結束程式
syn=-2
;
break
;
default: //
輸入乙個錯誤的字元的時候
syn=-1
;
break
; }
} b[m++]='
\0'; //
把陣列b的下一位賦值為\0
}執行結果及分析
五、實驗總結
難點問題:1.編譯時出現死迴圈或不迴圈。
2.輸入保留字或關鍵字時,輸出的結果沒有符合預期,有時保留字變成關鍵字,關鍵字變成保留字。
解決方法:1.迴圈巢狀出錯以及迴圈條件&&,||的不規範使用導致的,已修改好。
2.在陣列b的下一位等於\0,就可以解決了。
心得體會:經過這次的實踐,我認識到自己的不足以及粗心,在今後的學習道路上相信會更加的出彩,多找到自己的不足,才能更好的加強自己的能力。
實驗一 詞法分析
1 實驗要求 1 從源程式檔案中讀取有效字元流並將其分析識別單詞符號,轉換成二元組內部表示形式輸出。2 視覺化方式展示詞法分析識別過程或者詞法分析器工作原理 選做 3 實驗時間4學時。4 實驗完成後,要提交實驗報告 包括源程式清單 2 實驗內容 2.1主程式設計考慮 主程式的說明部分為各種 和變數安...
實驗報告一 詞法分析程式
實驗一 詞法分析程式實驗 專業 商業軟體工程 姓名 卓潤峰 學號 201506110202 一 實驗目的 編制乙個詞法分析程式。二 實驗內容和要求 1.輸入 源程式字串。2.輸出 二元組 種別,單詞本身 3.待分析語言的詞法規則 主要是從左至右逐個字元地對源程式進行掃瞄,產生乙個個單詞序列,用於語法...
實驗一 詞法分析實驗
實驗一 詞法分析實驗 專業 商軟2班 姓名 李文輝 學號 201506110168 一 實驗目的 編制乙個詞法分析程式 二 實驗內容和要求 實驗內容 1.對字串表示的源程式 2.從左到右進行掃瞄和分解 3.根據詞法規則 4.識別出乙個乙個具有獨立意義的單詞符號 5.以供語法分析之用 6.發現詞法錯誤...