實驗一 詞法分析實驗

2022-06-02 06:06:10 字數 3718 閱讀 1855

實驗一、詞法分析實驗

專業:商軟2班   姓名:李文輝  學號:201506110168

一、實驗目的

編制乙個詞法分析程式

二、實驗內容和要求

實驗內容:1.對字串表示的源程式

2.從左到右進行掃瞄和分解

3.根據詞法規則

4.識別出乙個乙個具有獨立意義的單詞符號

5.以供語法分析之用

6.發現詞法錯誤,則返回出錯資訊

實驗要求:輸入:源程式字串

輸出:二元組(種別,單詞符號本身)

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

1.源程式名:壓縮包檔案(rarzip)中源程式名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 中進行詞法分析...