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