Java編譯器有許多代碼,我大約把他們分紅兩類:編譯流程相關(guān)內(nèi)容、編譯流程無關(guān)內(nèi)容。其間編譯流程無關(guān)內(nèi)容這兒不具體介紹。
編譯流程相關(guān)內(nèi)容:
Parse:解析過程。輸出是源程序字符流,輸出是籠統(tǒng)語法樹,頂層的語法樹是JCCompilationUnit,直譯便是編譯單元。首要的操作類在com.sun.tools.javac.parser包中,首要的數(shù)據(jù)結(jié)構(gòu)在包com.sun.tools.javac.tree中。包含詞法剖析器lexer和語法剖析器parser。
InitModule和Enter:構(gòu)建符號表。輸入是籠統(tǒng)語法樹,輸出是符號表(Symtab類的內(nèi)容)、環(huán)境(Env類)和上下文(AttrContext類),其間Env里面含有對應(yīng)的輸入的語法樹和AttrContext。一個由Env構(gòu)成的行列,被籠統(tǒng)成類Todo(即Queue)。首要的操作類在com.sun.tools.javac.comp包中,首要的數(shù)據(jù)結(jié)構(gòu)在包com.sun.tools.javac.code和包com.sun.tools.javac.tree中。
AnnotationProcessing:注解處理。構(gòu)建符號表的時分,會把遇到的注解悉數(shù)保存下來,給這一階段使用。輸入是籠統(tǒng)語法樹和上個階段保存的各個注解,輸出是依據(jù)用戶自定義的注解處理器決定的。注解處理器是用戶自己寫的代碼,使編譯器遇到某些注解的時分能夠履行用戶自定義的代碼,咱們往常開發(fā)一般用不到這個功用,想具體了解的讀者能夠自行看其他材料。已然遇到注解的時分履行的代碼是用戶自定義的,那如果用戶使用注解處理器生成java源代碼,編譯器會怎樣處理這些新的Java源代碼呢?編譯器會檢測注解處理器是否生成新的Java源程序,如果生成新的Java源程序,編譯器會從頭履行Parser、InitModule、Enter這三個階段,對新的源程序進行處理,然后又從頭進行AnnotationProcessing注解處理。這樣循環(huán)下去,直到?jīng)]有新的源程序生成。上文鏈接里面有一些圖,比較形象地描繪這個過程,讀者能夠自行參考。首要的操作類在com.sun.tools.javac.processing包中,首要的數(shù)據(jù)結(jié)構(gòu)在包com.sun.tools.javac.code和com.sun.tools.javac.tree中。
Attr:屬性標示。輸入是上面幾個階段生成的內(nèi)容“Todo目標”,也便是一個由Env組成的行列(即Queue),留意一個Env里面有一個上下文AttrContext和對應(yīng)的語法樹,AttrContext還有一個作用域Scope。輸出仍是由一個由Env組成的行列(即Queue),只不過里面的語法樹多了類型Type和符號Symbol等信息,Env、AttrContext、Scope的許多字段都進行了初始化。這一階段首要包含類型檢測、命名解析、常量折疊、類型推導(dǎo)等內(nèi)容,其間對函數(shù)參數(shù)、匿名類、lambda表達式、辦法引證做了許多撲朔迷離的操作。許多bug都出現(xiàn)在這一階段。首要的操作類在com.sun.tools.javac.comp包中,首要的數(shù)據(jù)結(jié)構(gòu)在包com.sun.tools.javac.code和com.sun.tools.javac.tree中。
Flow:數(shù)據(jù)流剖析。輸入和輸出都是上文說的由Env組成的行列(即Queue)。這一階段首要對數(shù)據(jù)流的合法性進行多種剖析,更新Env的狀況很少,不像Attr,Attr幾乎每一步都會設(shè)置類型和符號或者作用域,而Flow一般是剖析完后,只依據(jù)剖析的結(jié)果進行報錯或者不報錯。這些數(shù)據(jù)流剖析包含活躍性剖析、反常捕獲剖析、有限賦值剖析、本地變量捕獲剖析等,并且這些剖析種類是分隔的,一般互不影響。相對于Attr的撲朔迷離,F(xiàn)low對各個剖析分隔完成,真是太好理解了。首要的操作類在com.sun.tools.javac.comp包中,首要的數(shù)據(jù)結(jié)構(gòu)在包com.sun.tools.javac.code和com.sun.tools.javac.tree中。
Desugar:解(de)語法糖(sugar)。輸入是由Env組成的行列,輸出是由Env和類語法樹的二元組(即Pair)組成的行列(即Queue>)。Desugar會履行范型擦除、形式轉(zhuǎn)化、lambda轉(zhuǎn)化、內(nèi)部類轉(zhuǎn)化、foreach語句轉(zhuǎn)化等操作。JDK8及之后的版本所加的語言功用根本都能夠在這兒找到對應(yīng)的轉(zhuǎn)化操作。Desugar遍歷語法樹,在遇到這些“高檔”語法結(jié)構(gòu)的時分,就把它轉(zhuǎn)化成對應(yīng)的“初級”語法結(jié)構(gòu)。首要的操作類在com.sun.tools.javac.comp包中,首要的數(shù)據(jù)結(jié)構(gòu)在包com.sun.tools.javac.code和com.sun.tools.javac.tree中。
Generate:中間代碼生成。輸入是desugar生成的由Env和類語法樹的二元組(即Pair)組成的行列(即Queue>),輸出便是咱們往常看到的class文件了。這一步的關(guān)鍵是理解字節(jié)碼和class文件結(jié)構(gòu),還有這些內(nèi)容和Java語法結(jié)構(gòu)的對應(yīng)關(guān)系。JLS和JVMS對這些內(nèi)容做了具體闡明。我建議想對JDK、JVM進行開發(fā)的讀者:依據(jù)遇到的bug去讀JLS,比如遇到關(guān)于枚舉的bug,就去讀JLS關(guān)于類和枚舉那一章。而對于JVMS,除了4.10VerificationofclassFiles之外,其他都應(yīng)該完好看完,其間第7章TheJavaVirtualMachineInstructionSet能夠粗看可是不能不看。第7章相似一個手冊,可是不粗讀一遍,很難理解中間代碼生成過程的內(nèi)容。了解了Java語言和字節(jié)碼及他們的對應(yīng)關(guān)系,這個階段的代碼就很簡單理解了。
大家能夠點擊文中藍色的東西稱號,直接進入官網(wǎng)下載。
1)Notepad++
Notepad++是Windows操作體系下的一套文本修改器,有完好的中文化接口及支撐多國言語編寫的功用(UTF8技術(shù))。
Notepad++長處:
功用比Windows中的Notepad(記事本)強大,除了能夠用來制作一般的純文字說明文件,也非常適合編寫計算機程序代碼。
不只有語法高亮度顯現(xiàn),也有語法折疊功用,并且支撐宏以及擴充基本功用的外掛模組。
是免費軟件,能夠免費使用,自帶中文,支撐所有干流的計算機程序言語。
Notepad++缺陷:
比起專用的IDE缺少語法查看,顏色選取,代碼的outline,注釋的解析,TODO,調(diào)試東西集成,部署東西集成等等好多功用。
翻開大文件比較慢
Java開發(fā)東西Notepad++
Notepad++
2)EditPlus
EditPlus是一款由韓國SangilKim(ES-Computing)出品的細巧可是功用強大的可處理文本、HTML和程序言語的Windows修改器,甚至能夠經(jīng)過設(shè)置用戶東西將其作為C,Java,Php等等言語的一個簡略的IDE。
EditPlus長處:
EditPlus界面簡練美觀,且發(fā)動速度快。
對中文支撐比較好。
支撐多種日期、時間輸入;支撐語法高亮;支撐代碼折疊;支撐代碼自動完結(jié)。
配置功用強大,且比較簡單,擴展也比較強。
適合修改網(wǎng)頁。
EditPlus缺陷:
不支撐代碼提示功用。
不免費,收費單位美元,注冊費用高
功用較簡略。
版別更新比較慢。
Java開發(fā)東西EditPlus
EditPlus
3)UltraEdit
UltraEdit是一套功用強大的文本修改器,能夠修改文本、十六進制、ASCII碼,完全能夠替代記事本,它是一款需要花費49.95美元的共享軟件。
UltraEdit長處:
提供了友好界面的編程修改器,支撐語法高亮,代碼折疊和宏。
內(nèi)置了關(guān)于HTML、PHP和JavaScript等語法的支撐,可一起修改多個文件,并且即便開啟很大的文件速度也不會慢。
UltraEdit缺陷:
發(fā)動速度較慢。
默許的設(shè)置中不支撐Pascal言語。
對中文支撐不是很好。
Java開發(fā)東西ultraedit
UltraEdit
4)SublimeText
SublimeText是由程序員JonSkinner于2008年1月份所開發(fā)出來,它最初被設(shè)計為一個具有豐厚擴展功用的Vim。
它是一款收費軟件,可是能夠無限期試用,它是一個跨渠道的修改器,一起支撐Windows、Linux、MacOSX等操作體系。
SublimeText長處:
干流前端開發(fā)修改器
體積較小,運轉(zhuǎn)速度快
文本功用強大
支撐編譯功用且可在控制臺看到輸出
SublimeText
SublimeText
5)Vim
Vim是從Vi發(fā)展出來的一個文本修改器。代碼補全、編譯及過錯跳轉(zhuǎn)等便利編程的功用特別豐厚,在程序員中被廣泛使用。是Unix體系用戶最喜歡的文本修改器。
Vim長處:
支撐多種操作體系
翻開大文件速度較快,在大文件中查找的速度也非常快。
免費,開源
有搜索高亮功用
支撐多中修改言語
功用強大
Vim缺陷:
比較難學(xué)
雖然有菜單,但Windows用戶第一次上手會很難
界面不太美觀
鍵盤命令多,必須長期使用才干熟練。
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢專線)
400-001-5281 (售后服務(wù)熱線)
深圳市坂田十二橡樹莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專線:400-001-5281
長沙市天心區(qū)芙蓉中路三段398號新時空大廈5樓
聯(lián)系電話/ (+86 0731)88282200
品牌服務(wù)專線/ 400-966-8830
旗下運營網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號