2011-11-08 43 views
1

當爲特定語言創建編譯器時,開發編譯器的人是否定義了語言,它的命令從頭開始就好像語言從不存在一樣(這看起來不真實)?或者有沒有辦法使用以前的編譯器?或者他們怎麼做呢?編譯器是如何創建的

回答

0

這一切都取決於語言。如果語言不存在(並且記住一開始沒有),那麼它當然必須在編譯器之前進行設計。但是,如果您只想對現有語言進行更改,那麼採用現有編譯器並進行所需的更改可能會更容易。

我個人爲little languages編制了一些編譯器,我想到了我自己,並從頭創建了編譯器。有時使用諸如lexYacc之類的工具,有時通過手工編碼。

3

他們要麼定義[域特定]語言或實施一些已經存在的語言。

甲語言通常寫入特定形式稱爲BNF

一個方法來創建一個編譯器(或至少詞法分析器和解析器)是使用一個工具,有幾個工具,如YACC /法,ANTLR等它可用於爲編譯器生成原始管道,標記文件並解析令牌。查看antlr.org獲取生成C#,Java或C代碼解析器/詞法分析器的一些非常容易使用的工具的一些示例。

0

語言的評估自計算機誕生以來就開始了,第一個優化編譯器出現在20世紀60年代左右。

對你的問題最簡單的回答是,語言設計首先出現,然後編譯器開發人員開發編譯器遵循標準。然後語言設計者從用戶社區獲得反饋,並對語言標準進行更改,編譯器開發人員再次處理這個新標準。

compiler support for C++0x standard

通常情況下,編譯器開發者開發新的語言功能只支持使用編譯器已經支持功能。

2

我猜你是假設編譯器是寫在它編譯相同的語言。不是這種情況。該過程被稱爲引導。第一個C#編譯器是用C++編寫的。第一個C++編譯器用C編寫。第一個C編譯器用B編寫。第一個B編譯器用BCPL編寫。除此之外,它變得模糊,古老的歷史和所有這一切。這最終會回到有人用一個切換開關將程序輸入到一臺機器中。

解決你的問題的第一部分:是的。沒有人對語言的語法有很強的定義,沒有人着手編寫編譯器。這可以在紙上計算出來。

+0

我沒有假設,我不是在談論爲新語言創建第一個編譯器,我正在討論爲已經存在的語言創建編譯器。 –

+1

然後我不知道你在問什麼。特別是「這似乎不真實」的評論令人困惑。 –

+0

@Sameh,所以你在談論一個「已有的語言」 *和*在同一時間「定義language..as如果根本不存在的語言」:似乎是一個矛盾,使問題很難做到公正對待。 – inger