201506110112 李立建 實驗一報告

2022-06-02 20:45:09 字數 3799 閱讀 6747

實驗

一、詞法分析實驗

專業:商業軟體工程   姓名:李立建  學號:201506110112

一、實驗目的

(1)    理解詞法分析在編譯程式中的作用。

(2)    加深對有窮自動機模型的理解。

(3)    掌握詞法分析程式的實現方法。

(4)    用c語言對乙個簡單語言的子集編制乙個一遍掃錨的編譯理解,掌握編譯程式的實現方法和技術。

二、實驗內容和要求

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

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

3,詞法分析程式的功能(輸入,輸出)。

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

1.源程式名:壓縮包檔案(rarzip)中源程式名:cifenxi.c

可執行程式名:cifafen.exe

2.原理分析及流程圖

主要總體設計問題。

(包括儲存結構,主要演算法,關鍵函式的實現等)

詞法分析主程式示意圖

主要演算法:

1.先應用陣列存放關鍵字。

2.利用if,switch進行分析單詞符號。

3.最後輸出單詞對應的種別碼。

關鍵函式的實現:

1.*定義i/o庫所用的某些巨集和變數*/

2. /*定義字串庫函式*/

3./*提供有關螢幕視窗操作函式*/

4./*分類函式*/

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

實現主要功能的程式段,重要的是程式的注釋解釋。

主要程式共分為三大塊,分別是標示符、數字、符號。

void scaner()

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

ch=prog[p--];

syn=10;

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

if(strcmp(token,rwtab[n])==0) /*字串的比較*/

}else

if(isdigit(ch)) /*ch是數字字元*/

ch=prog[p--];

syn=11;}

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;

default:syn=-1;}}

4.執行結果及分析

一般必須配執行結果截圖,結果是否符合預期及其分析。

源**:

voidscaner()

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

ch=prog[p--];

syn=10;

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

if(strcmp(token,rwtab[n])==0) /*字串的比較*/}

else

if(isdigit(ch)) /*ch是數字字元*/

ch=prog[p--];

syn=11;}

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;

default:syn=-1;}}

四、實驗總結

本次實驗花了將近四小時才完成。在草稿紙上設計的時間大概乙個半小時,剩下時間都在實行**的完善和報告的所要求的步奏。在本次實驗中我認識到程式不經常編譯,水平只會降低。好多關於之前的知識也會逐漸忘掉。所以以後我會經常寫程式,理解程式的內涵。另外,通過本次實驗,我又 進一步對詞法分析原理的理解。總的來說,收穫匪淺!

李建忠設計模式(一)

目錄 1.軟體設計的目標 2.物件導向設計原則 1.重新認識物件導向 2.物件導向設計原則 1.依賴倒置原則 dip 2.開放封閉原則 ocp 3.單一職責原則 srp 4.liskov替換原則 lsp 5.介面隔離原則 isp 6.有限使用物件組合,而不是類繼承 7.封裝變化點 8.針對介面程式設...

李建忠設計模式 抽象工廠

提供乙個介面,讓該介面負責建立一系列 相關或者相互依賴的物件 無需指定它們具體的類。設計模式 gof 抽象產品類角色 abstractproduct 為抽象工廠中相互依賴的每種產品定義抽象介面物件,也可以這樣說,有幾種產品,就要宣告幾個抽象角色,每乙個抽象產品角色和一種具體的產品相匹配。具體產品類 ...

李建忠設計模式 原型模式

目錄 1.原型模式 prototype 1.動機 2.定義 3.結構圖 4.模式的組成 2.例項 3.要點總結 4.參考 使用原型例項指定建立物件的種類,然後通過拷貝這些原型來建立新的物件。模式設計 gof 原型類 prototype 原型類,宣告乙個clone自身的介面 具體原型類 concret...