C 詞法分析器

2021-08-31 13:30:19 字數 2550 閱讀 8689

編譯原理實驗

一、實驗題目

設計、編制、除錯乙個識別一簡單語言單詞的詞法分析程式。程式能夠識別基本字、識別符號、無符號整數、浮點數、運算子和界符)。單詞符號及種別表如下:

單詞符號

種別編碼

begin1if

2then

3while4do

5end

6l(l|d)*

10dd*11+

13-14*

15/16:

17:=

18<

20<>

21<=

22>

23>=24=

25;26(

27)28#

0二、實驗目的

設計、編制並除錯乙個詞法分析程式,加深對詞法分析原理的理解。

三、實驗要求

詞法分析程式需具備詞法分析的功能:

輸入:所給文法的源程式字串。(字串以「#」號結束)

輸出:二元組(syn,token或sum)構成的序列。

其中:syn為單詞種別碼;

token為存放的單詞自身字串;

sum為整型常數。

例如:對源程式begin x:=9: if x>9 then x:=2*x+1/3; end #的原始檔,經過詞法分析後輸出如下序列:

(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)……

四、實驗步驟

(包括基本設計思路、流程框圖、演算法設計、函式相關說明、輸入與輸出以及程式執行結果)

程式輸入:

程式輸出:

原始碼:

#include

#include

#include

#include

#include

int i, row = 0, line = 0,linenum = 0;

char a[1000];  //字元

int number[1000][100];  //常數表

char mark[100][5];   //識別符號表

char marknum[100][20];

int wordanalysis();

int main()

while(!feof(fp))

a[l] = '$';

do}while(m!=0);

_getch();

return 0;

}int wordanalysis()

;//保留字

int n=0;

word[n++] = a[i++];

//若字元為a~z或0~9,則繼續讀取

while((a[i] >= 'a'&&a[i] <= 'z') || (a[i] >= '0' && a[i] <= '9')||(a[i]>='a'&&a[i]<='z'))

word[n]='\0';

i--;

//判斷該識別符號是否為保留字

for (n = 0; n < 100; n++)

}//判斷識別符號長度是否超出規定

if (strlen(word)>10)

//判斷該識別符號是否存在識別符號表中

int m = 0;

if (line != 0)

x[n] = '\0';

i--;

//判斷該識別符號是否存在識別符號表中

int m = 0;

if (linenum != 0)

else                      //分析符號

switch (a[i])

else if (a[i] == '>')

else

case '>':

i++;

if (a[i] == '=')

else

case '+': printf("(13,+)\n"); return 3;

case '-': printf("(14,-)\n"); return 3;

case '*': printf("(15,*)\n"); return 3;

case '/': printf("(16,/)\n"); return 3;

case ':':

i++;

if(a[i]!='=')

else

printf("(18,:=)\n");return 3;

case ';': printf("(26,;)\n"); return 3;

case '(': printf("(27,()\n"); return 3;

case ')': printf("(28,))\n"); return 3;}}

詞法分析器

這是我自己的第一篇部落格,就分享一下最近才做完的編譯原理實驗,詞法分析器。本次實驗中我用mysql資料庫儲存自動機狀態表,這樣做的目的只是為了在後續的課設中可以繼續使用現在的 這一段 並不是太完善,發出來只是為了太完善。裡面還有很多問題,比如對字元和字串的識別,不知道為什麼資料庫無法將 和 轉換到我...

詞法分析器

include using namespace std const int maxn 1e3 10 int n 輸入文字的行數 char buffer maxn maxn 緩衝區 int len maxn 輸入文字每行的列數 struct out 輸出格式 out string a,int b re...

詞法分析器

簡單的詞法分析器 標題 南山荒野客 20 05 2019 詞法分析器 編譯原理 c 語言 include include includechar prog 80 token 6 char ch int syn,p,m 0,n,row,sum 0 int biaoji 0 char rwtab 18 ...