簡單的詞法分析器## 標題
/南山荒野客
//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...