简易Parser入门【一】:从树的递归开始
Parser就是将字符串转化成AST(Abstract Syntax Tree)的程序 首先我们从树类的简单解析开始,假设有一个树节点(它是一个二叉树节点): class Tr: def __init__(self, val, left=None, right=None): self.val = val self.left = left self.right = right 我们用这个树节点构造一棵树: t_root = Tr(5, Tr(3, Tr(4), Tr(6)), Tr(1, Tr(2), Tr(7))) 它的结构如图所示,我们想打印从根节点到每个叶子节点的路径怎么办呢?遍历树一般都能想到用递归,但是递归到底递归什么东西呢?递归函数的参数如何选择?返回什么? 思考递归的时候,我们可以从问题点出发,先寻找停止递归的条件。我们需要打印从根节点到每个叶子节点的路径,所以停止条件就是到达叶子节点了。可以先用代码写出来: def print_leaf(tr_in): # type: (Tr) -> None if tr_in.left is None and tr_in.right is None: # todo: stop here and do something 我们达到停止条件需要做什么呢?需要打印。打印什么?打印从根节点到叶子节点的路径。好了,我们现在达到了叶子节点