Java核心知識點-Java編譯原理
阿新 • • 發佈:2019-01-27
一、javac是什麼
javac就是一個種編譯器,它的功能就是將java原始碼翻譯成JVM可以識別的二進位制碼,簡單一點就是將.java檔案轉換成.class檔案
功能圖如下:
1.1 javac是怎麼編譯原始碼?
javac結構主要分為詞法分析器,語法分析器,語義分析器,程式碼生成器如下圖:
詞法分析器:
主要是逐行讀取原始碼,然後將原始碼匹配到Token流,即使識別每一個單詞是什麼東西,如package匹配到Token.PACKAGE,class匹配到Token.CLASS,類名或者變數名匹配成Token.IDENTIFIER,如:
package com.shawnwang.test
public class HelloWorld(){
int a;
int c=a+1;
}
上面程式碼的Token如下圖所示。
語法分析器:
主要將Token流轉換成更加結構化的語法樹,就好像是給上面的單片語裝成一個完整的句子
語義分析器:
將上面的語法數再精簡和處理,如新增預設建構函式,檢查變數初始化,型別是否匹配,檢查exception是否丟擲,解除java語法糖等等。
程式碼生成器:
將語法樹生成java位元組碼,可以理解為中間語言如c#的IL語言或者組合語言等。
總結:其他語言的的編譯原理可能不盡相同,但基本原理都會大致相同。