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

时间:2019-02-28 00:36:29

标签: python compiler-construction

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\"")

1 个答案:

答案 0 :(得分:2)

因为仅在state == 1时才生成tok == "\"",而这从未发生(您一直在向其中添加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