把网络猫语写成程序

2007年公开的LOLCODE规范,把网络猫图中故意拼错、语法夸张的英语变成程序语言的词汇。亚当·林赛创设这门语言,保留“打招呼”“给我”“谢谢再见”一类口吻,同时让指令形成内部一致、真正能够执行的规则。语言的趣味来自阅读代码时的声音和语气。

参考:[1] [4]

1.2规范确定共同起点

2007年7月12日标为最终草案的《LOLCODE Specification 1.2》,试图为后续版本设立共同基础。文档说明,部分通常被期待的功能有意保留空缺,以便以后增添,而不必不断改变既有规则。

规范规定程序以HAI开头,并在其后写语言版本,以KTHXBYE结束。空格分隔词元,换行通常结束语句;逗号也可分隔同一行上的多条语句。缩进本身不决定结构。变量名区分大小写,因此满篇大写的视觉风格并不意味着所有标识符只能大写。

参考:[1]

从一句问候到一个加法

依照1.2规则,三行程序可以依次写成HAI 1.2、VISIBLE "HAI WORLD!"、KTHXBYE。中间一行把字符串送到标准输出。程序开头和结尾像一段网络对话,其内部仍有清楚的开始、动作和结束。

进一步设想一段示例:用I HAS A total ITZ 2声明并初始化变量,再以total R SUM OF total AN 3更新它,最后用VISIBLE total输出。按规范推算,结果为5。SUM OF把运算名称放在两个参数前面,AN可作参数分隔。这里的猫语承担了变量声明、赋值、加法与输出这些具体职能。

参考:[1]

夸张词汇背后的类型与控制

1.2规范采用动态类型:整数称NUMBR,浮点数称NUMBAR,字符串称YARN,布尔值称TROOF;未初始化的变量为NOOB。变量可以先保存字符串,再被赋成整数。条件判断用O RLY?引出,分别以YA RLY和NO WAI安排分支,再用OIC关闭。

1.2版把数组和字典列为尚未充分规定的内容,也没有定义向文件打印的统一标准。文档以变量、运算、控制结构和终端输入输出为共同起点,为后续版本留下扩充空间。

参考:[1]

解释器把语法变成可运行工具

贾斯廷·梅扎编写的早期C语言解释器lolcode,说明自己支持几乎全部1.2功能及部分1.3提案,同时列出尚未完成的Unicode支持等事项。它既可从文件读取程序,也可从标准输入接收文本,使用者不必只在网页上观看示例。

该项目后来建议转用同由梅扎维护的lci。lci的说明把符合规范、可移植性和文档列为目标,并随源码提供单元测试。文档将兼容1.3规范的版本与future开发分支区分,新增功能在后者继续发展。LOLCODE的延续包含语言规则与实现工程两条工作线。

参考:[2] [3]

后来的课程设计材料

2021年春,哥伦比亚大学“程序语言与翻译器”课程中的Meowlang项目提案明确以LOLCODE为灵感来源。五人团队准备保留相近的趣味语法,改用静态类型,并规划数组及有限的面向对象功能。

这个具体例子表明,LOLCODE还可以成为讨论语言取舍的材料:学习者既能沿用熟悉的变量和控制结构,又能重新选择类型规则、数据组织与词汇。2007年公开的猫语实验,因此留下了一套可供比较、实现和修改的语言设计资源。

参考:[4]