實驗一、詞法分析實驗
專業:商軟2班 姓名:李文輝 學號:201506110168
一、實驗目的
編制乙個詞法分析程式
二、實驗內容和要求
實驗內容:1.對字串表示的源程式
2.從左到右進行掃瞄和分解
3.根據詞法規則
4.識別出乙個乙個具有獨立意義的單詞符號
5.以供語法分析之用
6.發現詞法錯誤,則返回出錯資訊
實驗要求:輸入:源程式字串
輸出:二元組(種別,單詞符號本身)
三、實驗方法、步驟及結果測試
1.源程式名:壓縮包檔案(rar或zip)中源程式名lwh.c
可執行程式名:lwh.exe
2.原理分析及流程圖
1、設定全域性變數
1)char sum 把使用者輸入字元存到陣列裡面的
2)char ch 判斷輸入的字元的組成部分
3)char token 存放sum以及ch
4)*keyword 存放關鍵字
2、關鍵字表
*keyword[18]=
3、關鍵函式
void scaner() 詞法掃瞄及其判斷程式
void main() 使用者輸入與輸出
流程圖:
1.主要程式段及其解釋:
1、用於輸入,直到使用者輸入#則跳出迴圈
void main()
printf("請輸入一段你想測試的單詞符號, 以『#』號作為結束符號 !\n");
doch=getchar();//輸入字元
sum[a++]=ch;//把字元存到陣列裡
}while(ch!='#');//以#為迴圈條件
a=0;
3、讓token函式為空,判斷標示符前的是否為空格,有則ch要進一位
void scaner()
for(n=0;n<100;n++)
n=0;
ch=sum[a++];//全域性變數p=0
while(ch==' ')//有空格就繼續(判斷識別符號前是否存在空格)
4、判斷輸入的字元型別,若為英文本元則輸出種別碼zbm=21
if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))
dowhile((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'));
zbm=21;
5、 判斷英文是否和關鍵字完全一樣,是則輸出各關鍵字種別碼
for(n=0;n<18;n++)
if(strcmp(token,keyword[n])==0)//判斷英文是否和關鍵字完全一樣
zbm=n+1;
a--;
6、判斷使用者輸入是否為數字,若是則輸出種別碼zbm=22
else if(ch>='0'&&ch<='9')
a--;
dotoken[n++]=sum[a++];
ch=sum[a];
}while(ch>='0'&&ch<='9');
zbm=22;
return;
7、判斷其他字元的種別碼
else
switch(ch)
case '+':zbm=24;token[0]=ch;break;
case '-':zbm=25;token[0]=ch;break;
case '*':zbm=26;token[0]=ch;break;
case '/':zbm=27;token[0]=ch;break;
case ':':zbm=28;token[0]=ch;
ch=sum[a++];
if(ch=='=')
else a--;
break;
case '
ch=sum[a++];
if(ch=='=')
else if(ch=='>')
else a--;
break;
case '>':zbm=33;token[0]=ch;
ch=sum[a++];
if(ch=='=')
else a--;
break;
case '=':zbm=35;token[0]=ch;break;
case ';':zbm=36;token[0]=ch;break;
case '(':zbm=37;token[0]=ch;break;
case ')':zbm=38;token[0]=ch;break;
case '':zbm=40;token[0]=ch;break;
case '!':zbm=41;token[0]=ch;break;
case '@':zbm=42;token[0]=ch;break;
case '$':zbm=43;token[0]=ch;break;
case '%':zbm=44;token[0]=ch;break;
case '^':zbm=45;token[0]=ch;break;
case '&':zbm=46;token[0]=ch;break;
case '#':zbm=0;token[0]=ch;break;
default: printf("詞法分析出錯! 請檢查是否輸入非法字元\n");zbm=-1;break;
8、對使用者輸入的字元進行判斷,並輸入各字元型別的種別碼zmb。直到zmb為0,則跳出迴圈,迴圈結束。
doscaner();
printf("\n",zbm,token);
}while(zbm!=0);
printf("感謝使用該系統\n");
getchar();
2.執行結果及分析
一、實驗總結
1、通過與同學的交流,掌握了主要方法後發現其原理十分簡單,把每一種型別都分開出來特殊處理就可以了
2、感覺像是複習了大一c語言的內容,對這麼課有了更深了理解
3、編譯原理這門課程對c有很大的改進,通過學習這門課程能使自己在編寫程式方面有很大的幫助
實驗一 詞法分析實驗
實驗 一 詞法分析實驗 商業軟體工程專業 張煌 201506110130 一 實驗目的 從左至右地對源程式進行掃瞄,按照語言的詞法規則識別各類單詞,並產生以為格式的結果。二 實驗內容和要求 輸入 源程式字串 輸出 二元組 種別,單詞符號本身 三 實驗方法 步驟及結果測試 1.源程式名 壓縮包檔案 r...
實驗一 詞法分析
1 實驗要求 1 從源程式檔案中讀取有效字元流並將其分析識別單詞符號,轉換成二元組內部表示形式輸出。2 視覺化方式展示詞法分析識別過程或者詞法分析器工作原理 選做 3 實驗時間4學時。4 實驗完成後,要提交實驗報告 包括源程式清單 2 實驗內容 2.1主程式設計考慮 主程式的說明部分為各種 和變數安...
編譯實驗 一 詞法分析
編譯原理課程即將結束,開始了在校中最麻煩的實驗,編譯實驗.同在乙個系,其他班的編譯實驗分成好幾塊,簡短的文法,源 連線 詞法分析流程圖 首先要做的第一步就是寫資料結構以及完成單詞表。詞法分析的任務就是將一段程式 分割單詞,把單詞資訊寫出來。例如在 while a 2 do a a 1 中進行詞法分析...