2012-02-07 42 views
1

如果我分解編譯過程爲C或C++源文件到下列步驟:解析&彙編命名法

  • 答:預處理。 B:Tokenizing(收集和列出關鍵字,標識符,符號,文字(字符串,字符,數字))。 C:將收集的令牌組裝成結構化的形式,例如樹。
  • D:通過分析它的語義來處理和驗證這個結構化表單。 E:生成指令列表(例如:ASM)。

我命名的問題是:

  1. 是語法分析所有#ABC的? #公元前?只是#C?
  2. 我應該爲#ABC使用什麼條款? #公元前? #C?
  3. 什麼是lexing,在這裏?它只是#B?
  4. 是#D語義解析?
+0

另外也產生intemediate代碼的最後階段,並優化[之間d至E] – amit 2012-02-07 21:39:56

+0

的preproce ssor也必須做一些練習,它也需要了解語言。 – 2012-02-07 21:42:24

回答

0

雖然只有預處理階段是語言標準的一部分,大多數平臺劃分滿構建過程到

  • 預處理,
  • 編譯,
  • 組裝,
  • 鏈接。

編譯是包含所有「努力工作」的階段,從lexing和解析開始。優化來自沿途的某個地方。

一些使用某種形式的「鏈接時間優化」的現代系統可能會推遲或重複編譯/彙編階段,直到所有組成對象文件都被處理過一次,但從道德上講,這與如果僅僅連接所有將項目的文件輸入到一個大文件中並進行編譯。

0

(A)是簡單的預處理:剪切和粘貼
(B)是lexical analysis
(C)是syntax analysis [解析]
(d)是semantics analysis [數5在所附鏈接]

A,B,C,D基本上是一個編譯器的front end,而你E是其backend

+0

那麼[ABC]可以被稱爲文本處理什麼的? [BC]呢?我在爲我正在設計的編譯器的模塊和子模塊尋找合適的名稱。 – Aotium 2012-02-07 23:39:30