📜  编译器设计中的解析树

📅  最后修改于: 2021-09-28 11:09:50             🧑  作者: Mango

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

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

解析树:

  • 解析树是终端或非终端的分层表示。
  • 这些符号(终结符或非终结符)代表产生输入字符串的文法的推导。
  • 在解析时,字符串使用开始符号弹出。
  • 语法的起始符号必须用作解析树的根。
  • 解析树的叶子代表终端。
  • 每个内部节点代表语法的产生式。

绘制解析树的规则:

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

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

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

输入字符串是“sab”,那么解析树是:

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

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

输入字符串是“acbd”,那么解析树是:

解析树的用途:

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