一、實驗目的
通過詞法分析器,進一步了解詞法之間的關係。
二、實驗內容和要求
將輸入的字串通過詞法分析器一一識別出來,同時將該字串或者字元並且和種別碼一起輸出來。
三、實驗方法、步驟及結果測試
源程式名:z.c
可執行程式名:z.exe
原理分析及流程圖
採用陣列存放資料,通過字串的比較實現關鍵字的種別碼輸出
主要程式段及其解釋:
int m=0;
sum=0;
char *r[7]=;//陣列存放關鍵字
for(n=0;n<9;n++)
token[n]='\0';
ch=prog[p++];
while(ch==' ')
ch=prog[p++];
if(isalpha(ch)) /*ch為字母字元
*/while(isalpha(ch)||isdigit(ch)) /*ch 為字母字元或者數字字元
*/token[m++]=ch;
ch=prog[p++];}
token[m++]='\0';
ch=prog[p--];
syn=10;
for(n=0;n<7;n++)
if(strcmp(token,r[n])==0) /*字串的比較
*/syn=n+1;
break;}}
else
if(isdigit(ch)) /*ch是數字字元
*/while(isdigit(ch)) /*ch是數字字元
*/sum=sum*10+ch-'0';
ch=prog[p++];}
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=29;token[0]=ch;break;
case'#':syn=0;token[0]=ch;break;
default:syn=-1;}
我採用prog陣列存放鍵盤輸入的字元,用
r陣列存放關鍵字的陣列。通過判斷空格鍵來用
token
陣列存放前面的字元,如果前面的字元既出現字母又出現數字,那麼就是識別符號。反而就是關鍵字。然後通過
token
陣列的字串與前面定義
r陣列的字串一一比較,輸出所對應的種別碼。
執行結果及分析
四、實驗總結
在這次的實驗中了解詞法分析的過程,解決一些問題。在完成我的詞法分析器的時候考慮到關鍵字固定的字串,這就有利於字串的比較,從而識別出對應的種別碼。對於數字的採用sum=sum*10+ch-'0'乙個字元』1』轉換為數字需要減』0』才能得到對應的數字,因為數字有個十百千萬的規則,因為讀取數字字元的時候是從其他位開始讀的,最後才讀個位。比如123,先讀
1,然後
1*10+2=12
,然後12*10+3=123
。
實驗一 詞法分析實驗
實驗一 詞法分析實驗 專業 商軟2班 姓名 李文輝 學號 201506110168 一 實驗目的 編制乙個詞法分析程式 二 實驗內容和要求 實驗內容 1.對字串表示的源程式 2.從左到右進行掃瞄和分解 3.根據詞法規則 4.識別出乙個乙個具有獨立意義的單詞符號 5.以供語法分析之用 6.發現詞法錯誤...
實驗一 詞法分析實驗
實驗 一 詞法分析實驗 商業軟體工程專業 張煌 201506110130 一 實驗目的 從左至右地對源程式進行掃瞄,按照語言的詞法規則識別各類單詞,並產生以為格式的結果。二 實驗內容和要求 輸入 源程式字串 輸出 二元組 種別,單詞符號本身 三 實驗方法 步驟及結果測試 1.源程式名 壓縮包檔案 r...
實驗一 詞法分析
1 實驗要求 1 從源程式檔案中讀取有效字元流並將其分析識別單詞符號,轉換成二元組內部表示形式輸出。2 視覺化方式展示詞法分析識別過程或者詞法分析器工作原理 選做 3 實驗時間4學時。4 實驗完成後,要提交實驗報告 包括源程式清單 2 實驗內容 2.1主程式設計考慮 主程式的說明部分為各種 和變數安...