为什么此代码不从源返回另一个打印值

发布于 2025-01-27 21:03:40 字数 1409 浏览 1 评论 0原文

keywords = ['PRINT']

class Lexer:
    def __init__(self, source):
        self.source = source
        self.sourceLen = len(source)
        self.cur = 0
        pass
    def getChar(self):
        if self.cur < self.sourceLen:
            return self.source[self.cur]
             
        return ""

    def next(self):
        self.cur += 1
        pass
    def skipNewline(self):
        while self.getChar() == '\n':
            self.next()
    def skipWhitespace(self):
        while self.getChar() == ' ':
            self.next()
    def skipBlanks(self):
        while self.getChar() == ' ' or self.getChar() == '\n':
            self.next()


    def tokenize(self):
        self.skipBlanks()
        curToken = ''
        char = self.getChar() # P
        
        if char in '"Hello, world!"'.split():
            curToken = ''
            return

        while char != ' ':
            curToken += char
            self.next()
            char = self.getChar()

        if curToken in keywords:
            print({"Token":curToken})
            curToken = ''


    def start(self):
        self.skipBlanks()
        
        while self.cur < self.sourceLen:
            self.tokenize()




source = """
PRINT "Hello, world!"
PRINT "second line!"
"""

lexme = Lexer(source)
lexme.start()
keywords = ['PRINT']

class Lexer:
    def __init__(self, source):
        self.source = source
        self.sourceLen = len(source)
        self.cur = 0
        pass
    def getChar(self):
        if self.cur < self.sourceLen:
            return self.source[self.cur]
             
        return ""

    def next(self):
        self.cur += 1
        pass
    def skipNewline(self):
        while self.getChar() == '\n':
            self.next()
    def skipWhitespace(self):
        while self.getChar() == ' ':
            self.next()
    def skipBlanks(self):
        while self.getChar() == ' ' or self.getChar() == '\n':
            self.next()


    def tokenize(self):
        self.skipBlanks()
        curToken = ''
        char = self.getChar() # P
        
        if char in '"Hello, world!"'.split():
            curToken = ''
            return

        while char != ' ':
            curToken += char
            self.next()
            char = self.getChar()

        if curToken in keywords:
            print({"Token":curToken})
            curToken = ''


    def start(self):
        self.skipBlanks()
        
        while self.cur < self.sourceLen:
            self.tokenize()




source = """
PRINT "Hello, world!"
PRINT "second line!"
"""

lexme = Lexer(source)
lexme.start()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文