Python-littlelisp算术解释器

Python-littlelisp算术解释器,python,lisp,interpreter,Python,Lisp,Interpreter,我有输入A,需要使用Python将其转换为B A: B: 有人能帮忙吗?这有两个部分: 1) 标记文本。也就是说,检查角色并构建只包含各个部分的小对象。在Python中,您可以使用正则表达式来完成这一部分,在其他编程语言中,您只需构建一个小型的状态机。因此,最后您的示例中的令牌列表将是: "[" "[" "*" "1" "2" "[" "-" "4" "3" "]" "]" "]" 2) 一旦你有了一个标记列表,你就可以从数组中切掉第一个元素并对它做出反应。也就是说,创建一个执行斩波的函数,然

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

A:

B:


有人能帮忙吗?

这有两个部分:

1) 标记文本。也就是说,检查角色并构建只包含各个部分的小对象。在Python中,您可以使用正则表达式来完成这一部分,在其他编程语言中,您只需构建一个小型的状态机。因此,最后您的示例中的令牌列表将是:

"[" "[" "*" "1" "2" "[" "-" "4" "3" "]" "]" "]"
2) 一旦你有了一个标记列表,你就可以从数组中切掉第一个元素并对它做出反应。也就是说,创建一个执行斩波的函数,然后调用另一个函数来实际执行每个元素。在伪代码中:

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

等等。也就是说,您要做的是通过抓取2个参数,再次使用parseOneElement递归地解压表达式。

您要找的是一个在Python中将前缀转换为中缀符号的程序。此外,您的输入数据是错误的,它应该是
[['+'、'*'、'1'、'2'、['-'、'4'、'3']]]
为什么保留的数据太宽?它说“我有输入A,需要使用Python将其转换为输入B”。它怎么可能更窄呢?我不是python程序员,但基本思想是将数组的第一个元素置于数组的所有其余元素之间,并递归地用于数组元素。我想你可以用理解力做到这一点。例如,
['+''4''5'[-'6''3''1']=>(4+5+(6-3-1))
@uliwitness我认为它不太宽。但是OP需要表现出一点努力(一些代码尝试),而不仅仅是“你能帮我解决我的问题吗?”没有任何进一步的信息,它可能只是一个为他们做家庭作业的请求。假设这是Lispy,那么输入不需要是
['+'、['*'、'1'、'2']、['-'、'4'、'3']]→ (+ (* 1 2) (- 4 3)) → ((1*2)+(4-3))
?此源代码是用哪种编程语言编写的?无特定语言。只是一个临时的伪代码,我是基于多年来我所见过的各种其他语言编写的。
"[" "[" "*" "1" "2" "[" "-" "4" "3" "]" "]" "]"
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