---
# System prepended metadata

title: Mini Project
tags: [Programming]

---

# Mini Project
## Reference
1. [組合語言_Youtube](https://www.youtube.com/watch?v=-_PDGifygFs)
2. [Mini Project 講解(1:12:00)](https://www.youtube.com/watch?v=80ekJJFnLNo&t=3772s)
3. [組合語言_投影片](https://eeclass.nthu.edu.tw/media/doc/103864#5_728bd28f820da3763e5c1c6e6a2aa763)
4. [組合語言_PDF](https://drive.google.com/file/d/1DdI7yZutgpc6w6-rmXsAcNxbshOiurBO/view?usp=sharing)
5. [GitHub 參考程式碼](https://github.com/lightbulb12294/CSI2P-II-Mini)
6. [Compiler Explorer](https://godbolt.org/)

## 進度

|   **時間**   | **預計進度**       | **實際進度** |
|  --------   | --------          | -------- |
| ***11/9***  | 簡介、基本概念、語法 | 簡介     |
| ***11/10*** | 簡介、基本概念、語法 | 簡介     |
| ***11/11*** | Task1,2,3        | -     |
| ***11/12*** | Task All         | -     |
| ***11/13*** | 繳交作業           | -       |
| ***11/14*** | Demo             | -       |


## 簡單架構

1. Lexer
    * 將input切成token
    * 補充:Token種類
        Identifer (x)
        Assign (=)
        ...

2. Parser
    * 根據Grammer Rule 利用 Token 建立正確的 AST (preorder表示會是原本的input)
    * Semantic check
        * 確認樹是否有語法錯誤

3. CodeGen
    * 利用上個架構生成的 AST 建立 ASM (組合語言)
    
4. Optimize (有或無皆可)
    * 優化 ASM 



## 參考Code架構

```clike=
//main
```