解析函数,python(二进制搜索树)

2024-10-04 01:30:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现一个解析函数。”从令牌的中缀流和令牌流的当前索引,构造并返回树,作为节点集合,表示表达式“This is what i have up to have to the token stream:

def parse(tokens, i = 0):
   lst = []
   token = lst[i]
   left, i = parse(lst, i+1)
   right, i = parse(lst, i+1)

   if token.isdigit():
       return mkLiteralNode(token)
   elif token.isidentifier():
       return mkVariableNode(token)
   else:
       left, i = parse(lst, i+1)
       right, i = parse(lst, i+1)

   return True

所以一般来说,token.isdigit意味着这个命令必须返回一个整数,即mkLiteralNodetoken.isidentifier应该返回变量,或者mkVariableNode。测试此函数时出现错误,错误为:

    token = lst[i]
TypeError: 'int' object is not subscriptable

我怎样才能解决这个问题?你知道吗


Tags: to函数righttokenreturnparseishave
2条回答

错误就在前一行:

lst = 0

您正在将lst设为int,然后尝试将其作为抛出所看到错误的列表进行访问。token = lst[i]可能应该是:

token = tokens[i]

很抱歉给您带来不便,但我研究并找到了解决此问题的另一种方法:

def parse(tokens):

   tok = next(tokens)

   if tok.isdigit():
       return ('literal', tok)
   elif tok == "+":
       return ('add', parse(tokens), parse(tokens))
   elif tok == '-':
       return ('subtract', parse(tokens), parse(tokens))
   elif tok == "*":
       return ('multiply', parse(tokens), parse(tokens))
   elif tok == "//":
       return ('divide', parse(tokens), parse(tokens))
   else:
       return ('variable', tok)

相关问题 更多 >