實驗一詞法分析報告

2022-06-04 17:33:13 字數 2537 閱讀 4847

實驗

一、詞法分析實驗

專業:商業軟體工程三班       姓名:鄭錦誠      學號:201506110198

一、實驗目的

詞法分析是編譯的第一階段,它的主要任務是從左至右逐個字元地對源程式進行掃瞄,產生乙個個單詞序列,用於語法分析。

二、實驗內容和要求

讓使用者輸入一段程式段,然後逐個讀取字元,將它們拼在一起,獲取乙個有意義的單詞或符號,識別出單詞或符號種別以及自身的值,並輸出。

各種單詞符號對應的種別碼:

單詞符號

種別碼單詞符號

種別碼begin

ifthen

while

doend

l(l|d)*

dd*三、實驗方法、步驟及結果測試

1.源程式名:壓縮包檔案(rarzip)中源程式名詞法分析.c

可執行程式名:詞法分析.exe

2.原理分析及流程圖

主要總體設計問題:本次實驗程式是用順序儲存結構,關鍵函式為mor,沒有引數,也沒有返回值,全用全域性變數來實現執行**,多次使用迴圈語句while、do whlie以及for,也使用了判斷語句if、else判斷是否為符號時使用了switch語句進行執行判斷。

3.主要程式段及其解釋:

void mor()//

主要函式的呼叫

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

}執行結果及分析

四、實驗執行結果結果符合預期,詞法分析程式先識別字母if進行判斷,符合字元陣列word的保留字進行輸出種別碼以及自身的值,遇到空格就指向下一位,從而執行i,以此類推,當識別到!時程式結束。

五、實驗總結

難點問題: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.發現詞法錯誤...