Javac編譯原理:Item(1)——基本介紹

    首先,必須明確Java語言規範和Java虛擬機規範不是一回事。
數據結構

    Java語言規範描述了Java語言有哪些詞法和語法,而Java虛擬機也有Java虛擬機規範,它們都有本身的詞法和語法解析規則,並且解析規則也是不一樣的。
spa

    那麼如何才能讓Java的語言規則適應Java虛擬機的語法規則呢?
翻譯

    這個任務就由Javac編譯器來完成的,它的任務就是將Java語言規範轉化爲Java虛擬機語言規範,完成」翻譯「工做。
編譯器

1、Javac是什麼?

  • Javac是一種編譯器,可以將一種語言規範轉化成另一種語言規範虛擬機

  • Javac的任務就是將Java源代碼語言先轉化爲JVM可以識別的一種語言(Java字節碼),這種字節碼不是針對某種機器、某種平臺的for循環

    如何消除不一樣種類、不一樣平臺機器之間的差異,這個任務就由JVM完成,VM將JVM語言(Java字節碼)轉換成當前機器可以識別的機器語言。編譯

2、Javac編譯器編譯程序的步驟

  1. 詞法分析

    首先是讀取源代碼,找出這些字節中哪些是咱們定義的語法關鍵詞,如Java中的if、else、for等關鍵詞。foreach

    詞法分析的結果:從源代碼中找出一些規範化的Token流。循環

  2. 語法分析

    這一步就是檢查關鍵詞組合在一塊兒是否是符合Java語言規範,如if的後面是否是緊跟着一個布爾判斷表達式。語法

    語法分析的結果:造成一個符合Java語言規範的抽象語法樹

  3. 語義分析

    這一步的主要工做就是把一些難懂的、複雜的語法轉化爲更加簡單的語法。

    語義分析的結果:完成複雜的語法轉化成簡單的語法,對應到Java中,如將foreach語句轉化成for循環結構,還有註解等。最後造成一個註解事後的抽象語法樹,這棵語法樹更接近目標語言的語法規則。

  4. 生成字節碼

    經過字節碼生成器生成字節碼,根據通過註解的抽象語法樹生成字節碼,也就是將一個數據結構轉化爲另一個數據結構。

    代碼生成器的結果:生成符合Java虛擬機規範的字節碼。

3、Javac編譯器的基本結構

    按照上述編譯步驟來,能夠將Javac編譯器分爲4個模塊:詞法分析器、語法分析器、語義分析器和代碼生成器。

相關文章
相關標籤/搜索