高級語言都要編譯解析型語言
『壹』 高級語言程序有兩種工作方式編譯方式和解釋方式
具體如下。
編譯型工作過程圖,編譯程序功能就是把高級語言書寫的源代碼譯成與之等價的目標程序(匯編語言或機器語言)。解釋型,解釋程序實現高級語言的三種方式解釋型在詞法、語法和語義分析方面與編譯程序的工作原理基本相同,但在運行時直接執行源程序或源程序的內部形式,即解釋程序不產生源程序的目標程序,解釋程序通常可以分為兩部分:第一部分是分析部分,經語義分析後把源程序翻譯成中間代碼,中間代碼常用逆波蘭式表示。第二部分是解釋部分。
高級語言(High-levelprogramminglanguage)是一種獨立於機器,面向過程或對象的語言。高級語言是參照數學語言而設計的近似於日常會話的語言。例如,要將2個變數相加並賦值給第三個變數,用高級語言表達為var3=var1+var2。
『貳』 編譯型語言都必須編譯嗎
不,指令並不一定要經過編譯才能被計算機執行。
首先,我們需要理解編譯和執行的基本概念。編譯是將源代碼(由程序員編寫的高級語言代碼)轉換成機器代碼(計算機可以直接執行的代碼)的過程。執行則是計算機運行這些機器代碼的過程。在很多情況下,編譯是執行前的一個必要步驟,但這並不是絕對的。
一種無需編譯即可執行的情況是解釋型語言。解釋型語言在執行時,由解釋器逐行讀取源代碼,並將其轉換成機器代碼執行。因此,對於解釋型語言來說,源代碼本身就是“指令”,無需預先編譯成機器代碼。常見的解釋型語言包括Python、Ruby和JavaScript等。例如,當你在Python環境中輸入一行代碼並按下回車鍵時,Python解釋器會立即執行這行代碼,而無需事先進行編譯。
此外,還有一些語言採用了編譯和解釋相結合的方式,如Java和C#。這些語言首先將源代碼編譯成一種中間代碼(如Java的位元組碼或C#的Common Intermediate Language),然後在運行時通過虛擬機或運行時環境將這些中間代碼解釋或編譯成機器代碼執行。這種方式結合了編譯型語言和解釋型語言的優點,既提高了執行效率,又保持了一定的平台獨立性。
總之,雖然編譯是將源代碼轉換成可執行代碼的一種常見方式,但並不是唯一的方式。解釋型語言和編譯與解釋相結合的語言都無需預先編譯即可執行指令。因此,我們可以說指令並不一定要經過編譯才能被計算機執行。
『叄』 計算機高級語言裡面的編譯型和解釋型有什麼區別
高級語言所編制的程序不能直接被計算機識別,必須經過轉換才能被執行,按轉換方式可
將它們分為兩類:
1.解釋類:執行方式類似於我們日常生活中的「同聲翻譯」,應用程序源代碼一邊由
相應語言的解釋器「翻譯」成目標代碼(機器語言),一邊執行,因此效率比較低,而且不
能生成可獨立執行的可執行文件,應用程序不能脫離其解釋器,但這種方式比較靈活,可
以動態地調整、修改應用程序,典型的解釋型的高級語言有BASIC。
2.編譯類:編譯是指在應用源程序執行之前,就將程序源代碼「翻譯」成目標代碼
(機器語言),因此其目標程序可以脫離其語言環境獨立執行,使用比較方便、效率較高。
但應用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標文件(*.OBJ)才
能執行,只有目標文件而沒有源代碼,修改很不方便。現在大多數的編程語言都是編譯型
的,例如Visual C++、Delphi等。
高級語言里一個程序的編譯和執行大概是 下面的情況:
編譯器將高級語言從源代碼翻譯成與之等價的目標程序(就相當於從中文翻譯成中文),而後就隱退了。在隨後的某個時刻,用戶啟動目標程序由操作系統執行。實現高級語言的另外一種方式為解釋:
與編譯不同的是,解釋器在目標程序(其實根本就沒有目標程序,只是與編譯來對比)執行期間,解釋器一直隨之運行。這種執行過程完全由解釋器控制的。從效果上看,解釋器實現了一台「虛擬計算機」,其「機器語言」就是高級語言,解釋器一次讀入一條或多條語句,按照其自身規定的方式去執行相應的操作。一般說來,解釋比編譯有著很好的靈活性;編譯一般有著較好的性能。但是有些語言確是採用了兩者的混合形式:
書中的原文:」如果初始階段的翻譯器比較簡單,我們就說這個語言是「解釋的」。如果翻譯器很復雜,我們就說這一語言是「編譯的」。現在兩者的區分變得有些模糊了,因為「簡單」和「復雜」都是修飾性術語,也因為完全可能出現用一個編譯器(復雜的翻譯過程)生成代碼,而後又由一個復雜的虛擬機(解釋器)執行。對於最後這種情況,如果翻譯器對程序做了徹底的分析(而不是做某種「機械的」變換),而且有關的中間語言程序與源程序並沒有很強的相似性,我們還是說這個語言是編譯的。這兩種特性----徹底的分析和非平凡的變換-----是刻畫編譯方式的標志性特徵。「
根據以上標准,首先CSC只是對C#到IL做」機械「的翻譯,而且C#和IL之間有很強的相似性,因為兩者的程序代碼幾乎可以100%相互轉換(比如reflector可以將C#反編成IL,也可以將IL反編為C#)。您認為呢?
PS:再者某些人認為的ngen和cache程序集其實也是支持C#是解釋語言的結論,因為編譯型語言因為性能的天然因素是不需要這些手段的
應該是這個吧。。。。。。。