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

问题描述 投票:1回答:2

由于我过去的问题没有得到解答,我会再问一个较短的版本:我需要帮助在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语句解析器,减去条件吗?

python parsing
2个回答
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
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.