這是我自己的第一篇部落格,就分享一下最近才做完的編譯原理實驗,詞法分析器。
本次實驗中我用mysql資料庫儲存自動機狀態表,這樣做的目的只是為了在後續的課設中可以繼續使用現在的**。這一段**並不是太完善,發出來只是為了太完善。裡面還有很多問題,比如對字元和字串的識別,不知道為什麼資料庫無法將『和「轉換到我制定的ch_code,但是我的改進方法是將char字元轉為ascll碼,再將ascll碼轉換為ch_code.
這也是我第一次使用資料庫,這個版本的**只是初始**,裡面有諸多不足,還望賜教。我正在改寫該**,將會用更美的方式完成。
// stdafx.cpp : 只包括標準包含檔案的原始檔
// stdafx.obj 將包含預編譯型別資訊
#include "stdafx.h"
#include
// todo: 在 stdafx.h 中引用任何所需的附加標頭檔案,
//而不是在此檔案中引用
int state_change(int state, char ch)
else
//(ch_code > last_num) ? ch_code = last_num + 1;
if (ch_code != 99)
end_state = state_check(state, ch_code);
else
end_state = 0;
/*if (state >= 1 && state <= last_state)
*/return end_state;
}int ch_to_num(char ch)
; char sql[200] = "select * from char2num where current_char=";
strcat_s(sql, sizeof(sql), chtmp);
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, "localhost", "root", "1234", "state", 0, null, 0))
else
else
}mysql_free_result(result);}}
mysql_close(&mysql);
if (ch_code < 0)
return
99; else
return ch_code;
}int state_check(int state, int ch_code)
else
else}}
mysql_free_result(result);
}mysql_close(& mysql);
if (next_state < 0)
return -1;
else
return next_state;
}int state_to_code(int state_before, list
token)
else
break;
case
3:code = 3;break;
case
24:code = 4;break;
case
25:code = 5;break;
case
26:code = 26;break;
default:code = 7;break;
}return code;
}void print(int code, list
token)
cout
<< " >"
//
#include "targetver.h"
#include
#include
#include
#include
#include "stdafx.h"
#include
#include"c:\\program files\mysql\mysql server 5.6\include\mysql.h"
#pragma comment(lib,"libmysql")
using
namespace
std;
int last_state = 1000;
int last_num = 20;
//關鍵字,界定符
list
kt=;
list
pt=",",",";","(",")" };
//方法宣告
void initstate(void);
int state_change(int state, char ch);
int ch_to_num(char ch);
int state_check(int state, int ch_code);
//void reset(file *fp, listtoken,int state);
int state_to_code(int state_before, list
token);
void print(int code, list
token);
//votr(token.begin(), token.end());
cout
<< "< "
<< code << " , ";
for (it = token.begin();it != token.end();++it)
cout
<< " >"
//
//主程式
#include "stdafx.h"
list
token;
int main()
state = state_change(state, ch);
}else
if (token.size() != 0)}}
return
0;
詞法分析器
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 ...
詞法分析器
詞法分析器用來給語法分析器提供token,每個token都有乙個屬性tokentype用來指明其類別。public enum tokentype public class token public token tokentype type this.type type public override...