编程语言
首页 > 编程语言> > 解析Lisp输入到python的问题

解析Lisp输入到python的问题

作者:互联网

我试图将lisp输入解析为python列表.但是当我解析输入时,我得到了字符串列表,但我希望将单个元素作为int.

示例:当我解析以下输入时:“(2(10(5 11)))(5 6)(4)”
输出:[[[‘2′],[’10’,’5′]],[[‘5’],[‘6’]],[[‘4’]]]

我使用:[[map(int,x)for x in lst] for lst in test]将字符串转换为int但是这个函数只解析2级的嵌套列表.但是如果我有一个超过2的嵌套列表,我该怎么用它来解析?

我试过pyparsing但我不理解它.

解决方法:

如果你想使用pyparsing,你可以不进行任何后处理,如下所示.

import pyparsing as pp

integer = pp.Word(pp.nums).setParseAction(lambda m:int(m[0]))
expr = pp.Forward()
expr << pp.nestedExpr(content=pp.OneOrMore(integer | expr))
manyExpr = pp.OneOrMore(expr)

print manyExpr.parseString('(2 (10 (5 11))) (5 6) (4)')
    #returns [[2, [10, [5, 11]]], [5, 6], [4]]

这首先将整数定义为仅由数字组成的东西,并告诉pyparsing如何将它从一串数字转换为整数对象.接下来,它将表达式定义为括号内的表达式或整数列表.最后,为了解析您的示例,它会查找许多连续的表达式.

标签:pyparsing,python,lisp
来源: https://codeday.me/bug/20190725/1533022.html