它在第二个elif处不断循环

时间:2018-09-29 13:28:53

标签: python lexer

它不能超过第二个省略号。该代码是Python 3.7 This is the result

中解释器的一部分。
def make_tokens(self):
    tokens = []
    while self.current_char is not None:
        if self.current_char.isspace():
            print("debug if")
            self.advance()
            continue
        elif self.current_char == "''":
            print("debug elif 1")
            tokens.append(Token(STRING, self.string()))
        elif self.current_char in LETTERS:
            print("debug elif 2")
            tokens.append(Token(IDENTIFIER, self.identifier))
    return(tokens)
    print("debug make tokens end")

1 个答案:

答案 0 :(得分:2)

可能是因为self.current_char在第一次迭代中位于LETTER中。然后,您无需在第二个if内进行更改,因此它会一直保留在字母中。

您应该这样做:

def make_tokens(self):
    tokens = []
    while self.current_char is not None:
        if self.current_char.isspace():
            print("debug if")

            # self.advance() remove this

            # continue remove this
        elif self.current_char == "''":
            print("debug elif 1")
            tokens.append(Token(STRING, self.string()))
        elif self.current_char in LETTERS:
            print("debug elif 2")
            tokens.append(Token(IDENTIFIER, self.identifier))

        self.advance() # add this

    return(tokens)
    print("debug make tokens end")