#新手 試著做了一個超微型程式語言
2022年11月10日 11:45 (已編輯)
一、簡介:
最近試著自己做了一個超微型程式語言,那就讓我們先來介紹它的語法吧~
(還有很多 bug 請見諒...)
這個程式語言提供了幾個基本的語法,包括:
1. var (宣告變數)
使用 var x = b 宣告變數,變數型態有 int、float、string,以及 array。
範例:
2. if() ... endif
使用 if() ... endif 判斷條件,條件僅接受簡單的 > 和 <(原諒它就只是個超微型語言...),沒有 else 語法。
範例:
3. for() ... endfor
使用 for() ... endfor 進行重複動作。
語法:
for(<condition>; <opretion>)
<condition> 僅接受 > 或 <
<opretion> 僅接受 += 或 -=
範例:
4. print()
使用 print() ...,不然你還能拿 print 做什麼...
範例:
5. #
使用 # 來註解程式
範例:
二、範例程式
簡單的 print 1 to 100 的範例:
簡單的雙迴圈範例 print 5 'aaaaa' for 10 times:
簡單 print、if 搭配範例:
三、原理:
這個程式語言的執行分成兩個步驟:(1) 將程式語言轉為 assembly(2 pass);(2) 執行 assembly。
這個 Assembler 不會進行 lexical analysis,只會做簡單的 syntactic analysis。
第一步:將程式語言轉為 assembly
使用 assembler v2.py 將程式語言轉為 assembly。Assembly 的設計參考 SIC/XE。其他細節可以在 Github 上的原始碼內找到。
使用方法:python '.\assembler v2.py' '.\test v2.pi' '.\obj code v2.hic'
test v2.pi 是指定 input file
obj code v2.hic 是指定 output file(組譯出來的組合語言就在這裡)
第二步:執行 assembly
使用 excuter v2.py 執行 .hic 檔,來模擬 assembly 的執行。
使用方法:python '.\executer v2.py' '.\obj code v2.hic'
obj code v2.hic 是指定 input file
讓我們看看剛才的簡單範例(print 1 to 100)。高階程式碼如下:
組譯出來的 hic code 如下:
四、其他
Github : Required Python version : >= 3.10
Required packages : os, sys, random, string
==========
更新
Update to version 3.0
這次的更新大幅改版 if、for 等語法,並新增 while、else、input、句尾分號(可要可不要)等新語法。終於變得比較像樣了~
一、語法
1. var(變數宣告)
和 v2 語法差不多,只是新增了句尾分號。(一行可以疊很多個)
範例:
2. if() ... else ...
新增 else,並且支援 ==、!=、>=、<=、<、> 等條件式。與 v2 最大差別在於要執行的程式需放在 {} 內。
範例:
也接受一個 if:
3. for() ...
更新 for loop 語法。使用方法如下:
for(<initial>, <condition>, <opretion>)
<initial> 初始化條件(變數宣告)
<condition> 接受==、!=、>=、<=、<、> 等條件式
<opretion> 每次迴圈結束時執行程式(+=、-=等)
範例:
4. while()
v3 新增語法,跟一般的 while 差不多。
範例:
5. cal
cal 運算式,接受 a (+-*/)= b 和 a = b (+-*/) c 兩種格式。
範例:
6. input()
使用 input() 函式取得使用者輸入,函式內放入要存入輸入之變數名稱。
範例:
三、簡單小小小遊戲:
二、其他
Github : Required Python version : >= 3.10
Required packages : os, sys, random, string, copy