我正在尝试编写一个将嵌套条件语句转换为单行条件的小解析器。一个基本的例子是:
if age > 15:
if size == 3:
test = 1
if size == 4:
test = 2
转换为:
'if age > 15 and size == 3: test=1'
'if age > 15 and size == 4: test=2'
我首先尝试使用python ast
模块,但在这种情况下遍历树可能不是一个好主意。我认为使用正则表达式也许是一个好主意。我正试图帮助解决这个问题的策略。
答案 0 :(得分:1)
尝试使用堆栈: (此程序不进行任何错误检查,它假设您的代码与上面的相同,并且必须使用制表符,而不是4个空格)
mystack=[]
toprint=[]
ins=input('Next line: ')
while ins!='':
level=0
while ins[0]=='\t':
ins=ins[1:]
level+=1
if ins[0:2]=='if':
if len(mystack)==level:
mystack.append(ins[3:-1])
else:
mystack=mystack[:level]
mystack.append(ins[3:-1])
else:
if level!=len(mystack):
mystack=mystack[:level]
toprint.append('if ')
for i in mystack:
toprint[-1]+=i
toprint[-1]+=' and '
toprint[-1]=toprint[-1][:-5]+': '
toprint[-1]+=ins
ins=input('Next line: ')
print()
for i in toprint:
print(i)