1. 程式人生 > >Java核心知識點-Java編譯原理

Java核心知識點-Java編譯原理

一、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語言或者組合語言等。

總結:其他語言的的編譯原理可能不盡相同,但基本原理都會大致相同