語法樹的構造
語法樹是分析樹的壓縮形式。在語法樹中,運算符和關鍵字不再是葉節(jié)點,而是作為內部節(jié)點的父節(jié)點。
用以下函數建立帶有二元運算符的表達式語法樹節(jié)點,每個函數都返回一個指向新建節(jié)點的指針:
1.mknode(op,left,right)。它建立一個標記為op的運算符節(jié)點,其兩個域left和right是指向其左右運算對象的指針。
2.mkleaf(id,entry)。它建立標記為id的標識符節(jié)點,其域entry是指向該標識符在符號表中的相應表項的指針。
3.mkleaf(num,val)。它建立標記為num的數節(jié)點,域val保存該數的值。
表達式的無環(huán)有向圖(directed acyclic graph,簡稱dag)可以識別表達式中的公共子表達式。代表公共表達式的節(jié)點具有多個“父節(jié)點”。