本文采用 CC BY 協議釋出。
閒話
開新坑辣!
參考 PKU 的文件做的。
為什麼會做這個呢?之前看一位退役 OIer 的 Blog 然後發現了這個文件,想著自己退役之後也要做一個。主要是被文件最後的 awesome-sysy 吸引了。
其實之前我在 OI 裡也寫過 CYaRon!語 的 編譯版本,所以算是有 Bear 來...?
開始前的準備
編譯器是什麼呢?大概是下面的一個東西。
- 輸入一長串字元
- 拆成一堆短字串
- 進行一堆運算
- 翻譯成一長串字元
先看 step 1~2. 如何優雅地拆分輸入的原始碼呢?顯然我們需要一個工具。
它就是 Flex 和 Bison。Bison 負責定義拆分成什麼樣,Flex 負責具體的拆分工作。
不用擔心不會用,基本就是 C/C++ 語法,再加一些獨有的東西。
但是先別急,在此之前要先配好環境,具體見 文件。
EBNF
EBNF, 即 Extended Backus–Naur Form, 擴充套件巴科斯正規化。
形如 A ::= B
。
大概類似於 #define
?反正就是一通替換最後換無可換的時候就拆分完了。
具體細節還是要看原文件。
Hello World!
抽象語法樹 (abstract syntax tree, AST)
定義幾個類作為 AST 的組成部分。
然後一通返回指標就完事了。
目前的進度是輸出 Lv 1.3 的內容。
UPD:git 不會用,被我玩炸了。現在進度回檔到 Lv 1.2 了。