20,294
stars
+-2+-1+12
1,096
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions
README
文言 wenyan-lang
wy-lang.org | Wiki
English | 简体中文 | 繁體中文
文言文編程語言。 在线体验
🚧 请注意,中文版文档并非实时更新,仅供参考。如有歧义,请以英文版文档为主。
!
序
夫唐、虞之世,結繩而足治,屈指而足算。是時豈料百代之後,計算機械之巧,精於公輸之木鳶,善於武侯之流馬;程式語言之多,繁若《天官》之星宿,奇勝《山經》之走獸。鼠、蟹、鑽、魚,或以速稱。蛇、象、駱、犀,各爭文采。方知鬼之所以夜哭,天之所以雨粟。然以文言編程者 ,似所未有。此誠非文脈之所以傳,文心之所以保。嗟予小子),遂有斯志。然則數寸之烏絲猶覆於頭,萬卷之素書未破於手;一身長羁于远邦,兩耳久旷于雅言。然夫文章者吾之所宿好,程式者偶承時人之謬譽。故希孟不慚年少,莊生不望無涯。乃作斯言。誠未能嘔瀝長吉之心血,亦庶幾免於義山之流沫。既成之後,復學干將鑄劍而自飼,越王嚐糞而當先。自謂偶追《十書》之筆意,但恨少八家之淋漓。此子山所謂士衡抚掌而甘心,平子見陋而固宜。然則雖實覆甕之質,尚存斧正之望;雖乏呂相之金,易字之渴蓋同。此亦開源之大義,吾輩之所以勉勵也。一笑。
Helloworld
文言:
吾有一數。曰三。名之曰「甲」。
為是「甲」遍。
吾有一言。曰「「問天地好在。」」。書之。
云云。
等同于以下 JavaScript:
JavaScript
var n = 3;
for (var i = 0; i 2){ return "of course"; } |
|若三不大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。 | if(3<=5){return "of course"}else{return "no way"} |
|為是百遍。⋯⋯ 云云。 | for (var i = 0; i < 100; 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 |
容器
数组下标从一开始。而不是零。
| wenyan | JavaScript |
|---|---|
|吾有一列。名之曰「甲」。充「甲」以四。以二。 | var a = []; a.push(4, 2); |
|銜「甲」以「乙」。以「丙」 | a.concat(b).concat(c); |
|夫「甲」之一。 | a[0] |
|夫「甲」之其餘。 | a.slice(1); |
|夫「玫瑰」之「「名」」。 | rose["name"] |
|夫「寶劍」之長。 | sword.length; |
对象
| wenyan | JavaScript |
|---|---|
|吾有一物。名之曰「甲」。 | var a = {}; |
|吾有一物。名之曰「甲」。其物如是。物之「「乙」」者。數曰三。物之「「丙」」者。言曰「「丁」」。是謂「甲」之物也。 | var a = {b:3, c:"d"} |
函数
| wenyan | JavaScript |
|---|---|
|吾有一術。名之曰「吸星大法」。是術曰。⋯⋯是謂「吸星大法」之術也。|function f(){...}|
|吾有一術。名之曰「六脈神劍」。欲行是術。必先得六數。曰「甲」。曰「乙」。曰「丙」。曰「丁」。曰「戊」。曰「己」乃行是術曰。⋯⋯是謂「六脈神劍」之術也。|function f(a,b,c,d,e,f){...}|
|吾有一術。名之曰「翻倍」。欲行是術。必先得一數。曰「甲」。乃行是術曰。乘「甲」以二。名之曰「乙」。乃得「乙」。是謂「翻倍」之術也。|function double(a){var b = a 2; return b;}|
|施「翻倍」於「大衍」。|double(dayan);|
|吾有一術。名之曰「甲」。欲行是術。必先得一數曰「乙」。二言。曰「丙」。曰「丁」|function a(float b, string c, string d)|
|夫「甲」。夫「乙」。夫「丙」。取二以施「丁」。取二以施「戊」。名之曰「己」。 | var f = e(a,d(b,c))|
|夫「甲」。夫「乙」。夫「丙」。取二以施「丁」。取二以施「戊」。取一以施「己」。夫「庚」。夫「辛」。取三以施「壬」。名之曰「癸」。 | var j = i(f(e(a,d(b,c))),g,h)|
导入
| wenyan | JavaScript |
|---|---|
|吾嘗觀「「算經」」之書。方悟「正弦」「餘弦」之義。 | var {sin,cos} = require("math"); |
杂项
| wenyan | JavaScript |
|---|---|
|吾有一數。曰五。書之。|console.log(5);|
注释
| wenyan | JavaScript |
|---|---|
|批曰。「「文氣淋灕。字句切實」」。 | /文氣淋灕。字句切實/ |
|注曰。「「文言備矣」」。 | /文言備矣/ |
|疏曰。「「居第一之位故稱初。以其陽爻故稱九」」。 | /居第一之位故稱初。以其陽爻故稱九/ |
渲染器
bash
wenyan examples/turing.wy --render 圖靈機 --output .
src/render.js 脚本文件能把 wy 代码格式化输出成为古汉语书籍样式(历史印刷书籍)的矢量图(SVG)。同时它还可以将生成的SVG文件解析回原始文言代码。需要获取更详细的信息,请使用wenyan -h命令来获取帮助。
下图是用 wenyan 编写的 通用图灵机程序 渲染而成。
!
功能请求
在你打开一个新Issue之前,请先检查你的需求是否属于以下类别:
|名称|优先级|需要帮助|状态|
|---|---|---|---|
|语言规范| | | 正在进行中 |
|类 / 对象文法 | | | 对象文法已经添加 |
|导入语句 | | | 导入语句已经添加 |
|标准库 (Math(数学)/Bitwise ops(位运算)/Random(随机)) | | √ | 正在进行中 |
|测试套件| | √ | 正在进行中 |
|Switch语句| | | |
|函数式程序设计 | | | |
|更严格的编译器 | | | |
|其他语言的编译器 | | √ | |
|编辑器的插件 | | √ | 适用于VSCode