編譯實踐學習 Part1

383494發表於2024-03-09

本文采用 CC BY 協議釋出。

閒話

開新坑辣!

參考 PKU 的文件做的。

為什麼會做這個呢?之前看一位退役 OIer 的 Blog 然後發現了這個文件,想著自己退役之後也要做一個。主要是被文件最後的 awesome-sysy 吸引了。

其實之前我在 OI 裡也寫過 CYaRon!語編譯版本,所以算是有 Bear 來...?

開始前的準備

編譯器是什麼呢?大概是下面的一個東西。

  1. 輸入一長串字元
  2. 拆成一堆短字串
  3. 進行一堆運算
  4. 翻譯成一長串字元

先看 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 了。

相關文章