首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python -小LISP算术解释器

Python -小LISP算术解释器
EN

Stack Overflow用户
提问于 2014-01-30 17:54:17
回答 1查看 85关注 0票数 0

我有输入A,需要使用Python将其转换为B

答:

代码语言:javascript
运行
复制
[['*', '1', '2', ['-', '4', '3']]]

B:

代码语言:javascript
运行
复制
'1*2+(4-3)' 

请帮帮忙好吗?

EN

回答 1

Stack Overflow用户

发布于 2014-01-30 18:54:59

这包括两个部分:

1)对文本进行标记。也就是说,遍历字符并构建仅包含各个部分的小对象。在Python中,您可以为这一部分使用正则表达式,而在其他编程语言中,您只需构建一个小型状态机。因此,在您的示例中,最后的标记列表为:

代码语言:javascript
运行
复制
"[" "[" "*" "1" "2" "[" "-" "4" "3" "]" "]" "]"

2)一旦你有了一个标记列表,你就可以从数组中切下第一个元素并对其做出反应。例如,创建一个执行斩波的函数,然后调用另一个函数来实际执行每个元素。在伪代码中:

代码语言:javascript
运行
复制
fun parseOneElement tokens
    switch pop(tokens)
        case "[": return parseBrackets(tokens)
        case "*": return parseMultiplication(tokens)
        case "-": return parseSubtraction(tokens)
        else: return it
    end
end

fun parseBrackets tokens
    result := parseOneElement(tokens)
    pop(tokens,"]") or die
    return result
end

fun parseMultiplication tokens
    arg1 := parseOneElement(tokens)
    arg2 := parseOneElement(tokens)
    return "(" . arg1 . "*" . arg2 . ")"
end

例如,您所做的是通过获取两个参数来递归解压缩表达式,再次使用parseOneElement。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21453053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档