2017-06-17 79 views
0

1我找到了一個用Python實現的Python解釋器。我很困惑我是否需要安裝其他解釋器來解釋解釋器本身? 如果是這樣,爲什麼我們需要用它將解釋的語言編寫解釋器?如果不是,我該如何運行這個解釋器?Python解釋器可以用Python實現,但是哪個解釋器會解釋解釋器本身?

2我也不是很清楚編譯器是用它編譯的語言實現的。解釋器和編譯器的背後是否有同樣的原因?

回答

0

如果我們編寫一個程序可以解釋簡單的數學表達式,如1 + 2 * 3。該程序是用C編寫的。

// bash 
> ./calculate "1 + 2 * 3" 
> 7 

所以一個C語言程序可以解釋一個簡單的數學語言。

顯然,我們可以選擇Ruby或Python而不是C來編寫這個程序。最後,Ruby或Python語言程序可以解釋數學語言。

讓我們讓程序解釋一個更復雜的語言,比如Python。然後我們得到了它。一個Python語言程序解釋一種Python語言。

所以,任何語言都可以解釋任何語言。

編譯器將源代碼編譯爲機器碼,因此它可以直接在CPU中運行,Interpreter將源代碼解釋爲字節碼,因此它可以在虛擬機中運行。唯一的區別是CPU已經存在,但虛擬機需要先編譯。

抱歉我的英文不好。

0

一個這種技術的原因(所謂的引導,爲其他用戶回答正確),可以使用編譯器優化和工程(大致)如下不同的技術:

假設你有一個工作的編譯器Y,它將語言X編譯爲彙編語言。然後,這個編譯器就是將用X語言編寫的程序翻譯成您的計算機上可以理解和執行的一種形式(在鏈接之後)所需的一切。

現在,您認爲該編譯器在其核心方面編寫得很好,但在其他方面寫得並不好(例如:評估長案例語句的速度非常慢)。你只需要使用語言X的一個子集(用編譯器Y很好地實現)來重寫完整的語言X,並優化對所提到的長格式語句(例子)的評估。

現在你有一個編譯器Z,它將語言X的程序評估爲只包含語言X的核心語句的程序。使用編譯器Y,現在可以將其翻譯爲彙編語言。

一般:在編譯器中的一長排的某一點應該有一個編譯器,它實際上產生有效的機器指令,否則您將無法執行你的好程序(聽起來微不足道,但好要牢記) 。

EDIT @merito:編譯器將程序從源語言翻譯成目標語言,它可以是二進制代碼,但不是必須的。解釋器和編譯器之間的區別對我來說似乎是錯誤的。