也许你听说过剧作家威廉·莎士比亚为英语贡献了 1,700 个新单词。但是你知道他也有一个完整的编程语言吗?
SPL(莎士比亚编程语言)的创建是为了使源代码类似于莎士比亚戏剧。它是一种深奥的语言,也称为esolang。Esolang 是一种计算机编程语言,旨在尝试奇怪的想法、为程序员创造挑战,或者仅仅作为一种娱乐来源,而不是用于实际用途。
在之前的一篇文章中,我分享了如何使用 受施瓦辛格启发的语言 ArnoldC 构建应用程序。在这个实验中,我将介绍一个完整编写的“Hello World”示例。如果您想跟随操作,您需要 GCC、brew
或 make
、Python 2 以及大量空闲时间和耐心。(Python 2 自 2020 年起已不受支持,所以这仅供娱乐。)
这是什么语言?
在 SLP 中,代码就是剧本,剧本中的角色就是变量。如果您想为角色赋值,例如哈姆雷特,一个负值,您可以将他和另一个角色放在舞台上,让那个角色侮辱哈姆雷特。
让某人告诉角色倾听他们的内心并说出他们的想法会产生输入和输出。该语言包含条件语句,其中角色互相询问问题,以及跳转语句,其中他们决定转到特定的幕或场景。角色也是可以被推入和弹出的堆栈。
我在哪里可以获得这种语言?
您可以从 SPL 网站下载该语言,该网站还包含大量文档。下载 tar.gz 文件后,您就可以开始了
$ cd ~/spl
/spl$ ls
spl-1.2.1.tar.gz
/spl$ gunzip spl-1.2.1.tar.gz
/spl$ tar -xvf spl-1.2.1.tar
/spl$ cd spl-1.2.1/
/spl/spl-1.2.1$ ls
AUTHORS examples libspl.c makescanner.c strutils.c
COPYING grammar.y LICENSE NEWS strutils.h
editor include Makefile spl.h telma.h
然后您可以运行 make
命令来编译解释器,或者使用 brew
进行更快的安装和简单的预编译。我在使用 make
时遇到问题,所以我再次运行了 brew
$ brew install --build-from-source shakespeare
<snip>
==> Downloading https://ghcr.io/v2/homebrew/core/gettext/blobs/\
sha256:33f840e667c6ee0f674adb279e644ca4a1b3cd1606894c85d9bbce1b5acc0273
==> make install
? /home/linuxbrew/.linuxbrew/Cellar/shakespeare/ \
1.2.1: 9 files, 154.1KB, built in 1 second
==> Running `brew cleanup shakespeare`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
接下来是什么?
安装 SPL 后,获取其他依赖项,首先是 Python 2。您可以使用任何软件包管理器安装 Python 2。接下来,获取一个使用 Python 处理 SPL 文件的 C 编译器,可以从 SPL GitHub 仓库下载。下载文件后,只需解压缩并在目录中根据需要使用它们即可。
在基本示例中,我们可以采用一个预制文件。在这种情况下,我将抓取 Hello World 来测试编译器并运行代码。以下是命令和输出。
/spl/Spl-master$ python2 splc.py ../spl-1.2.1/ \
examples/hello.spl > hello.c
/spl/Spl-master$ gcc hello.c -lm
/spl/Spl-master$ ./a.out
Hello World!
如您所见,我使用编译器将文件转换为 C,然后使用 gcc
使用链接器选项标志来使用库,并使用 -m 标志来指定目标文件。
您可以通过访问 SPL 网站了解整个 Hello World SPL 的编写方式。
如何添加一些数字
在本节中,我将解释如何将数字相加。准备好——这可能需要一段时间。
首先创建一个文件并为你的剧本命名
/spl/Spl-master$ vi math.spl
Adding multiple numbers together.
~
~
~
~
~
~
~
~
~
"math.spl" [New File]
接下来,给剧本一些角色。在本例中,我从 SPL GitHub 仓库中可以找到的可接受角色列表中选择了两个。这两个角色将进行一些基本的加法运算:2+2=4。
首先介绍他们。介绍并不重要,所以你可以随意介绍他们。可以随意滑稽一些
- 亚瑟,一个被写过太多次并且有太多电影的角色
- 克莱奥帕特拉,一个被写过的女士,但故事通常只关于她和谁约会
接下来,设置你的幕和场景
- 要创建幕,输入
Act
、罗马数字幕号、冒号,然后是幕的名称,后跟句点。幕可以命名为你能想到的任何名称。 - 要创建场景,输入
Scene
、罗马数字场景号、冒号,然后是名称,后跟句点。同样,您可以自由选择您想要的任何名称。
例如
- 第一幕:这是我们唯一的幕。
- 第一场:亚瑟和克莱奥帕特拉被分配用户输入的值。
输入 [Enter Cleopatra and Arthur]
将你的角色带到舞台上。
现在每个人都在房间里了,你需要设置输入值。SPL 中的角色被设置为具有“NAME:”,后跟一个正确标点的句子。对于输入值,使用的行是“Listen to your heart.”。当收集到输入时,说话的角色已被分配该值。
在这种情况下,我用一些有趣的句子设置了它。请注意,一次场景中只能有两个角色。
[Enter Cleopatra and Arthur]
Cleopatra:
Listen to your heart.
Arthur:
LISTEN to your heart!
现在输入已准备就绪,是时候进入第二场了,数学运算将在那里发生。
第二场:这两个人变成了一台数学机器
要添加值,请在每个角色中设置存储值。然后一个角色将通过从另一个角色收集输入来进行数学运算。加法命令是 You are the sum of yourself and I.
只是提醒一下,标点符号很重要:我花了 20 分钟没有注意到测试期间缺少标点符号。
Arthur:
You are the sum of yourself and I.
在第三场中,我们将让克莱奥帕特拉将其值输出到标准输出。要做到这一点,你必须让场景中的另一个角色告诉她 Open your heart.
如果你将值求和到一个角色中,场景中的另一个角色应该是说 Open your heart.
的那个人。
第三场:克莱奥帕特拉将敞开心扉。
Arthur:
Open your heart.
要退出程序,请使用 [Exeunt]
。您也可以让角色使用 [Exit NAME and NAME]
退出,但我个人觉得一个词更容易。
最后,你的程序应该看起来像这样
Adding multiple numbers together.
Arthur, a man who has been written about one too many times \
and has too many movies.
Cleopatra, a lady who has been written about but usually the \
stories are only about who she dated.
Act I: This is the only one we'll have.
Scene I: Arthur and Cleopatra are assigned user-inputted values.
[Enter Cleopatra and Arthur]
Cleopatra:
Listen to your heart.
Arthur:
LISTEN to your heart!
Scene II: These two become a math machine.
Arthur:
You are the sum of yourself and I.
Scene III: Cleopatra will open her heart.
Arthur:
Open your heart.
[Exeunt]
要运行你的新程序,请执行三步编译和运行。
/spl/Spl-master$ python2 splc.py math.spl > math.c
/spl/Spl-master$ gcc math.c -lm
/spl/Spl-master$ ./a.out
2
2
4
编码还是不编码,这是一个问题
这个小项目绝对是耗时的,并且对于编写一个简单的数学脚本来说是完全多余的。用用户输入回显实际引语来完成整个事情将花费更多时间。话虽如此,如果你感觉自己像莎士比亚,你可以设置一个完整的快乐的小剧本,它就是一个程序。
评论已关闭。