編譯原理實驗
一、實驗題目
設計、編制、除錯乙個識別一簡單語言單詞的詞法分析程式。程式能夠識別基本字、識別符號、無符號整數、浮點數、運算子和界符)。單詞符號及種別表如下:
單詞符號
種別編碼
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 ...