色欲av一区久久精品_久久综合色综合色88_无码在线观看不卡_色黄视频网站_亚洲国产精品久久久久秋霞66

java編譯器(java編譯器都有哪幾種)

時(shí)間:2023-05-15

java編譯器

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)在包c(diǎn)om.sun.tools.javac.tree中。包含詞法剖析器lexer和語法剖析器parser。
InitModule和Enter:構(gòu)建符號(hào)表。輸入是籠統(tǒng)語法樹,輸出是符號(hào)表(Symtab類的內(nèi)容)、環(huán)境(Env類)和上下文(AttrContext類),其間Env里面含有對(duì)應(yīng)的輸入的語法樹和AttrContext。一個(gè)由Env構(gòu)成的行列,被籠統(tǒng)成類Todo(即Queue)。首要的操作類在com.sun.tools.javac.comp包中,首要的數(shù)據(jù)結(jié)構(gòu)在包c(diǎn)om.sun.tools.javac.code和包c(diǎn)om.sun.tools.javac.tree中。
AnnotationProcessing:注解處理。構(gòu)建符號(hào)表的時(shí)分,會(huì)把遇到的注解悉數(shù)保存下來,給這一階段使用。輸入是籠統(tǒng)語法樹和上個(gè)階段保存的各個(gè)注解,輸出是依據(jù)用戶自定義的注解處理器決定的。注解處理器是用戶自己寫的代碼,使編譯器遇到某些注解的時(shí)分能夠履行用戶自定義的代碼,咱們往常開發(fā)一般用不到這個(gè)功用,想具體了解的讀者能夠自行看其他材料。已然遇到注解的時(shí)分履行的代碼是用戶自定義的,那如果用戶使用注解處理器生成java源代碼,編譯器會(huì)怎樣處理這些新的Java源代碼呢?編譯器會(huì)檢測(cè)注解處理器是否生成新的Java源程序,如果生成新的Java源程序,編譯器會(huì)從頭履行Parser、InitModule、Enter這三個(gè)階段,對(duì)新的源程序進(jìn)行處理,然后又從頭進(jìn)行AnnotationProcessing注解處理。這樣循環(huán)下去,直到?jīng)]有新的源程序生成。上文鏈接里面有一些圖,比較形象地描繪這個(gè)過程,讀者能夠自行參考。首要的操作類在com.sun.tools.javac.processing包中,首要的數(shù)據(jù)結(jié)構(gòu)在包c(diǎn)om.sun.tools.javac.code和com.sun.tools.javac.tree中。
Attr:屬性標(biāo)示。輸入是上面幾個(gè)階段生成的內(nèi)容“Todo目標(biāo)”,也便是一個(gè)由Env組成的行列(即Queue),留意一個(gè)Env里面有一個(gè)上下文AttrContext和對(duì)應(yīng)的語法樹,AttrContext還有一個(gè)作用域Scope。輸出仍是由一個(gè)由Env組成的行列(即Queue),只不過里面的語法樹多了類型Type和符號(hào)Symbol等信息,Env、AttrContext、Scope的許多字段都進(jìn)行了初始化。這一階段首要包含類型檢測(cè)、命名解析、常量折疊、類型推導(dǎo)等內(nèi)容,其間對(duì)函數(shù)參數(shù)、匿名類、lambda表達(dá)式、辦法引證做了許多撲朔迷離的操作。許多bug都出現(xiàn)在這一階段。首要的操作類在com.sun.tools.javac.comp包中,首要的數(shù)據(jù)結(jié)構(gòu)在包c(diǎn)om.sun.tools.javac.code和com.sun.tools.javac.tree中。
Flow:數(shù)據(jù)流剖析。輸入和輸出都是上文說的由Env組成的行列(即Queue)。這一階段首要對(duì)數(shù)據(jù)流的合法性進(jìn)行多種剖析,更新Env的狀況很少,不像Attr,Attr幾乎每一步都會(huì)設(shè)置類型和符號(hào)或者作用域,而Flow一般是剖析完后,只依據(jù)剖析的結(jié)果進(jìn)行報(bào)錯(cuò)或者不報(bào)錯(cuò)。這些數(shù)據(jù)流剖析包含活躍性剖析、反常捕獲剖析、有限賦值剖析、本地變量捕獲剖析等,并且這些剖析種類是分隔的,一般互不影響。相對(duì)于Attr的撲朔迷離,F(xiàn)low對(duì)各個(gè)剖析分隔完成,真是太好理解了。首要的操作類在com.sun.tools.javac.comp包中,首要的數(shù)據(jù)結(jié)構(gòu)在包c(diǎn)om.sun.tools.javac.code和com.sun.tools.javac.tree中。
Desugar:解(de)語法糖(sugar)。輸入是由Env組成的行列,輸出是由Env和類語法樹的二元組(即Pair)組成的行列(即Queue>)。Desugar會(huì)履行范型擦除、形式轉(zhuǎn)化、lambda轉(zhuǎn)化、內(nèi)部類轉(zhuǎn)化、foreach語句轉(zhuǎn)化等操作。JDK8及之后的版本所加的語言功用根本都能夠在這兒找到對(duì)應(yīng)的轉(zhuǎn)化操作。Desugar遍歷語法樹,在遇到這些“高檔”語法結(jié)構(gòu)的時(shí)分,就把它轉(zhuǎn)化成對(duì)應(yīng)的“初級(jí)”語法結(jié)構(gòu)。首要的操作類在com.sun.tools.javac.comp包中,首要的數(shù)據(jù)結(jié)構(gòu)在包c(diǎn)om.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)的對(duì)應(yīng)關(guān)系。JLS和JVMS對(duì)這些內(nèi)容做了具體闡明。我建議想對(duì)JDK、JVM進(jìn)行開發(fā)的讀者:依據(jù)遇到的bug去讀JLS,比如遇到關(guān)于枚舉的bug,就去讀JLS關(guān)于類和枚舉那一章。而對(duì)于JVMS,除了4.10VerificationofclassFiles之外,其他都應(yīng)該完好看完,其間第7章TheJavaVirtualMachineInstructionSet能夠粗看可是不能不看。第7章相似一個(gè)手冊(cè),可是不粗讀一遍,很難理解中間代碼生成過程的內(nèi)容。了解了Java語言和字節(jié)碼及他們的對(duì)應(yīng)關(guān)系,這個(gè)階段的代碼就很簡(jiǎn)單理解了。java

java編譯器都有哪幾種

大家能夠點(diǎn)擊文中藍(lán)色的東西稱號(hào),直接進(jìn)入官網(wǎng)下載。
1)Notepad++
Notepad++是Windows操作體系下的一套文本修改器,有完好的中文化接口及支撐多國(guó)言語編寫的功用(UTF8技術(shù))。
Notepad++長(zhǎng)處:
功用比Windows中的Notepad(記事本)強(qiáng)大,除了能夠用來制作一般的純文字說明文件,也非常適合編寫計(jì)算機(jī)程序代碼。
不只有語法高亮度顯現(xiàn),也有語法折疊功用,并且支撐宏以及擴(kuò)充基本功用的外掛模組。
是免費(fèi)軟件,能夠免費(fèi)使用,自帶中文,支撐所有干流的計(jì)算機(jī)程序言語。
Notepad++缺陷:
比起專用的IDE缺少語法查看,顏色選取,代碼的outline,注釋的解析,TODO,調(diào)試東西集成,部署東西集成等等好多功用。
翻開大文件比較慢
Java開發(fā)東西Notepad++
Notepad++
2)EditPlus
EditPlus是一款由韓國(guó)SangilKim(ES-Computing)出品的細(xì)巧可是功用強(qiáng)大的可處理文本、HTML和程序言語的Windows修改器,甚至能夠經(jīng)過設(shè)置用戶東西將其作為C,Java,Php等等言語的一個(gè)簡(jiǎn)略的IDE。
EditPlus長(zhǎng)處:
EditPlus界面簡(jiǎn)練美觀,且發(fā)動(dòng)速度快。
對(duì)中文支撐比較好。
支撐多種日期、時(shí)間輸入;支撐語法高亮;支撐代碼折疊;支撐代碼自動(dòng)完結(jié)。
配置功用強(qiáng)大,且比較簡(jiǎn)單,擴(kuò)展也比較強(qiáng)。
適合修改網(wǎng)頁。
EditPlus缺陷:
不支撐代碼提示功用。
不免費(fèi),收費(fèi)單位美元,注冊(cè)費(fèi)用高
功用較簡(jiǎn)略。
版別更新比較慢。
Java開發(fā)東西EditPlus
EditPlus
3)UltraEdit
UltraEdit是一套功用強(qiáng)大的文本修改器,能夠修改文本、十六進(jìn)制、ASCII碼,完全能夠替代記事本,它是一款需要花費(fèi)49.95美元的共享軟件。
UltraEdit長(zhǎng)處:
提供了友好界面的編程修改器,支撐語法高亮,代碼折疊和宏。
內(nèi)置了關(guān)于HTML、PHP和JavaScript等語法的支撐,可一起修改多個(gè)文件,并且即便開啟很大的文件速度也不會(huì)慢。
UltraEdit缺陷:
發(fā)動(dòng)速度較慢。
默許的設(shè)置中不支撐Pascal言語。
對(duì)中文支撐不是很好。
Java開發(fā)東西ultraedit
UltraEdit
4)SublimeText
SublimeText是由程序員JonSkinner于2008年1月份所開發(fā)出來,它最初被設(shè)計(jì)為一個(gè)具有豐厚擴(kuò)展功用的Vim。
它是一款收費(fèi)軟件,可是能夠無限期試用,它是一個(gè)跨渠道的修改器,一起支撐Windows、Linux、MacOSX等操作體系。
SublimeText長(zhǎng)處:
干流前端開發(fā)修改器
體積較小,運(yùn)轉(zhuǎn)速度快
文本功用強(qiáng)大
支撐編譯功用且可在控制臺(tái)看到輸出
SublimeText
SublimeText
5)Vim
Vim是從Vi發(fā)展出來的一個(gè)文本修改器。代碼補(bǔ)全、編譯及過錯(cuò)跳轉(zhuǎn)等便利編程的功用特別豐厚,在程序員中被廣泛使用。是Unix體系用戶最喜歡的文本修改器。
Vim長(zhǎng)處:
支撐多種操作體系
翻開大文件速度較快,在大文件中查找的速度也非??臁?br /> 免費(fèi),開源
有搜索高亮功用
支撐多中修改言語
功用強(qiáng)大
Vim缺陷:
比較難學(xué)
雖然有菜單,但Windows用戶第一次上手會(huì)很難
界面不太美觀
鍵盤命令多,必須長(zhǎng)期使用才干熟練。

文章標(biāo)簽:

Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)

與項(xiàng)目經(jīng)理交流
掃描二維碼
與項(xiàng)目經(jīng)理交流
掃描二維碼
與項(xiàng)目經(jīng)理交流
ciya68