2011-03-01 81 views
4

Accorging到wikipedia你什麼時候可以聲稱你的程序是一個「編譯器」?

編譯器是一個計算機程序(或程序組),該變換用編程語言源代碼(源語言)到另一個計算機語言(目標語言,通常具有二進制形式稱爲目標代碼)。想要轉換源代碼的最常見原因是創建一個可執行程序。

但是下面這段代碼可以被認爲是編譯器嗎?

class S { 
    public static void main(String ... args) { 
    if("1".equals(args[0])) { 
     System.out.println("echo Hi"); 
    } 
    } 
} 

我知道這是一個過於簡單化,但是,你什麼時候可以說一個給定的程序實際上是一個「編譯器」?

+0

一個非常簡單的編譯器...不是很通用;) – Oded 2011-03-01 22:11:39

+0

如果你的源語言只包含一個有效的計劃 - 「1」,和您的目標語言是你自己的shell腳本的子集,用一個命令 - 呼應「嗨」 - 好的。否則,不。 – Tesserex 2011-03-01 22:12:02

+1

這是一個很好的問題,但也許它應該是社區wiki? – 2011-03-01 22:17:35

回答

3

語言是由字符串「1」與打印語義「Hi!」組成的語言一種編程語言?我不會說,所以這不是一個編譯器。

當它接受真正的編程語言並將其轉換爲另一種不同的語言時,則稱它爲編譯器。這通常涉及解析源語言以提供語義,然後將其改爲其他語言。

1

有人可能會使用Turing-completeness作爲標準,但這有點嚴格(特殊用途的編程語言可能不是圖靈完整版),所以我會選擇一些不太嚴格的東西。

我認爲關鍵的是,輸出是一個一系列指令,並且存在是輸出和輸入之間的一些非平凡對應。您提供的示例違反了後者的標準,因爲無論輸入有多複雜,只有兩種可能的輸出:"echo Hi",而不是任何內容。

對應關係可以非常接近(如FORTRAN和程序集之間)或更遠(Prolog或Lisp和程序集),但只要可以通過一致的輸入語言生成大量行爲,它就是一個編譯器。

+0

圖靈完整性不幫助 - 你會排除,例如,SQL查詢編譯器。 – 2011-03-10 11:28:35

+0

謝謝,這就是我所說的「專用編程語言」的一個很好的例子。 – 2011-03-10 18:23:17

相關問題