歡迎您光臨本站 註冊首頁

木蘭程式語言重現:通過玩三歲遊戲完善語言功能

←手機掃碼閱讀     admin @ 2020-08-08 , reply:0

某個號稱三歲以上就可以玩的桌遊,抽象之後的基本問題就是在一個區域中如何擺放三種形狀(朝向隨意)。

比如區域:

三種形狀(短折,長折,一字),各種朝向如下:

這是迄今為止用木蘭語言編寫的最複雜的實用程式碼,包括一個遞迴搜尋,長約 150 行,測試約 70 行。其中一個類如下:

細節和演算法有很大改進空間,歡迎指教。

期間根據需要復現了木蘭的如下功能:

== 操作符過載


 type 點 {
     func $點(橫, 縱) {
       self.橫, self.縱 = 橫, 縱
     }
 
     operator == (另一點) {
       return self.橫 == 另一點.橫 and self.縱 == 另一點.縱
     }
 } 

可指定函式返回型別


 type Person {
     {
         name = "小白"
     }
 
     func $__init__(name) {
         self.name = name
     }
 }
 
 func shout(id): Person {
     return Person(id)
 }
 
 print(shout("Mulan1").name) 

根據範圍取子列表

比如 a[1:3], a[1:]

新增內建函式

集合(set)、斷言(assert)、all、str/int 等等

程式碼統計

下面是幾個主要部分的程式碼行數統計,格式為:兩週前->本週。

  • 測試
    • 木蘭測試用例:1228 -> 1590
    • 執行測試.py,檢驗所有木蘭測試程式碼片段:151 -> 154
    • 未變
      • test語法樹.py,確保生成的語法樹與原始版本一致:67

 

  • 實現:2130 -> 2183
    • 分析器/語法分析器.py:916 -> 944
    • 分析器/語法樹.py功用/除錯輔助.py,包括對 ast 庫的中文封裝:284 -> 234 + 56 = 290
    • 分析器/詞法分析器.py:187 -> 190
    • 環境.py,載入木蘭模組:89 -> 97
    • 中.py,主程式:35 -> 36
    • 未變
      • 演示高亮.py:100
      • 功用/反饋資訊.py:45

下一步

由於還有相當部分的木蘭語言功能尚未補全,而實踐證明編寫較複雜例項的開銷相對較大,於是打算首先儘快補完語言功能和測試用例。

現在個別語言功能上卡了殼(比如變長引數),主要是看不出如何使用。如果有興趣並且對 Python 比較熟悉,歡迎一道研究。


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/117778/mulan-updated
木蘭程式語言重現:通過玩三歲遊戲完善語言功能已經有128次圍觀

http://coctec.com/news/soft/show-post-247803.html