由于我过去的问题没有得到解答,我会再问一个较短的版本:我需要帮助在Python中为if语句编写解析器。作为参考,这是我语言中if语句的示例:
IF 2 > 1 THEN
OUT "Hello World!" // Print Statement
ENDIF
我已经解析了这样的条件,它们返回true或false:
elif toks[i] + " " + toks[i+1][0:3] + " " + toks[i+2] + " " + toks[i+3][0:3] + " " + toks[i+4] == "IF NUM EQEQ NUM THEN":
if toks[i+1][4:] == toks[i+3][4:]:
print("TRUE, " + toks[i+1][4:] + " is equal to " + toks[i+3][4:])
return true
i += 5
else:
print("FALSE, " + toks[i+1][4:] + " is not equal to " + toks[i+3][4:])
return false
顺便说一句,那就是平等。我正在考虑更改它,然后创建一个条件函数,然后在IF解析器中使用它。我遇到的一个问题是使用迭代器值跳转到ENDIF语句...有人可以指导我如何在python中编写if语句解析器,减去条件吗?
我想到了!虽然它非常原始并且不支持嵌套(但是),我对我的问题有一个简单的解决方案。基本上,每当它检测到'IF'标记时,它会在此之后循环遍历所有标记,直到它找到并且'ENDIF'标记为止。这样做时,它会增加一个名为'ii'的迭代器,最后将主迭代器设置为'ENDIF',忽略if语句中的代码。只有在条件解析器返回false时才会执行此操作。
码:
def doIF_FALSE(tokens):
ii = 0
for token in tokens:
if token == "IF":
ii = 1
elif token == "ENDIF":
ii += 1
break
else:
ii += 1
return ii
对于调用,我设置迭代器值如下:i = doIF_FALSE(tokens[i:])
示例代码:
IF 1 > 2 THEN
OUT "1 is greater than 2"
ENDIF
OUT "You passed the if statement"
输出:
"You passed the if statement"
elif toks[i]+" "+toks[i+1][0:3]+" "+toks[i+2][0:4]+" "+toks[i+3][0:3]+" "+toks[i+4][0:4]=="IF NUM EQEQ NUM THEN":
if toks[i+1][4:]!=toks[i+3][4:]:
print("false")
break
i+=5