文言文編程語言來了 可是好像比英文更難寫了

近日有開發者開源了一門新的編程語言,吸引了大量開發者的目光,短短幾天獲得了 3k+ star。該語言名為「文言(wenyan-lang)」,這是一門採用文言文輸入的編程語言,該語言不包括英文字符,僅包含繁體中文字符,並保留繁體引號「」。

文言文編程語言來了 可是好像比英文更難寫了

先看看 Helloworld 怎麼寫:

吾有一數。曰三。名之曰「甲」。為是「甲」遍。	吾有一言。曰「「問天地好在。」」。書之。雲雲。

這段代碼等效於以下 JavaScript 代碼:

var n = 3;for (var i = 0; i 

輸出:

問天地好在。問天地好在。問天地好在。

同時,標點和換行符是完全可選的,與古漢語一致,所以上面的代碼等效於:

吾有一數曰三名之曰「甲」為是「甲」遍吾有一言曰「「問天地好在」」書之雲雲

Helloworld 看上去雖然簡單,但是其實作為一門編程語言,這里的語法都有嚴格的定義:

變量

wenyan JavaScript
吾有一數。曰三。名之曰「甲」。 var a = 3;
有數五十。名之曰「大衍」。 var dayan = 50;
昔之「甲」者。今「大衍」是也。 a = dayan;
吾有一言。曰「「噫吁戲」」。名之曰「乙」。 var b = "alas!";
吾有一爻。曰陰。名之曰「丙」。 var c = false;
吾有一列。名之曰「丁」。 var d = [];
吾有三數。曰一。曰三。曰五。名之曰「甲」曰「乙」曰「丙」。 var a=1,b=3,c=5;

控制

wenyan JavaScript
若三大於二者。乃得「「想當然耳」」也。 if (3>2){ return "of course"; }
若三不大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。 if(3
為是百遍。⋯⋯ 雲雲。 for (var i = 0; i
恆為是。⋯⋯ 雲雲。 while (true) { ... }
凡「天地」中之「人」。⋯⋯ 雲雲。 for (var human of world){ ... }
乃止。 break;

運算

wenyan JavaScript
加一以二。 1+2
加一於二。 2+1
加一以二。乘其以三。 (1+2)*3
除十以三。所餘幾何。 10%3
減七百五十六以四百三十三。名之曰「甲」。 var a = 756-433;
夫「甲」「乙」中有陽乎。 a || b
夫「甲」「乙」中無陰乎。 a && b

容器

數組從 1 開始索引。

wenyan JavaScript
吾有一列。名之曰「甲」。充「甲」以四。以二。 var a = []; a.push(4, 2);
銜「甲」以「乙」。以「丙」 a.concat(b).concat(c);
夫「甲」之一。 a[0]
夫「甲」之其餘。 a.slice(1);
夫「玫瑰」之「「名」」。 rose["name"]
夫「寶劍」之長。 sword.length;

函數

wenyan JavaScript
吾有一術。名之曰「吸星大法」。是術曰。⋯⋯是謂「吸星大法」之術也。 function f(){...}
吾有一術。名之曰「六脈神劍」。欲行是術。必先得六數。曰「甲」。曰「乙」。曰「丙」。曰「丁」。曰「戊」。曰「己」乃行是術曰。⋯⋯是謂「六脈神劍」之術也。 function f(a,b,c,d,e,f){...}
吾有一術。名之曰「翻倍」。欲行是術。必先得一數。曰「甲」。乃行是術曰。乘「甲」以二。名之曰「乙」。乃得「乙」。是謂「翻倍」之術也。 function double(a){var b = a * 2; return b;}

但是作者表示上下文無關的語法描述還在構建中。

文言語言採用自然語言處理共享了古典漢語語法,將語言編譯為 JavaScript 或 Python,並且圖靈完備。同時它不僅提供了一個配套在線 IDE,還提供了大量算法與數據結構示例,包括快排、漢諾塔問題與斐波那契數列表示等。

文言文編程語言來了 可是好像比英文更難寫了

來源:cnBeta