該詞法分析器可以處理簡單的語法,但有限狀態機、正規表示式的處理不是非常嚴謹;僅供參考
但可以起到啟蒙例子的作用,下面源**經本人確認可以執行;
執行例子如下:
源**
#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 ...