1. 程式人生 > >elixir東遊記:實現一個簡單的中文語句解析

elixir東遊記:實現一個簡單的中文語句解析

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語法

參考:

  1. Ld2/初稿:一種基於中文的類SQL的DSL設計思路 · program-in-chinese/overview #89
  2. 紀念《APL》出版50年
  3. ABC 快速參考:

elixir東遊記:實現一個簡單的中文語句解析