詞法分析器

2021-07-06 11:01:15 字數 3020 閱讀 3385

這是我自己的第一篇部落格,就分享一下最近才做完的編譯原理實驗,詞法分析器。

本次實驗中我用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...