乙個簡單的詞法分析器

2021-09-24 01:48:18 字數 1696 閱讀 8110

該詞法分析器可以處理簡單的語法,但有限狀態機、正規表示式的處理不是非常嚴謹;僅供參考

但可以起到啟蒙例子的作用,下面源**經本人確認可以執行;

執行例子如下:

源**

#include #include #include using namespace std;

// ref:

// 詞法分析器的實現

// prog: 輸入的源字串; token: 詞素的值

char prog[80],token[8];

char ch;

int syn,p,m=0,n,row,sum=0; // p: prog的指標;syn:種別碼,即詞素型別; sum:數字時的token;

char *rwtab[6]=;

void scaner()

//可能是標示符或者變數名

if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))

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

p--;

syn=10;

for(n=0;n<6;n++) //將識別出來的字元和已定義的標示符作比較,

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

}//數字

else if((ch>='0'&&ch<='9'))

}p--;

syn=11;

// 溢位情況

if(sum>32767) syn=-1;

}//其他字元

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

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

default: syn=-1;break;

}}int main()

while(ch!='#');

p=0;

// 每識別出乙個token,即輸出列印;do}

while (syn!=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...

詞法分析器

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