我输入A并需要使用Python
将其转换为B.A:
[['*', '1', '2', ['-', '4', '3']]]
B:
'1*2+(4-3)'
有人可以帮忙吗?
答案 0 :(得分:1)
这有两个部分:
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。