python之如何为 if 语句编写词法分析器/解析器
由于我之前的问题没有得到回答,我会再问一个更短的版本: 我需要帮助为 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"
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。