學(xué)習(xí)筆記:Javac學(xué)習(xí)

Javac編譯器的基本結(jié)構(gòu)

Javac編譯器的作用就是將符合java語言規(guī)范的源代碼轉(zhuǎn)化成符合Java虛擬機規(guī)范的Java字節(jié)碼寓盗。
一個編譯器完成從一個語言規(guī)范到另一個語言規(guī)范的轉(zhuǎn)化所需步驟就是這個編譯器的基本結(jié)構(gòu)】觯基本步驟了解一下:

  1. 首先,讀取源代碼撩幽,識別定義的語法規(guī)范關(guān)鍵字箩艺,識別哪些是合法的關(guān)鍵字,哪些不是榨惰,這個步驟就是詞法分析過程静汤。
  2. 詞法分析的結(jié)果就是從源代碼中找出規(guī)范化的Token流。
  3. 接著虫给,就是對這些Token流進(jìn)行語法分析抹估,就是檢查這些關(guān)鍵字組合在一起是否符合Java語言規(guī)范。
  4. 語法分析的結(jié)果就是形成一個符合Java語言規(guī)范的抽象語法樹药蜻。抽象語法樹是一個結(jié)構(gòu)化的語法表達(dá)形式,它的作用是把語言的主要詞法用一個結(jié)構(gòu)化的形式組織在一起蒿往。對這棵語法樹我們可以在后面按照新的規(guī)則再重新組織湿弦,這就是編譯器的關(guān)鍵所在。
  5. 接下來是語義分析蔬充,雖然上一步已經(jīng)完成了語法分析班利,也就是不存在語法問題了,但是語義是不是正確呢庸队?語義分析的主要工作就是把一些難懂的、復(fù)雜的語法轉(zhuǎn)化成更加簡單的語法彻消。
  6. 語義分析的結(jié)果就是把復(fù)雜的語法轉(zhuǎn)化為更為簡單的語法,例如將foreach轉(zhuǎn)為for丙笋,形成一個注解后的抽象語法樹煌贴,這棵抽象語法數(shù)更接近目標(biāo)語言的語法規(guī)則。
  7. 最后通過字節(jié)碼生成器生成字節(jié)碼怠肋,根據(jù)抽象語法樹生成字節(jié)碼井濒,也就是將一種數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為另一種數(shù)據(jù)結(jié)構(gòu)。
    == 所以主要有四個模塊:詞法分析器酪惭、語法分析器者甲、語義分析器字節(jié)碼生成器 ==

Javac工作原理分析

詞法分析器:

我們可以用JDK的com.sun.tools.javac.main.Main的compile(String[] args)方法編譯指定的類鲫懒。

String[] args = new String[] {“-d”刽辙, “/homemytestclasses”, “Test.java”}; 
Int status = javac.compile(args); 

javac主要詞法分析器的接口是com.sun.tools.javac.parser.Lexer颂翼。默認(rèn)實現(xiàn)類是com.sun.tools.javac.parser.Scanner,Scanner會逐個讀取java源文件的單個字符慨灭,然后解析出符合Java語言規(guī)范的Token序列。
其中主要涉及到的類:
Scanner 讀取源文件和歸類不同詞法的操作
JavacParser 規(guī)定哪些詞是符合java語言規(guī)范規(guī)定的
Token 規(guī)定所有Java語言的合法關(guān)鍵詞
Names 存儲和表示解析后的詞法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呻疹,一起剝皮案震驚了整個濱河市筹陵,隨后出現(xiàn)的幾起案子镊尺,更是在濱河造成了極大的恐慌姑蓝,老刑警劉巖吕粗,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颅筋,死亡現(xiàn)場離奇詭異,居然都是意外死亡占贫,警方通過查閱死者的電腦和手機先口,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門碉京,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谐宙,你說我怎么就攤上這事〈钭郏” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忠荞。 經(jīng)常有香客問我,道長奋姿,這世上最難降的妖魔是什么素标? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任头遭,我火速辦了婚禮癣诱,結(jié)果婚禮上袜香,老公的妹妹穿的比我還像新娘。我一直安慰自己蜈首,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布吆寨。 她就那樣靜靜地躺著,像睡著了一般踩寇。 火紅的嫁衣襯著肌膚如雪啄清。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天俺孙,我揣著相機與錄音辣卒,去河邊找鬼。 笑死睛榄,一個胖子當(dāng)著我的面吹牛荣茫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懈费,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼计露,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了憎乙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤泞边,失蹤者是張志新(化名)和其女友劉穎该押,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阵谚,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蚕礼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梢什。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奠蹬。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嗡午,靈堂內(nèi)的尸體忽然破棺而出囤躁,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布狸演,位于F島的核電站言蛇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宵距。R本人自食惡果不足惜腊尚,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望满哪。 院中可真熱鬧婿斥,春花似錦、人聲如沸翩瓜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兔跌。三九已至,卻和暖如春峡蟋,著一層夾襖步出監(jiān)牢的瞬間坟桅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工蕊蝗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仅乓,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓蓬戚,卻偏偏與公主長得像夸楣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子子漩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容