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

时间:2017-02-27 19:21:28

标签: python parsing

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

2 个答案:

答案 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
相关问题