第四章-語法分析之認識樹節點
阿新 • • 發佈:2018-09-25
似的 序列 語義分析 語法 聲明 規則 mil src alt
上一章我們得到了Token序列,而語法分析就是根據Token序列構造抽象語法樹的過程,抽象語法樹是一種用來描述程序代碼語法 結構的樹形表示方式,這種結構化的表示方式將為後面語義分析、代碼生成階段提供極大的便利。語法樹的每一個節點都代表了程序代碼中的一個語法結構,如包、類型、修飾符、運算符、接口、返回值甚至代碼註釋等都可以是一個語法結構。Javac中,每個語法樹節點都對應著一個具體的實現類,這一章將重點介紹抽象語法樹上的各個語法樹節點,只有認清了抽象語法樹上的構造節點才能根據根據一定規則將token序列轉換為抽象語法樹。
由於語法樹中涉及到的節點眾多,我們可以大概將這些節點歸納為如下3類:
(1)定義及聲明 例如編譯單元的定義、方法的定義、import導入包的聲明等
(2)語句 例如一些流程控制的if語句、while語句、do-while語句及for語句等
(3)表達式 如兩個數值相加x+y等
1、定義及聲明
Javac中有幾個定義及聲明,下面給出了涉及到的主要的幾個語法樹節點的繼承關系圖。
可以看到Javac語法樹上的每個節點實現類都繼承了一個抽象實現類JCTree,同時也實現了與自己想對應的接口,如JCxxx實現類實現xxxTree接口,而xxxTree接口與JCTree又同時實現了
Tree接口,可以說這個接口是一個頂層接口,代表了任意一個語法樹節點。類似的,後面的語句及表達式實現類也遵循了這樣的繼承原則,只是語句是通過JCStatement間接繼承了JCTree,而表達式是通過JCExpression抽象類間接繼承了JCTree。
(1)
2、語句的分析
3、表達式的分析
第四章-語法分析之認識樹節點