原标题:PSTK项目:文言文也能编程?大四学生发明文言文编程语言

最近有个 GitHub 项目火了 —— 文言文编程语言 / wenyan-lang。文言文编程语言的作者名叫Huang Lingdong,是卡内基梅隆大学(CMU)一名大四学生,高中毕业于上海世界外国语中学。

据悉,这一项目吸引了大量开发者的目光,已在GitHub上摘得5500星。该文言文编程语言并不是简单的将程序中的英文字符换成了中文,而是利用 NLP 的一些技术,可将文言文程序语法转编译成Javascript,也可编译成Python,亦有线上编辑器(IDE)可直接玩耍,下面我们来一起研究下。

项目序言

作者在项目开篇使用了一段文言文,介绍了建立这个项目的初衷。

翻译如下:在尧舜时代,人们使用结绳和数手指来计算。当时怎么能够预料到,几百代人之后计算机的巧妙呢!计算机比鲁班(公输盘)的木鸢更加精巧,比诸葛亮(武侯)的木牛流马更好。此外,编程语言数量众多,如同《天官书》记录的星宿一般多,又比《山海经》中记录的飞禽走兽还要奇特。Go(鼠)、Rust(蟹)、Ruby(鑽)、Fishshell(鱼)因速度而出名。Python(蛇)、Php(象)、Perl(骆)和 JavaScript(犀)则各有独特之处。我这才理解到,为什么鬼会夜哭,天上会下粟雨。但以往从未有人使用过文言文进行编程。

这并不是传承文脉、保护文心的好方法,所以我才产生了用文言文编程的想法。我目前还太年轻,读过的书也没有破万卷。如今身处遥远的国家(美国),也很久没有接触中文了。但是我一直对文学很有兴趣,编写的程序有时候也得到人们的一些肯定。正如王希孟和庄子一般,并不因为年轻或者知识的浩瀚无涯而退缩,于是写下了这些话。我既没有像李贺那样呕心沥血,也没有像李商隐那样口角流沫。

项目完成后,我将继续以干将铸剑的精神勉励自己,带着越王卧薪尝胆的精神继续向前。我自己虽想效仿《算经十书》的笔法,只是遗憾没有唐宋八大家那样淋漓的文笔。正如庾信在《哀江南赋》所写:“陆机听了心甘情愿地拍掌;张衡见了将轻视它也是理所当然”。尽管这项目只有覆瓮的价值,但是还有完善的空间。虽然没有像吕不韦那样有一字千金的本钱,但是我对交流的渴望是一样的。这也是开放源的重要意义,我们以此互相勉励吧。

文言文如何编程

学语言,当然先从 “Hello world” 开始,看看文言版怎么写:

吾有一數。曰三。名之曰「甲」。

為是「甲」遍。

吾有一言。曰「「問天地好在。」」。書之。

云云。

这段代码等效于以下 JavaScript 代码:

var n = 3;

for (var i = 0; i < n; i++) {

console.log("問天地好在。");

}

输出:

問天地好在。

問天地好在。

問天地好在。

标点符号和换行都是可选的(就像古汉语中文字是连续的),所以上面的代码等同于:

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

更多复杂的例子,可以在 ./examples 中找到。比如,埃拉托斯特尼筛法、快速排序、曼德博集合、汉诺塔。

这完全就是中文编程,使用古汉语语法,具有图灵完整性,可以编译成 JavaScript 或 Python。如同古人篆书一般,一顿之乎者也,程序写好了!

项目特点

符合古汉语语法的自然语言处理程序。

可以编译成 JavaScript,Python,或者 Ruby

图灵完备(https://github.com/LingDong-/wenyan-lang/blob/master/examples/turing.wy 在可计算性理论里,如果一系列操作数据的规则(如指令集、编程语言、细胞自动机)可以用来模拟单带图灵机,那么它是图灵完备的。)

在线IDE (http://wenyan-lang.lingdong.works/ide.html)即刻体验

通过几个例子快速入门(https://github.com/LingDong-/wenyan-lang/tree/master/examples)

文言文(wenyan)是一种深奥的编程语言,遵循中国古典文学的语法和文风。据介绍,这种编程语言文字仅包含繁体中文字符和“''引号,因此古代中国人绝对看得懂。是不是觉得很新奇?

看完这些代码让我感觉:

《九章算术》就是一本算法导论;

《孙子兵法》就是一本安全攻防;

《易经》大概是一本二进制逆向吧…

如果有感兴趣的小伙伴,可以在在线编辑器上试用,也可以下载编译器或查看源代码。

在线编辑器:http://wenyan-lang.lingdong.works/ide.html

下载编译器:https://github.com/LingDong-/wenyan-lang#installation

开源代码:https://github.com/LingDong-/wenyan-lang返回搜狐,查看更多

责任编辑:

文言文编程可以编译成PHP吗,PSTK项目:文言文也能编程?大四学生发明文言文编程语言...相关推荐

  1. 年度最骚的编程语言来了!大四学生发明文言文编程语言!

    程序员的成长之路 互联网/程序员/成长/职场 关注 阅读本文大概需要 2.8 分钟. 来自:开源最前线(ID:OpenSourceTop) 这两天刷微博.朋友圈.公众号,发现大家都被一个文言文编程的项 ...

  2. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

  3. 文言文编程可以编译成PHP吗,GitHub开源的文言文编程语言、程序生成中国山水画、格律诗编辑程序...

    目录 一位叫做Lingdong的大四学生在GitHub上开源了一系列非常有意思的项目,其中文言文编程语言.程序生成中国山水画.格律诗编辑程序,吸人眼球,符合主旋律,弘扬传统文化. 1.文言文编程语言 ...

  4. 文言文编程可以编译成PHP吗,人人都可以学会编译原理-开篇

    编译技术在我们日常的工作中可以说无处不在,React JSX语法的解析,Typescript转化为Javascript,XML.JSON的解析,Spring字节码生成技术,PHP的模板引擎,还有最近很 ...

  5. C编译成其他语言,编程达人 所有的编程语言最后会编译成C,再编译成汇编,最后落实到硬件操作上吗?...

    首先上结论: (1)不是所有的编程语言都要先编译成C (2)甚至有编程语言连编译成汇编这一步都跳过了. (3)不是所有的编程语言都需要编译,有的是纯解释型语言 1. 编程语言到硬件执行之间到底发生了什 ...

  6. 【CLR的执行模型:将源代码编译成托管模块】

    CLR:由多种不同编程语言使用的运行库 托管模块:中间语言和元数据 非托管语言:C/C++,不过此为特殊,可以写成托管代码 托管语言:C# 托管模块 1,PE32/PE32+头:PE32运行在win3 ...

  7. 怎样创造计算机语言,如何创建编译成JavaScript的编程语言

    你曾经想过创建自己的编程语言吗?在本文中,我将演示如何使用免费工具和PEG.js解析器生成器快速编写编译为JavaScript的简单语言. 什么是解析器生成器 解析器生成器顾名思义就是一个基于语法.语 ...

  8. 【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术

    文章目录 一.Android 中的 Java 源码打包流程 1.Java 源码打包流程 2.字符串常量池 二.Android 中的字节码操作方式 一.Android 中的 Java 源码打包流程 Ja ...

  9. java源文件编译成jar_从源文件和JAR文件构建Java代码模型

    java源文件编译成jar 最近,我花了一些时间来研究有效java ,该方法正在GitHub上达到300星(可以免费帮助实现目标:D). Effectivejava是在您的Java代码上运行查询的工具 ...

  10. ubuntu下C编程,编译基础( 转)

    buntu下C编程,编译基础 C 编程中相关文件后缀 .a 静态库 (archive) .c C源代码(需要编译预处理) .h C源代码头文件 .i C源代码(不需编译预处理) .o 对象文件 .s ...

最新文章

  1. html 文件上传_某平台存在多处任意文件上传
  2. Android Studio引入.so文件的正确姿势 以及调用.so 文件时报错has text relocations 解决
  3. python3 sleep 并发_Python3并发写文件与Python对比
  4. 用Excel的VBA实现文本匹配与替换
  5. php 递归函数自调用函数,PHP闭包实现函数的自调用实现递归
  6. Deltix Round, Spring 2021 D. Love-Hate 随机化 + sos dp(高维前缀和)
  7. c语言编程统计单词的个数,使用c语言如何统计单词个数
  8. leetcode —— 1319. 连通网络的操作次数
  9. ROS2官网安装教程补充
  10. 购物车单选全选,计算总价,出现个小问题,没找到.....
  11. C#操作mongodb的一些总结
  12. java日志分级概要
  13. Struts2.0 + Spring2.5 + Hibernate3.3开发环境的配置(1)
  14. JS网页特效实例:让网页前进和后退
  15. 三菱FX5U系列PLC中的DSZR机械原点回归指令(带DOG搜索)的详细分析
  16. 牛客--2019网易--扭蛋机
  17. Fig (无花果)任务流水线式 多线程框架使用
  18. 青春犹如一场盛大的演出,
  19. Hi3516芯片简介,Hi3516EV300处理器参数介绍
  20. 802.11网络协议细节(五)

热门文章

  1. Sublime Text2使用教程
  2. 多页TIF转PDF 【JAVA】
  3. lavas -pwa vs RN vs WEEX
  4. ROS路由器做PCQ限速教程
  5. Python中函数介绍及其使用
  6. 深入理解c语言运算符优先级
  7. Tomcat9-默认登录名/密码
  8. 基于STM32cubemx的STM32F107vct6的代码生成,实验四串口与DMA
  9. 质量评估指标:SSIM(Structural similarity 结构相似性)
  10. 淘宝定时任务 tbschedule实战