C/C++編譯器如何處理源代碼中的轉義字符[「\」]?如何編寫用於處理該字符的編譯器語法?編譯器在遇到該字符後會做什麼?逃逸背後的魔力()字符
5
A
回答
14
大多數編譯器分爲幾部分:編譯器前端稱爲lexical analyzer或掃描器。這部分編譯器讀取實際字符並創建令牌。它有一個狀態機,它在看到轉義字符時決定它是否是真的(例如當它出現在字符串中時)或修改下一個字符。令牌作爲轉義字符或某些其他標記(如製表符或換行符)相應地輸出到編譯器的下一部分(the parser)。狀態機可以將幾個字符分組成一個令牌。
1
具有以下字符的轉義字符(如\n
)是C編譯器的單個字符 - 掃描器將其作爲字符標記呈現給解析器,因此在解析器中不需要特殊的語法規則以用於轉義字符。
2
它一般逸出以下字符:
- 在一個字符串或字符文字,則意味着逸出的下一個字符。
\a
表示'提醒'(閃爍終端,嗶嗶聲或其他),\n
表示'換行',\xNUM
表示例如一個十六進制數字。 - 如果它作爲換行符之前的最後一個可見字符出現,無論是否在一個字符串中(甚至在一行全註釋中!),它將作爲一行續行:以下換行符被忽略,並且下一行與當前行合併。
5
關於這個問題的一個有趣的筆記是On Trusting Trust [PDF link]。
本文描述了一種編譯器可以準確處理這個問題的一種方式,顯示c-C編譯器如何不將代碼顯式轉換爲ASCII值;以及如何將新的轉義代碼引導到編譯器中,以便理解新代碼的ASCII值也是隱含的。
相關問題
- 1. $ _POST內的逃逸字符
- 2. Python特殊字符逃逸
- 3. sed和逃逸字符
- 4. JPA 2 Hibernate的逃逸字符串
- 5. 逃逸SQL字符串中的Java
- 6. 以變量名逃逸的字符
- 7. JavaScript的逃逸問題Unicode字符
- 8. 逃逸JSON的特殊字符在c#
- 9. R.java文件背後的魔力
- 10. 「[email protected]:start」背後的魔力?
- 11. CAReplicatorLayer背後的魔力是什麼?
- 12. Lightstreamer背後的魔力是什麼?
- 13. 逃逸%
- 14. 逃逸%
- 15. 如何擺脫逃逸字符
- 16. 逃逸字符串,使其UNIX準備
- 17. 春逃逸已轉義字符串
- 18. 逃逸在glob模式字符GIT中
- 19. 逃逸特殊字符jQuery中selecter
- 20. 如何XDocument.Save寫作逃逸字符
- 21. 逃逸字符串爲MySQL在Java中
- 22. 龍捲風逃逸英鎊#字符
- 23. 在雙逃逸Javascript字符串行情
- 24. 如何替換逃逸字符?
- 25. 逃逸的unicode
- 26. 逃逸符號「<%=' and '%>」
- 27. 逃逸報價/ F符
- 28. addcslashes逃逸大寫字母
- 29. 逃逸問題
- 30. 逃逸在PHP
至少試着拼寫你創建的標籤正確... – Gilles 2008-11-27 10:22:10
對不起,這個問題是匆忙輸入的 – mahesh 2008-11-27 10:27:39
你的問題中缺少這個字符(?)。 雖然有什麼問題? – 2008-11-27 10:31:36