導航:首頁 > 源碼編譯 > 編譯器解釋器開發

編譯器解釋器開發

發布時間:2022-05-22 13:21:12

『壹』 編譯器和解釋器的主要區別是什麼他們相對於對方各自的優點

解釋器是解釋執行的源代碼,編譯器是將源代碼編譯成目標代碼

他們最大的區別是程序運行時需要解釋器邊解釋邊執行,而編譯器則在運行時是完全不需要的

解釋器的優點是比較容易讓用戶實現自己跨平台的代碼,比如javaphp等,同一套代碼可以在幾乎所有的操作系統上執行,而無需根據操作系統做修改;
編譯器的目的就是生成目標代碼再由連接器生成可執行的機器碼,這樣的話需要根據不同的操作系統編制代碼,雖然有像Qt這樣的源代碼級跨平台的編程工具庫,但在不同的平台上仍然需要重新編譯連接成可執行文件,但其執行效率要遠遠高於解釋運行的程序。
編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;
而解釋器則是只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的.
這是因為計算機不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進制的形式)

『貳』 解釋器與編譯器的區別

編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;而解釋器則是只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的.這是因為計算機不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進制的形式)

『叄』 編譯器與解釋器的區別是什麼

編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;
而解釋器則是只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的.
這是因為計算機不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進制的形式)

『肆』 編譯器具體實現中比較巧妙的思想有哪些

要說編譯器實現的巧妙思想,很多都是用來解決工程性問題的,跟編譯原理中的演算法(解決抽象概念問題 / 學術問題)未必有直接關系。
題主是更想知道某個演算法在具體實現中的特點或者說應用方式呢,還是更想了解工程方面的問題呢?
我覺得前者應該有很多人會給出非常有趣的回答,我就主要回答後者的方面吧。解決工程性問題的巧妙技巧也挺吸引人的,而且有非常大量的素材…根本無法列舉完。
LLVM
說到編譯器實現,不得不落個俗套說說LLVM編譯器套件。不用介紹LLVM是啥了,感覺是「地球人都知道」系列。
1、一套IR,三種表現形式:運行時表現形式(llvm/IR,內存中)、序列化表現形式(bitcode,用於存儲)、文本表現形式(「LLVM匯編」,便於人閱讀和編輯)。三種形式間可以無損變換是LLVM非常非常強大的實現特點之一。
實際使用時能否真的達到無損變換很大程度上取決於要實現的語言有多少東西無法用LLVM IR表達。
例如說如果有語言實現基於LLVM來實現JIT編譯器,並且想把一個運行時的對象指針當作常量嵌入生成的代碼里,它可以把這個常量構造成LLVM IR,但如果把這個常量序列化到bitcode或生成文本形式,等「下一次編譯」再讀出來用的話,那個常量指針可能已經不對了。這跟生成PIC(position-independent code)的問題類似,但LLVM沒辦法幫語言解決這種問題。
也有可能有些語言實現偷懶,有些嵌入LLVM IR的metadata無法無損轉換為文本形式,這也不能怪LLVM IR不好,但確實是使用中要頭疼的問題…
這種一套IR三種表現形式的設計非常實用,一些新的語言實現項目受其影響也採用了類似的設計。

『伍』 如何用basic語言實現一個最簡單的解釋器/編譯器

首先Basic語言是解釋型的語言,而C語言是編譯型的語言。什麼意思呢,就是你編寫的Basic語言程序運行的時候需要一個解釋器將高級語言代碼轉為機器碼然後才可以執行。C語言程序一般經過編譯和聯接後直接生成目標代碼。目標代碼本身就是機器碼所以可以直接運行。

從語法來看,C語言是面向過程的語言。Basic語言嚴格意義上只是一個腳本語言,語法相對來講非常簡單。

另外,C語言是最接近匯編語言的一種語言,功能非常強大,但是要求開發人員對硬體,操作系統等底層的東西要有很深的了解,開發程序相對來講麻煩一些,但是程序性能非常好。Basic語言相封裝了很多底層的東西,所以不要求開發人員有很深的計算機專業背景,開發簡單,但是不要指望用Basic語言開發真正的商業程序。

由於以上的區別,造成這兩種語言的用途不一樣。Basic語言常用來寫一些腳本,或者在真正開發之前作一個軟體模型。實際開發用C語言以確保運行速度和較小的內存需求等其他性能。

顯然,這兩種語言還有其他區別,但上面應該是最重要的區別吧

『陸』 編譯器、解釋器、都是需要另外下載並手動整理的嗎

絕大部分情況下不需要,我們現在用的都是集成開發環境IDE,它會自動完成你程序寫完後的一系列操作,代碼寫好,點個運行就行了,後面的工作不需要你操心。

集成開發環境(IDE,Integrated Development Environment )是用於提供程序開發環境的應用程序,一般包括代碼編輯器、編譯器、調試器和圖形用戶界面等工具。集成了代碼編寫功能、分析功能、編譯功能、調試功能等一體化的開發軟體服務套。所有具備這一特性的軟體或者軟體套(組)都可以叫集成開發環境。如微軟的Visual Studio系列,Borland的C++ Builder、Delphi系列等。該程序可以獨立運行,也可以和其它程序並用

『柒』 超贊,編譯器和解釋器的異同,瞬間明白了

編譯器和解釋器的最大不同就是:以 WINDOWS 系統為例進行講解就是:編譯器是可以把用戶編寫的源程序(例如:C 語言源程序)經過編譯、鏈接產生成一個在 WINDOWS 系統下面可獨立運行的二進制代碼(以 *.exe 為後綴的);而解釋器則必須在高級語言的解釋環境中才能夠運行用戶編寫的源程序,一旦退出了解釋器,那麼用戶編寫的源程序將無法執行。例如:以前的 BASIC 語言就是解釋執行、而不是編譯執行的。即:在 BASIC 解釋環境中,可以執行用戶編寫的以 *.BAS 為後綴的源程序,但是一旦退出了 BASIC 解釋器,那麼用戶編寫的 *.BAS 源程序就無法執行了。

『捌』 什麼是 編譯器,編輯器,解釋器.

編譯器,是將便於人編寫,閱讀,維護的高級計算機語言翻譯為計算機能解讀、運行的低階機器語言的程序。
編輯器---從編輯器中也可調用編譯器以及與它共用的程序,這樣程序員無需離開編輯器就可執行程序。
解釋器是能夠執行用其他計算機語言編寫的程序的系統軟體,它是一種翻譯程序。

『玖』 請問編譯程序和解釋程序是什麼意思什麼是編譯器、什麼是解釋器

編譯和解釋是從源程序到可執行程序轉換的兩種方法。編譯,是在源程序完成後,先轉換成中間代碼,然後再轉換成二進制代碼,完成後,每次執行,都直接執行這個二進制代碼。一次轉換完成。
而解釋程序的執行不同,他在執行時,是一次讀入一條源代碼,然後分析轉換成二進制代碼,執行這條語句,然後再讀入一條源代碼,再轉換,再執行。是一邊轉換一邊執行。編譯器和解釋器就是完成編譯和解釋工作的一個軟體。

『拾』 解釋器的解釋編譯

解釋器運行程序的方法有:
1.直接運行高級編程語言 (如 Shell 自帶的解釋器)
2.轉換高級編程語言碼到一些有效率的位元組碼 (Bytecode),並運行這些位元組碼
3.以解釋器包含的編譯器對高級語言編譯,並指示處理器運行編譯後的程序 (例如:JIT)
Perl,Python,MATLAB,與Ruby是屬於第二種方法,而UCSD Pascal則是屬於第三種方式。在轉譯的過程中,這組高級語言所寫成的程序仍然維持在源代碼的格式(或某種中繼語言的格式),而程序本身所指涉的動作或行為則由解釋器來表現。
使用解釋器來運行程序會比直接運行編譯過的機器碼來得慢,但是相對的這個直譯的行為會比編譯再運行來得快。這在程序開發的雛型化階段和只是撰寫試驗性的代碼時尤其來得重要,因為這個「編輯-直譯-除錯」的循環通常比「編輯-編譯-運行-除錯」的循環來得省時許多。
在解釋器上運行程序比直接運行編譯過的代碼來得慢,是因為解釋器每次都必須去分析並轉譯它所運行到的程序行,而編譯過的程序就只是直接運行。這個在運行時的分析被稱為直譯式的成本。在解釋器中,變數的訪問也是比較慢的,因為每次要訪問變數的時候它都必須找出該變數實際存儲的位置,而不像編譯過的程序在編譯的時候就決定好了變數的位置了。
在使用解釋器來達到較快的開發速度和使用編譯器來達到較快的運行進度之間是有許多妥協的。有些系統(例如有一些LISP)允許直譯和編譯的代碼互相調用並共享變數。這意味著一旦一個子程序在解釋器中被測試並除錯過之後,它就可以被編譯以獲得較快的運行進度。許多解釋器並不像其名稱所說的那樣運行原始代碼,反而是把原始代碼轉換成更壓縮的內部格式。舉例來說,有些BASIC的解釋器會把keywords取代成可以用來在jump table中找出相對應指令的單一byte符號。解釋器也可以使用如同編譯器一般的文字分析器(lexical analyzer)和語法分析器(parser)然後再轉譯產生出來的抽象語法樹(abstract syntax tree)。
可攜性佳,直譯式程序相較於編譯式程序有較佳的可攜性,可以容易的在不同軟硬體平台上運行。而編譯式程序經過編譯後的程序則只限定於運行在開發環境平台。

閱讀全文

與編譯器解釋器開發相關的資料

熱點內容
南京解壓車要帶什麼 瀏覽:562
天堂2編譯視頻教程 瀏覽:392
伺服器沒有進程怎麼辦 瀏覽:784
阿里雲發布新物種神龍雲伺服器 瀏覽:59
數據結構遞歸演算法統計二叉樹節點 瀏覽:666
ev3怎麼編程 瀏覽:702
gzip壓縮教程 瀏覽:349
解壓模擬例子 瀏覽:984
流媒體伺服器如何實現視頻轉發 瀏覽:57
linux字元串md5 瀏覽:302
支撐突破選股源碼怎麼設置 瀏覽:934
湖南戴爾伺服器維修雲主機 瀏覽:494
解壓到文件夾的視頻都自動隱藏了 瀏覽:569
閱讀器支持php 瀏覽:222
人生需求怎麼解壓 瀏覽:795
pdf列印機找不到 瀏覽:1001
如何同時使用兩個apache伺服器 瀏覽:723
國外php論壇 瀏覽:966
災難是命令 瀏覽:604
linux火狐瀏覽器安裝 瀏覽:71