我创建了自己的编程语言,可以编译成图灵机指令,我想知道如何实现if(a>b) do _ end
. 这是语言的定义(也可在此处获得)
变量以任意宽度动态分配,因此可以具有任意大的整数
每行可以做三件事之一,它可以调用一个函数(修改它的参数),启动一个while循环(这实际上更像是一个for循环),或者分配一个变量。
可用的函数有incr
(加一,可能溢出),decr
(减一,可能溢出),pop
(从变量中删除最后一位),first
(将变量中最重要的 0 更改为 1)和frost
(更改最显着 1 到 0)。
while 循环具有以下语法,
while a <func> {
_
}
基本上每次循环它都会<func>
直到a
出现错误情况。错误情况如下,incr
全first
1,decr
全frost
0,pop
去掉最后一位。在 while 循环后,循环变量的所有位incr
或所有位都将为 0,与and相反。While 循环必须在函数调用时结束,并且它们会在每次运行后删除其中包含的所有变量。frost
first
decr
赋值可以根据语法做一些不同的事情。a=b
意味着将变量复制b
到变量所拥有的空间中,a
如果b
长度超过a
这会导致未定义的行为,除非a
是创建了最新的变量。a=b,5
分配b
给a
左侧五个填充位(设置为零),再次溢出导致未定义的行为,除非a
是创建的最新变量。a=a,0
归零a
。最后a=5,3
将分配5 % 2**3
到a
3 位。
现在我可以if(a != 0) do _ end
用
while a decr {
_
t=0,1
while a incr {
incr(t)
}
incr(t)
}
我的问题是如何实现其他 if 语句,如if(a==b)
,if(a!=b)
和if(a>b)
作为第二个问题是这种语言图灵完备,我相信基于这个答案编程语言是否有最低标准是图灵完备的?. 我知道语言满足 1 到 5,但我不确定 6。