詞法分析器

2021-09-23 06:10:58 字數 1799 閱讀 4101

簡單的詞法分析器## 標題

/南山荒野客

//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]=;

//18個保留字

void scaner()

if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z')||(ch=='_')) //可能是標示符或者變數名 (識別符號只能以字母或者下劃線開頭)

token[m++]='\0';

p--;

syn=10;

for(n=0;n<18;n++) //將識別出來的字元和已定義的保留字作比較,

if(strcmp(token,rwtab[n])==0)

}else if((ch>='0'&&ch<='9')) //數字

while((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z')||(ch=='_'))//數字後面跟其他字元則表示字元非法,用biaoji=1標記

}p--;

if(biaoji<1)

syn=11;//合法數字種別碼 11

if(biaoji==1)//非法字元報錯

syn=-3;

if(sum>32767)//數字溢位報錯

syn=-4;

}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=30;token[0]=ch;break;

case'':syn=32;token[0]=ch;break;

case'#':syn=0;token[0]=ch;break;

case'\n':syn=-2;break;

default: syn=-1;break;//其他錯誤(如未能識別的字元)

}}int main()

while(ch!='#');//#作為輸入的字元的終結符,讀到#停止讀入

p=0;do}

while (syn!=0);

return 0;

}

詞法分析器

這是我自己的第一篇部落格,就分享一下最近才做完的編譯原理實驗,詞法分析器。本次實驗中我用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...

詞法分析器

詞法分析器用來給語法分析器提供token,每個token都有乙個屬性tokentype用來指明其類別。public enum tokentype public class token public token tokentype type this.type type public override...