詞法分析程式的設計與實現

2022-07-19 05:27:11 字數 1986 閱讀 6636

詞法分析程式(lexical

analyzer)要求:

- 從左至右掃瞄構成源程式的字元流

-  識別出有詞法意義的單詞(lexemes)

-  返回單詞記錄(單詞類別,單詞本身)

-  濾掉空格

-  跳過注釋

-  發現詞法錯誤

程式結構:

輸入:字元流(什麼輸入方式,什麼資料結構儲存)

處理:–遍歷(什麼遍歷方式)

–詞法規則

輸出:單詞流(什麼輸出形式)

–二元組

單詞類別:

1.識別符號(10)

2.無符號數(11)

3.保留字(一詞一碼)

4.運算子(一詞一碼)

5.界符(一詞一碼)

單詞符號

種別碼單詞符號

種別碼begin

ifthen

while

doend

l(l|d)*

dd*程式**在下方貼出:

#include#include

#include

char prog[800],dc[8

];char

ch;int syn,p,m=0

;int n,sum=0

;char *blword[6]=;

/*主函式

*/int main(void

)while(ch!='#'

);p=0;/*

逐個字元判斷其單詞符號種別碼

*/do

ch=prog[p++];

while(ch=='')

/*識別符號

*/if((ch>='

a'&&ch<='

z')||(ch>='

a'&&ch<='z'

))p--;

syn=10;/*

保留字*/

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

/*數字

*/else

if((ch>='

0'&&ch<='9'

))p--;

syn=11;}

/*字元

*/else

else

if(ch=='='

)else

break

;case

'>

':m=0

;dc[m++]=ch;

ch=prog[p++];

if(ch=='='

)else

break

;case':

':m=0

;dc[m++]=ch;

ch=prog[p++];

if(ch=='='

)else

break

;case'+

':syn=13;dc[0]=ch;break

;case'-

':syn=14;dc[0]=ch;break

;case'*

':syn=15;dc[0]=ch;break

;case'/

':syn=16;dc[0]=ch;break

;case'=

':syn=25;dc[0]=ch;break

;case';

':syn=26;dc[0]=ch;break

;case'(

':syn=27;dc[0]=ch;break

;case')

':syn=28;dc[0]=ch;break

;case'#

':syn=0;dc[0]=ch;break

;case'\n

':syn=-2;dc[0]=ch;break;}

}switch

(syn)

}while(syn!=0

);}

實測效果如圖:

詞法分析程式的設計與實現

詞法分析程式 lexical analyzer 要求 從左至右掃瞄構成源程式的字元流 識別出有詞法意義的單詞 lexemes 返回單詞記錄 單詞類別,單詞本身 濾掉空格 跳過注釋 發現詞法錯誤 程式結構 輸入 字元流 什麼輸入方式,什麼資料結構儲存 處理 遍歷 什麼遍歷方式 詞法規則 輸出 單詞流 ...

05 詞法分析程式的設計與實現 10 10

詞法分析程式 lexical analyzer 要求 從左至右掃瞄構成源程式的字元流 識別出有詞法意義的單詞 lexemes 返回單詞記錄 單詞類別,單詞本身 濾掉空格 跳過注釋 發現詞法錯誤 程式結構 輸入 字元流 什麼輸入方式,什麼資料結構儲存 處理 遍歷 什麼遍歷方式 詞法規則 輸出 單詞流 ...

編譯原理5 詞法分析程式的設計與實現

編譯原理5 詞法分析程式的設計與實現 此程式要逐個檢查運 況,並能當場補全 詞法分析程式 lexical analyzer 要求 從左至右掃瞄構成源程式的字元流 識別出有詞法意義的單詞 lexemes 返回單詞記錄 單詞類別,單詞本身 濾掉空格 跳過注釋 發現詞法錯誤 程式結構 輸入 字元流 什麼輸...