標準純C 實現簡單的詞法分析器 二

2021-09-05 14:44:19 字數 1447 閱讀 2929

說明: 此詞法分析器所支援的關鍵字和操作符號都是 c-(mini c)的,關於 c-, 可以參閱 《編譯原理及實踐》附錄;

以下為關鍵字和操作符定義:

enum tokentype */, lsquare, rsquare/* [ ] */,

comma/* , */, semi/* ; */,

// complex operations

eq/* == */, neq/* != */,ngt/* <= */, nlt/* >= */,

// others

k_eof, k_id, k_num, k_error, k_none

};token 定義:

class    token;

過載了 = 操作符,因為在很多時候需要使用 賦值 操作。這樣可以簡化實現。

以下為詞法掃瞄器的定義:

class scanner: public tokenizer

int warncount()const   

bool    getlistfile();    // create log file sourcename.log

// if in key_word, return tokentype value else    return k_none;

tokentype    reservedlookup(const string& word);

std::vectorkey_word;

protected:

void    add_warn()   

void    add_err()

token    m_token;    // store current token

bool    m_pushed;    // push back curren token flag;

bool    tracescan;

int    warn_count;        // count warning

int    err_count;        // count the error;

};實現:

/**: construction & destruction &

*        author:    lonelyforest;

*        data:    2006.03.16

*/scanner::scanner(string &filename):tokenizer(filename)

--------------------------------------------

主要部分,狀態機實現:

/*: s_state; &

*   狀態機的各個狀態,nexttoken() 的輔助

*   狀態。

*/enum    statetype ;

主要狀態機實現待續,  如果太長, 閱讀很麻煩,不得不分開

C 實現詞法分析器

written by zzg date 11,25,2017 include include include using namespace std string keyword 15 char separater 8 分隔符 char operator 8 運算子 char filter 4 過濾...

詞法分析器 C 實現

include includeusing namespace std 保留字表 static char reserve 32 20 界運算子表 static char operatorlimit 36 10 char idenoperator 10000 50 查詢保留字 int searchrev...

簡單詞法分析器實現

編寫分析器有兩種方法,一種是通過dfa對單詞進行識別,二是通過直接編敲 進行識別。本程式採用dfa對單詞進行識別。dfa的實現方法。大概思想和書上一致,在程式中,則是用二維陣列代表狀態轉換矩陣,用一維陣列表示終態。可以識別識別符號 keyword 數字和運算子,對凝視進行過濾。同一時候還能識別出程式...