elixir東遊記:實現一個簡單的中文語句解析
阿新 • • 發佈:2018-10-05
program a-z 是個 dsl home class dex tail -c
備份:https://zhuanlan.zhihu.com/p/46030123
代碼地址:github:pyzh/gdpl-ex.poc-1
原語句是:List1為‘12332234‘;記a為List1,b為2;求a中b的個數
整個流程是這樣的:
首先斷句,然後判斷句屬性(這個步驟其實代碼裏沒有嚴格實現)
第一句裏面因為只有一個[為]字,所以可以認為第一句是個賦值語句;
而第二句有一個[記]字,這個在[Ld2]的設定裏面,要比[為]的優先級高,所以第二句實際上是[記+為]的定義語句;
第三句是[求]語句,根據前文進行計算(這裏假定[求:個數]是標準庫裏的一員)
關於[為]和[記為]的差別,在設定裏,[為]只能指定值,而[記為]既可以指向值,也可以指向參量(如a→List1)
第三句裏的[中],決定了a和b的層級順序。關於[的]字的處理,目前Ld2還沒有明確規範。
緣起:APL和ABC裏的count primitive
圖2:流暢的python》python的直系祖先/ABC的count語法
參考:
- Ld2/初稿:一種基於中文的類SQL的DSL設計思路 · program-in-chinese/overview #89
- 紀念《APL》出版50年
- ABC 快速參考:https://homepages.cwi.nl/~steven/abc/qr.html
elixir東遊記:實現一個簡單的中文語句解析