詞法分析程式(lexical
analyzer)要求:
- 從左至右掃瞄構成源程式的字元流
- 識別出有詞法意義的單詞(lexemes)
- 返回單詞記錄(單詞類別,單詞本身)
- 濾掉空格
- 跳過注釋
- 發現詞法錯誤
程式結構:
輸入:字元流(什麼輸入方式,什麼資料結構儲存)
處理:–遍歷(什麼遍歷方式)
–詞法規則
輸出:單詞流(什麼輸出形式)
–二元組
單詞類別:
1.識別符號(10)
2.無符號數(11)
3.保留字(一詞一碼)
4.運算子(一詞一碼)
5.界符(一詞一碼)
單詞符號
種別碼單詞符號
種別碼begin
ifthen
while
doend
l(l|d)*
dd*1、**
#include
#include
#include
char wsym[80],ssym[8]; //wsym用於存放輸入陣列,ssym用於存放輸出陣列
char ch;
int row,syn,sum,m,i,p;
char *word[6]=;
void getsyn()
if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))
ssym[m++]='\0';
p--;
syn=10;
for(i=0;i<6;i++)
}}else if(ch>='0'&&ch<='9')
p--;
syn=11;
}else switch(ch)else
break;
case '
i=0;
ssym[i++]=ch;
ch=wsym[p++];
if(ch=='=')else if(ch=='>')else
break;
case '>':
i=0;
ssym[i++]=ch;
ch=wsym[p++];
if(ch=='=')else
break;
case '=':
ssym[0]=ch;syn=25;
break;
case ';':
ssym[0]=ch;syn=26;
break;
case '(':
ssym[0]=ch;syn=27;
break;
case ')':
ssym[0]=ch;syn=28;
break;
case '#':
ssym[0]=ch;syn=0;
break;
case '\n':
syn=100;
break;
default:
syn=-1;
break; } }
int main()while(ch!='#');
p=0;
do}while(syn!=0);
}2、測試結果
詞法分析程式的設計與實現
詞法分析程式 lexical analyzer 要求 從左至右掃瞄構成源程式的字元流 識別出有詞法意義的單詞 lexemes 返回單詞記錄 單詞類別,單詞本身 濾掉空格 跳過注釋 發現詞法錯誤 程式結構 輸入 字元流 什麼輸入方式,什麼資料結構儲存 處理 遍歷 什麼遍歷方式 詞法規則 輸出 單詞流 ...
詞法分析程式的設計與實現
詞法分析程式 lexical analyzer 要求 從左至右掃瞄構成源程式的字元流 識別出有詞法意義的單詞 lexemes 返回單詞記錄 單詞類別,單詞本身 濾掉空格 跳過注釋 發現詞法錯誤 程式結構 輸入 字元流 什麼輸入方式,什麼資料結構儲存 處理 遍歷 什麼遍歷方式 詞法規則 輸出 單詞流 ...
編譯原理5 詞法分析程式的設計與實現
編譯原理5 詞法分析程式的設計與實現 此程式要逐個檢查運 況,並能當場補全 詞法分析程式 lexical analyzer 要求 從左至右掃瞄構成源程式的字元流 識別出有詞法意義的單詞 lexemes 返回單詞記錄 單詞類別,單詞本身 濾掉空格 跳過注釋 發現詞法錯誤 程式結構 輸入 字元流 什麼輸...