第一次听说
whitespaces是在
matrix67神牛那里。。。
近日做
projecteuler ,我想到了这门语言。。于是打算用一下下。。我便去学习了一下下。。
我来介绍一下下
首先,这是一门计算机语言。。。扩展名是.ws
其实在扩展名上就可以知道这门语言是多么WS了。。
描述
这门语言的解释器只认三种字符。。。空格Space(ascii 32),制表键Tab(ascii 9)和回车LF(ascii 10)
就是三个你看不见的字符。。。
数据类型
其实这个语言只认整数(任意大)。。。
数据结构
whitespaces存在两种数据结构,其实就是堆(heap)和栈(stack)。该语言大部分操作都是在栈上执行的
操作
对于whitespaces我认为它不能说是存在语法。。只存在操作。。。
whitespaces能进行的操作并不多,但号称是图灵完备的(号称maillist里有证明。我没考证)
可进行操作如下:
push 有符号数x 向栈顶push一个数
dup push栈顶元素
cp 有符号数x push从栈顶数第x+1个元素 0.3版本增加
swap 交换两个栈顶元素
dis 删除栈顶元素
sli 有符号数x (我。。我。。我。。无奈了,教程里的那句话我没看明白。然后找到它给的解释器源码。。我看不懂。。该死的函数语言。我再用它的解释器来执行这个操作。。我就愣没明白这个操作怎么执行的)0.3版本增加
add,sub,mul,div,mod 加减乘除两个栈顶元素
store,retrieve 堆(heap)中存取元素
sign 无符号数x 作个标记,跳转用
jmp 无符号数x 跳转到sign x
jz 无符号数x 如果栈顶为0(是pop不是top),跳转到sign x
jn 无符号数x 如果栈顶小于0(是pop不是top),跳转到sign x
call 无符号数x 呼叫sign x处子程序
ret 子程序返回。。
exit 退出程序
readnum,readchar,outnum,outchar 输入输出字符和数字
详细程序
样例
关于这门语言的详细教程在
这里,中文翻译版在
这里。。
如果你希望用这门语言来写程序。。那么。。你需要一个
asm(伪)转whitespaces的工具
如果你想读懂一个whitespaces源码。。那么你可以找我要一个 whitespaces转asm(伪)的工具
写完了程序需要用解释器来运行,在
这里下载解释器
其实我顺便用C写了一个解释器,可是官方给的hanoi的那个数据我就是过不了阿。。。
其实呢,疯狂的不是写whitespaces解释器。。。而是用
whitesapces写whitespaces的解释器
最后,这篇文章我没有藏whitespaces源码。。。