1. 程式人生 > >第四章-語法分析之認識樹節點

第四章-語法分析之認識樹節點

似的 序列 語義分析 語法 聲明 規則 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、表達式的分析

第四章-語法分析之認識樹節點