命令在我制作的解释器中不起作用



(请耐心等待,我的代码真的很草率,可能有点难以理解,主要是因为所有的变量,globals和if语句…)

我创建了一种解释性的、深奥的、基于磁带的编程语言,该语言是为代码高尔夫设计的,名为Tellurium(它是一个元素fyi)。到目前为止,除了条件语句外,它一直运行得很好。

以下是条件语句的语法:

(integer[code]

这是相当于它的Python:

if tape[selectedCell] == integer: code

所以,我的问题是,在一个代码中只能使用一次语句。多用一次,它不会起作用。它甚至没有抛出错误。它什么都不做。


以下是一些无效命令的示例,以及它们应该输出的内容。

(0[^](1[^]+(1[^]应输出0后接1。相反,输出0。我认为这与第一个(1[^]有关,解释器应该跳过它,因为所选单元格的值不是1。

下面是另一个例子:+++++(0[^](5[^]。单元格的值将递增到5。然后,(0[^]检查单元的值是否等于零。事实并非如此,所以应该跳过它。接下来,(5[^]检查单元的值是否等于5。它是,并且它应该输出5。相反,它输出5n5

还有一个例子:(0[^](1[^](0[^](1[^]指令应该被解释器完全忽略,因为单元格的值不是1。还是零。因此,所需的输出应该是0n0,因为有两个0[^]命令。

CCD_ 15运行良好。它输出单元格的值,即0。

我认为问题与应该跳过的语句有关,比如示例2中的(1[^]


我不知道为什么这不起作用,我已经试过了。我很感激你的帮助,我真的很想让这种语言重新流行起来!


这是一个没有所有额外命令的解释器。

tape = [0] * 25500
readingNum = False
readingIf = False
num = []
code = []
selectedCell = 0
def prompt():
    userInput = input("> ")
    return userInput
def read(cmd):
    length = len(cmd)
    commands = list(cmd)
    for i in range(0, length):
        parse(commands[i])
def parse(cmd):
    global tape
    global readingNum
    global readingIf
    global num
    global code
    global selectedCell
    if readingNum == True:
        if cmd == "[":
            readingNum = False
            readingIf = True
        else:               
            num.append(cmd)
    elif readingIf == True:
        if cmd == "]":
            readingIf = False
            if tape[selectedCell] == int(''.join(num)):
                read(code)
                code = []
                num = []
            else:
                return
        else:
            code.append(cmd)
    elif cmd == "^":
        print(tape[selectedCell])
    elif cmd == "+":
        tape[selectedCell] += 1
    elif cmd == "(":
        readingNum = True
    else:
        print("Error")
while 1:
    read(prompt())

这不起作用,因为您使用的是全局变量。当您为第三个if语句点击if tape[selectedCell] == int(''.join(num)):时,nums包含['1', '1'],因为两个if语句都向num添加了1,所以当您点击int(''.join(num))时,您最终得到的11不等于1

您需要重构此代码以停止使用全局变量。关于如何不使用全局变量来表示堆栈的工作示例,请参阅我几个月前写的esolang。它并没有像我希望的那样完成,但它有一个没有全局变量的工作堆栈。

相关内容

最新更新