📜  编译器设计中的解析树

📅  最后修改于: 2021-08-27 06:40:14             🧑  作者: Mango

在本文中,我们将研究编译器设计中“解析树”的概念和用法。首先,让我们检查两个术语:

  • 解析:这意味着将(一个句子)分解为各个组成部分并描述其句法作用,或者简单地说,这就是解析字符串或文本的行为。
  • 树:树可能是一种广泛使用的抽象数据类型,它模拟分层的树结构,其根值和具有父节点(表示为一组链接的节点)的年轻人的子树。

解析树:

  • 解析树是终端或非终端的分层表示。
  • 这些符号(末端或非末端)表示语法的派生,以产生输入字符串。
  • 在解析时,字符串使用开始符号跳出。
  • 语法的开始符号必须用作“语法分析树”的根。
  • 解析树的叶子表示终端。
  • 每个内部节点代表语法的产生。

绘制解析树的规则:

  1. 所有叶节点都必须是终端。
  2. 所有内部节点都必须是非终端节点。
  3. 按顺序遍历给出原始输入字符串。

示例1:
让我们以语法(生产规则)为例。

S -> sAB
A -> a
B -> b

输入字符串为“ sab”,则分析树为:

示例2:
让我们再举一个语法(生产规则)的例子。

S -> AB
A -> c/aA
B -> d/bB

输入字符串为“ acbd”,则分析树为:

解析树的用途:

  • 它通过反映输入语言的语法来帮助进行语法分析。
  • 它使用具有符合语法的结构的输入的内存表示形式。
  • 使用解析树而不是语义动作的优点:您将对信息进行多次传递,而不必重新解析输入。