由于我过去的问题没有得到解答,我会再问一个较短的版本: 我需要帮助在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语句解析器,减去条件吗?
答案 0 :(得分:1)
我明白了! 虽然它非常原始并且不支持嵌套(但是),我对我的问题有一个简单的解决方案。基本上,每当它检测到“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"
答案 1 :(得分:-1)
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