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

时间:2014-04-21 23:28:00

标签: python parsing binary-search-tree

我正在尝试实现一个解析函数。 "从中缀的标记流和当前索引到标记流中,构造并返回树,作为节点的集合,表示表达式"这就是我到目前为止所提出的:

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

错误在上一行中是正确的:

lst = 0

您正在使lst成为int,然后尝试将其作为一个列表来访问它,从而引发您所看到的错误。 token = lst[i]可能应该是:

token = tokens[i]

答案 1 :(得分:0)

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

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)