說明: 此詞法分析器所支援的關鍵字和操作符號都是 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 數字和運算子,對凝視進行過濾。同一時候還能識別出程式...