了解java編譯原理有什麼用
對於程序員來說。越能理解計算機程序在計算機中實際的底層結構及在腦中想像書數據流圖,那更容易寫代碼的質量
⑵ 學習「編譯原理」有什麼作用
編譯原理內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。主要是講怎麼做程序的編譯器。需要數學基礎和很強的邏輯思維。編譯原理里的字元閉包是指有限循環。關於閉包這些名詞解釋,你們的課程應該有離散數學吧?會有對這些概念的解釋。編譯原理這書啊。得花老大精力去看了。每一行都會是至關重要的。如果你漏看了哪一節,或許接下來看到的新字母就不知道是什麼意思了。所以要反復看,反復用邏輯思維推敲。做習題,習題類型也就幾種,做熟了就很簡單
⑶ 編譯原理學了有什麼用
對大多數人來說,學過編譯原理,應該可以知道對於很多代碼的優化,編譯器其實可以做好,不需要自己寫代碼的時候杞人憂天。在通用、局部的優化上,甚至編譯器往往做得比程序員好。
大概率會意識到編譯原理背後的故事,也許會沉迷在某個方向,也許還會樂於看一些奇妙的parser構建方式。
大概還可能會去學習類型系統,發現形式化的故事似乎在很多方面都有對應的版本,而後,他們也許會嘗試走向研究,去挑戰目前都沒有好好解決的代碼優化問題,也許會走向應用,用起LLVM,在上面加個target,支持一些新硬體,做個新語言的前端等。
編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。 編譯原理是計算機專業設置的一門重要的專業課程。
編譯原理課程是計算機相關專業學生的必修課程和高等學校培養計算機專業人才的基礎及核心課程,同時也是計算機專業課程中最難及最挑戰學習能力的課程之一。編譯原理課程內容主要是原理性質,高度抽象。
編譯可以分為五個基本步驟:詞法分析、語法分析、語義分析及中間代碼的生成、優化、目標代碼的生成。這是每個編譯器都必須的基本步驟和流程, 從源頭輸入高級語言源程序輸出目標語言代碼。
1、詞法分析
詞法分析器是通過詞法分析程序對構成源程序的字元串從左到右的掃描, 逐個字元地讀, 識別出每個單詞符號, 識別出的符號一般以二元式形式輸出, 即包含符號種類的編碼和該符號的值。
詞法分析器一般以函數的形式存在, 供語法分析器調用。當然也可以一個獨立的詞法分析器程序存在。完成詞法分析任務的程序稱為詞法分析程序或詞法分析器或掃描器。
2、語法分析
語法分析是編譯過程的第二個階段。這階段的任務是在詞法分析的基礎上將識別出的單詞符號序列組合成各類語法短語, 如「語句」, 「表達式」等.語法分析程序的主要步驟是判斷源程序語句是否符合定義的語法規則, 在語法結構上是否正確。
而一個語法規則又稱為文法, 喬姆斯基將文法根據施加不同的限制分為0型、1型、2型、3型文法, 0型文法又稱短語文法, 1型稱為上下文有關文法, 2型稱為上下文無關文法, 3型文法稱為正規文法, 限制條件依次遞增。
3、語義分析
詞法分析注重的是每個單詞是否合法, 以及這個單詞屬於語言中的哪些部分。語法分析的上下文無關文法注重的是輸入語句是否可以依據文法匹配產生式。
那麼, 語義分析就是要了解各個語法單位之間的關系是否合法。實際應用中就是對結構上正確的源程序進行上下文有關性質的審查, 進行類型審查等。
4、中間代碼生成與優化
在進行了語法分析和語義分析階段的工作之後, 有的編譯程序將源程序變成一種內部表示形式, 這種內部表示形式叫做中間語言或中間表示或中間代碼。
所謂「中間代碼」是一種結構簡單、含義明確的記號系統, 這種記號系統復雜性介於源程序語言和機器語言之間, 容易將它翻譯成目標代碼。另外, 還可以在中間代碼一級進行與機器無關的優化。
5、目標代碼的生成
根據優化後的中間代碼, 可生成有效的目標代碼。而通常編譯器將其翻譯為匯編代碼, 此時還需要將匯編代碼經匯編器匯編為目標機器的機器語言。
6、出錯處理
編譯的各個階段都有可能發現源碼中的錯誤, 尤其是語法分析階段可能會發現大量的錯誤, 因此編譯器需要做出錯處理, 報告錯誤類型及錯誤位置等信息。
⑷ Java編譯過程與c/c++編譯過程有何不同
你對Java編譯過程和編譯原理,Java編譯程序將java源程序編譯成jvm可執行代碼--java位元組碼,並且Java編譯器卻不將對變數和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將些符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查表來確定一個方法所在的地址,這樣就有效地保證了java的可移植性和安全性。
Java編譯原理
1、Java編譯過程與c/c++編譯過程不同
Java編譯程序將java源程序編譯成jvm可執行代碼--java位元組碼.
c/c++編譯過程:
當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬體平台運行而生成的。因此在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。
Java編譯過程:
Java編譯器卻不將對變數和方法的引中並用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將些符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查表來確定一個方法所在的地址,這樣就有效地保證了java的可移植性和安全性。
2、jvm工作原理
運行jvm字元碼的工作是由解釋器來完成的。解釋執行過程分三步進行:代碼的裝入、代碼的校驗、和代碼的執行。
裝入代碼的工作由「激蘆類裝載器classloader」完成。類裝載器負責裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被調
用的類。當類裝載器裝入一個類時,該類被放在自己的名字空間中。除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本台計算機的所有類都在同一地址空間中,而所賣鉛跡有從外部引進的類,都有一個自己獨立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。
當裝入了運行程序需要的所有類後,解釋器便可確定整個可執行程序的內存布局。解釋器為符號引用與特定的地址空間建立對應關系及查詢表。通過在這一階段確定代碼的內布局,java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼的非法訪問。
隨後,被裝入的代碼由位元組碼校驗器進行檢查。校驗器可以發現操作數棧益處、非法數據類型轉化等多種錯誤。通過校驗後,代碼便開始執行了。
java位元組碼的執行有兩種方式:
1)即時編譯方式:解釋器先將位元組編譯成機器碼,然後再執行該機器碼。
2)解釋執行方式:解釋器通過每次解釋並執行一小段代碼來完成java位元組碼程序的所有操作。本節關於Java編譯的內容介紹到這里,請關注本節其他相關報道。
⑸ java源代碼為什麼要編譯
你現在電腦里的文件是文檔文件確切的說在計算機里也是0和1的序列 但是他和執行程序不是一
個類型的文件 文件是由類型的比如說mp3 是播放聲音的 MP4是播放視屏的 TXT是文檔文件
就是存儲文檔的 在回到問題
.java文件其實就和TXT文件一樣是文檔文件是用來存儲你寫的代碼的
他是拿來給你人看的
你要想讓他變成其可執行程序的文件你就得通過編譯器編譯它
編譯器是按照你寫的代碼把他們翻譯成可執行文件的編碼方式
然後你就可以運行它了
在計算機看來所有的文件都是0和1的組合 應為文件的類型的不同它會用不同的方式解讀它們
具體的java程序。編譯。運行等等環節怎麼完成怎麼解釋 你得慢慢了解 或者有時間我在給你解釋解釋
寫的比較亂 你湊合著看吧
⑹ 計算機怎麼讀懂java代碼的原理
首先你需要懂得編譯原理這門學科,JDK將java代碼編譯成機器能夠識別的二進制位元組碼,然後用JVM(java虛擬機)來載入這些二進制位元組碼並進行解析(翻譯),然後形成指令並執行。jre其實就是java虛擬機的實現,全名叫做Java Runtime Environment
他們太重要了,
(1)數據結構:首先要明白---->程序=演算法+數據
「數據結構」就是做數據這塊的,例如一個「電影播放器」程序,首先要有「電影」嗎,這個就是「數據」,那麼就要用「數據結構」的知識,怎麼存儲每一幀,怎麼高效,怎麼能無損,怎麼空間最節省.........,然後才是怎麼去「解碼」(解碼就是「演算法」做的啦),當然這么講起來不是很嚴謹,但你可以看得出,數據結構可以說的上是有50%的重要性了。
(2)編譯原理:不要以為,自己不去開發「語言」,編譯原理就沒有用啦,它能讓你從根本上理解編譯器,這對怎麼提高程序的效率,怎麼變出漂亮的程序很有用................當然貌似如果從事,「人工智慧」這一塊的話,編譯原理也非常重要。
(3)資料庫:又是剛才哪一點----------->程序=演算法+數據
數據以文件的形式存儲,是在不是很高效,所以,為了方便數據的管理與查找等等..........人類作出了「資料庫」,說白了,它就是用來解決「數據」這部分內容的,現在基本無論你做什麼都離不開資料庫了,從大型網游到網站,到手機等的移動設備編程,都要用到資料庫
--------------------------------------------------------------------------------------------------
從你的體溫來看,你可能剛剛接觸編程,沒有做過什麼成品,隨著你越來越了解這個領域,你會剛到這些東西非常重要,當然還有很多東西,與以上三者地位相當,或更高,例如,微型計算機組成原理,等一些硬體方面的知識.......................................
---------------------------------------------------------------------------------------------------
還是「廣泛閱讀」吧。
⑻ 離散數學、數據結構、操作系統、編譯原理這些課程對於從事編程工作有多大幫助
我是學軟體工程的,你說的這些課程我們都已經學完。
如果你想從程序員做起的話,《編譯原理》就很重要了,你只有知道了編譯器是怎麼編譯你的程序的,你才可能編寫出高效,穩健,佔用內存少的程序。我們學編譯原理的時候還自己設計了解釋器。不過編譯斗蘆敬原理學起來有些難...
《操作系統》對windows編程很有幫助,不過如是你只要學習C/C++/c#,java之類而的話了解一下基礎只是就可以了。
《離散數學》有少量知識點會應用到數據結嘩啟構,不過沒空慎學關系也不是很大,將來需要的時候再學習也可以。
還有就是強烈建議學好《數據結構》,這門課對編程來說相當重要。