在Python中解析令牌列表

目标:我有一个令牌列表。每当有一段由括号包围的令牌时,例如{t1,t2等},我需要将它变成一个新的子列表。下面提供了一个我期望的结果的例子。在Python中解析令牌列表


解析:[ '(事实上)', 'DUP', '长度', '/ N', 'EXCH', 'DEF', '/事实', '{', '0', '''','','','','','','''''',' n','1','sub','fact','n','mul','}','ifelse','end','}','def','n','fact' ,'stack'])

返回: ['(facto)','dup','length','/ n','exch','def','/ fact',[0,' dict','begin','/ n','exch','def','n',2,'lt',[1],['n',1,'sub','fact',' n','mul'],'ifelse','end'],'def','n','fact','stack']


这是到目前为止我的代码:

def parse1(L): 

newL = []

for x in L:

if x == '}':

return newL

elif x == '{':

newL.append(parse1(L[1:]))

else:

newL.append(x)

return newL

它的工作原理,以至于每当发生{我关禁传列表的其余部分进入功能再次,用时基本情况是发生}。这是行得通的,但是一旦它退出递归并创建一个子列表,它正在迭代的元素“x”还没有超过这个部分。例如,如果我们的列表是:['{','1','}'],结果应该简单地为[[1]]。然而,发生的事情是返回[[1],'1'],因为一旦它创建了子列表(似乎工作正常),循环正在经历的下一个元素“x”实际上是该子列表的一个元素,它是紧跟在'{'之后的元素,根据我的代码,它被添加到列表中。

我觉得这是一个非常简单的解决方法,但我花了很长时间试图弄清楚。正如我已经解释的那样,我理解这些问题,但不能在我的生活中弄清楚如何解决它。任何帮助将不胜感激!

回答:

这一个解决方案是仿照你的尝试(兼营整数):

# This assumes brackets are properly balanced 

def parse1(L):

newL = []

i = 0

while i<len(L):

x = L[i]

if x == '}':

# Return the parsed list & the unparsed portion of the original list

print(newL, L[i:])

return newL, L[i+1:]

elif x == '{':

# Split rest of L into parsed & unparsed portions

parsed, unparsed = parse1(L[i+1:])

# Insert parsed portion into current list

newL.append(parsed)

# Reset i & L for unparsed portion

i, L = 0, unparsed

else:

# Convert x to an integer if possible

try:

x = int(x)

except:

pass

newL.append(x)

i += 1

return newL

以上是 在Python中解析令牌列表 的全部内容, 来源链接: utcz.com/qa/257233.html

回到顶部