Python 为什么赢了';我的解析器不能用我的语言打印字符串

Python 为什么赢了';我的解析器不能用我的语言打印字符串,python,compiler-construction,Python,Compiler Construction,因为只有在tok==“\”“时,您才使state==1,这是永远不会发生的(您一直在向其添加strs)。将其更改为char可以: class Lex: def run(args, string): if args == "print": print(str(string)) class Calin: string = "" running = "" def parse(args): lexic = Lex

因为只有在
tok==“\”“
时,您才使
state==1
,这是永远不会发生的(您一直在向其添加
str
s)。将其更改为
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 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\"")
class-Lex:
def运行(参数、字符串):
如果args==“打印”:
打印(str(字符串))
类卡林:
string=“”
running=“”
def解析(args):
lexic=Lex
string=“”
tok=“”
状态=0
对于args中的字符:
tok+=char
如果tok==“”:
如果state==0:
tok=“”
elif状态==1:
tok=“”

elif char==“\”:#对不起,我不知道新的格式…为什么要使用类?你从来没有提到过
self
…请不要发布完全由代码组成的问题,除了标题。解释你的代码应该做什么,如何做,会发生什么(包括你可能得到的任何错误消息),以及你从调试中收集到的信息。注意:你可以使用调试器,甚至只添加一个
打印
,并查看
字符串
是否为空。因此,
state==1
永远不会为真。或者更清楚地说,
tok==“\”
从来都不是真的。@sepp2k正如我说的,我不知道新的格式,有没有办法把它切换回来?
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