自原型搭建已過去兩個多月,現在實現了木蘭編程語言一些基本的功能。正值剛搬家到 OSChina,作一階段小結。
功能
以下示例都選自測試用例。
調用現有 Python 庫如草蟒:
using * in 海龜
顏色("黃色", "紅色")
開始填充()
for 拐數 in 0..4 {
前進(200)
右轉(144)
}
結束填充()
主循環()
類型:
type Animal {
func getName() {
return 1
}
}
type Person : Animal {
{}
}
print(Person.getName())
函數:
func increment(step) {
func add(n) {
return n + step
}
return add
}
print(increment(10)(1))
流程控制:
print(false ? 2 : 1)
sum = 0
number = 1
while number < 4 {
sum = sum + number
number = number + 1
}
print(sum)
中文報錯信息
上述基本功能之外,對部分報錯信息進行了加工,使之更易懂好讀。
比如下面的死遞歸:
func f() {
f()
}
f()
運行報錯信息如下:
(..•˘_˘•..) 遞歸過深。請確認: 1、的確需要遞歸 2、遞歸的收斂正確
見第2行:f()
調用層級如下
第2行:f()
【中略 995 行】
第2行:f()
第4行:f()
又如此段代碼:
func add(number) {
return number1+1
}
func output(number) {
print(number)
}
output(add(2))
運行報錯如下:
(..•˘_˘•..) 請先定義'number1'再使用
見第2行:return number1+1
調用層級如下
第7行:output(add(2))
語法分析的錯誤信息亦然。比如現在尚不支持空行,於是下面的代碼:
print(2)
會報錯如下:
錯誤.語法錯誤: 文件 "測試/錯誤處理/空行.ul", 第1行, 第1列, 沒認出這個詞 "換行"
^
代碼統計
由於實現機制是將源碼轉換爲 Python 的抽象語法樹(AST)後調用 exec 執行,因此主要代碼量在詞法分析器和語法分析器(包括 AST 轉換)。下面是幾個主要部分的代碼量統計(使用 scc,包括空行和註釋,木蘭的.ul
代碼統計使用--count-as ul:javascript
參數)
- 測試
- 木蘭測試用例:465
測試.py
,運行測試的腳本:123test語法樹.py
,確保生成的語法樹與原始版本一致:52
- 實現:1287
- (語法)
分析器.py
,包括 AST 轉換:569 語法樹.py
,功用/語法樹處理.py
,包括對 ast 庫的中文封裝:214詞法分析器.py
,主要是詞法規則:110中.py
,主程序:56功用/反饋信息.py
,報錯信息中文化:43環境.py
,全局變量:30
- (語法)
下一步
除了繼續補全木蘭語言本身功能之外,將嘗試開發一個簡單的代碼編輯器,使新用戶可以挑選各測試用例進行修改後直接運行。