为什么我的解析器不能用我的语言打印字符串

2024-09-28 05:26:22 发布

您现在位置:Python中文网/ 问答频道 /正文

class Lex:
    def run(args, string):
        if args == "print":
            print(str(string))
class Calin:
    string = ""
    running = ""
    def parse(args):
        lexic = Lex
        string = ""
        tok = ""
        state = 0
        for char in args:
            tok += char
            if tok == " ":
                if state == 0:
                    tok = ""
                elif state == 1:
                    tok = " "
            elif tok == "\"":
                if state == 0:
                    state = 1
                elif state == 1:
                    state = 0
            elif state == 1:
                string += char
            elif tok == "print":
                running = "print"
        lexic.run(running, string)

trans = Calin
trans.parse("print \"WOW A STRING\"")

Tags: runstringifparsedefargsrunningclass
1条回答
网友
1楼 · 发布于 2024-09-28 05:26:22

因为你只在tok == "\""的时候才做state == 1,这从来没有发生过(你一直在给它添加str)。将其更改为char工作:

class Lex:
    def run(args, string):
        if args == "print":
            print(str(string))

class Calin:
    string = ""
    running = ""
    def parse(args):
        lexic = Lex
        string = ""
        tok = ""
        state = 0
        for char in args:
            tok += char
            if tok == " ":
                if state == 0:
                    tok = ""
                elif state == 1:
                    tok = " "
            elif char == "\"": # <<< Change this
                if state == 0:
                    state = 1
                elif state == 1:
                    state = 0
            elif state == 1:
                string += char
            elif tok == "print":
                running = "print"
        lexic.run(running, string)

trans = Calin
trans.parse("print \"WOW A STRING\"")
# WOW A STRING

相关问题 更多 >

    热门问题