修改標記解析器
在了解變數該如何實作之後,我們緊接著來實作吧。但是突然就要實作任意長的變數有點太難了,所以在這步我們把變數限定在小寫1個字,變數a
為 RBP-8、變數b
為 RBP-16、變數c
為 RBP-24,讓所有的變數以常駐方式存在。因為英文字母有26個字,函式被呼叫時我們把 RSP 往下推26×8也就是208個 bytes,保留所有1個字的變數空間。
馬上來實作看看吧。首先從標記解析器著手,在至今為止文法的元素以外,讓其可以對1個字的變數作標記解析。為此,我們得追加新的標記型態。變數名稱可以從str
讀入,所以不需要在Token
型中增加新的成員。最終,Token
型如下所示:
enum {
TK_RESERVED, // 符號
TK_IDENT, // 識別符號
TK_NUM, // 整數標記
TK_EOF, // 代表輸入結束的標記
} TokenKind;
修改標記解析器,讓其可以對小寫英文字母建立TK_IDENT
型的標記。只要對標記解析器加上如下的if
敘述即可:
if ('a' <= *p && *p <= 'z') {
cur = new_token(TK_IDENT, cur, p++);
cur->len = 1;
continue;
}
Last updated
Was this helpful?