天天看點

日語程式設計語言"撫子"-第三版實作初探

前文《日語程式設計語言"撫子" - 第三版特色初探》僅對語言的文法進行了初步了解. 之前的語言原型實作嘗試(如《程式設計語言試驗之Antlr4+JavaScript實作"圈4"》)之後, 感覺有必要學習"撫子"的實作, 因為它也內建支援線上程式設計, 應該很有借鑒價值.

開發環境配置

主要參考

kujirahand/nadesiko3

.

運作"npm start"後通路"localhost:3000"就有如下開發環境界面:

日語程式設計語言"撫子"-第三版實作初探

它也支援生成基于Electron的可以本地運作的獨立程式(在Mac下測試). 運作"npm run electron"後就看到與網絡界面相同的程式界面. 感覺這個方式很合理. 之後希望嘗試類似途徑同時實作線上和本地開發環境.

它也提供一個

Atom插件 , 安裝後(拷貝目錄到~/.atom/packages下)在Atom中打開test.nako3測試檔案就有文法高亮:
日語程式設計語言"撫子"-第三版實作初探
另: 運作"npm run test"時, 發現了一個關于 時間處理的bug . 将繼續跟進; 暫時沒有發現斷點調試等功能.

源碼學習

在/src下, 源碼檔案不多, 分類如下, 連同基于源碼和注釋個人整理的簡單介紹:

  1. 編譯器主程式:
    • nako3.js
    • cnako.js: 支援指令行下運作
    • enoko.js: 支援electron
    • wnako3.js: 支援web browser-浏覽器
  2. 分析器實作
    • nako_prepare.js: 全半角字元處理; 特殊字元串處理, 比如{% raw %}{{{{{% endraw %}等
    • nako_lexer.js: 對已經是全角的代碼進行詞法分析, 包括保留關鍵字, 分詞器等等
    • nako_parser_base.js: 顯示文法錯誤, NakoParserBase類
    • nako_parser_const.js: 定義運算符的優先級, 以及日語助詞(?), 如'いて', 'えて'等等
    • nako_parser3.js: 是NakoParserBase的擴充, 實施文法分析, 生成文法樹
    • nako_gen.js: 從文法樹生成JS類
  3. 插件(功能庫)
  4. 其他
    • index.js: 用npm子產品方式使用"撫子"
    • repl.nako3: 用"撫子"語言本身寫的一個簡單的對話執行環境

時間有限, 以後再對不同子產品深入學習.

2017-12-22

繼續閱讀