创建解析树的目的是什么?

What is the purpose of creating a parse tree?

为代码创建解析树有什么用?这听起来可能很愚蠢,但我就是不明白它是如何工作的。我知道考虑优先级在算术运算中很有用。但是为什么要将代码转换成树呢?之后会发生什么?我似乎无法理解我可以用解析树做什么。我正在尝试编写一个非常小的解释器来执行算术运算和简单的 if 条件。我写了一个小语法。我有一个解析树。但是不知道怎么办。

好吧,如果你有一个解析树并且你想完成你的解释器,你要做的就是递归地评估树。

要评估代码块,您需要逐条评估它的每个语句。

要评估 if 语句,请评估条件表达式,并根据结果评估 then 分支或 else 分支(如果存在)。

要评估加法,您需要评估每个操作数,然后将它们相加。

有语法树意味着这些操作是自然的,它们通常涉及评估当前节点的(某些)子节点,然后可能将结果组合在一起。