python之如何为 if 语句编写词法分析器/解析器

jillzhang 阅读:33 2024-09-07 23:24:14 评论:0

由于我之前的问题没有得到回答,我会再问一个更短的版本: 我需要帮助为 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" 


标签:Python
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号