什麼是語法樹?
其中每個葉子節點描述一個運算元,每個內部節點描述一個運算子。語法樹是語法分析樹的簡寫形式。
示例 1 - 為字串 a + b ∗ c − d 繪製語法樹。

構建語法樹的規則
語法樹中的每個節點都可以作為具有多個欄位的資料執行。在運算子的節點中,一個欄位識別運算子,其餘欄位包含指向運算元節點的指標。運算子稱為節點的標籤。以下函式用於為具有二元運算子的表示式建立語法樹的節點。每個函式都返回指向最近生成的節點的指標。
mknode (op, left, right) - 它生成一個帶有標籤 op 的運算子節點,以及兩個包含指向左節點和右節點的指標的欄位。
mkleaf (id, entry) - 它生成一個帶有標籤 id 的識別符號節點,以及包含 entry 的欄位,entry 是指向識別符號符號表條目的指標。
mkleaf (num, val) - 它生成一個帶有標籤 num 的數字節點,以及包含 val 的欄位,val 是數字的值。例如,為表示式 a − 4 + c 構建語法樹。在這個序列中,p1、p2、……p5分別是指向識別符號 'a' 和 'c' 的符號表條目的指標。
p1− mkleaf (id, entry a); p2− mkleaf (num, 4); p3− mknode ( ′−′, p1, p2) p4− mkleaf(id, entry c) p5− mknode(′+′, p3, p4);
樹以自底向上的方式生成。函式呼叫 mkleaf (id, entry a) 和 mkleaf (num 4) 為 a 和 4 構造葉子節點。指向這些節點的指標使用 p1 和 p2 儲存。然後,呼叫 mknodes (′−′, p1, p2 ) 建立內部節點,其中 a 和 4 的葉子作為子節點。語法樹將是

語法樹的語法制導翻譯
| 產生式 | 語義動作 |
|---|---|
| E → E(1) + E(2) | {E. VAL = Node (+, E(1). VAL, E(2). VAL)} |
| E → E(1) ∗ E(2) | {E. VAL = Node (∗, E(1). VAL, E(2). VAL)}) |
| E → (E(1)) | {E. VAL = E(1). VAL} |
| E → E(1) | {E. VAL = UNARY (−, E(1). VAL} |
| E → id | {E. VAL = Leaf (id)} |
Node (+, 𝐄(𝟏), 𝐕𝐀𝐋, 𝐄(𝟐). 𝐕𝐀𝐋) 將建立一個標記為 + 的節點。

E(1). VAL &E(2). VAL 是該節點的左子節點和右子節點。
類似地,Node (∗, E(1). VAL, E(2). VAL) 將使語法為 −

函式 UNARY (−, E(1). VAL) 將建立一個節點 –(一元減號),並且 E(1). VAL 將是其唯一的子節點。

函式 LEAF (id) 將建立一個帶有標籤 id 的葉子節點。
![]()
示例 2 - 為表示式構建語法樹。
a = b ∗ −c + d
解決方案

示例 3 - 為語句構建語法樹。
如果 a = b 則 b = 2 * c
解決方案

示例 4 - 考慮以下程式碼。繪製其語法樹
如果 x > 0 則 x = 2 * (a + 1) 否則 x = x + 1。

示例 5 - 為以下算術表示式 a * (b + c) – d /2 繪製語法樹。此外,將給定表示式寫成字尾形式。

字尾表示法
a b c + * d 2 / -
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP