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. sed和逃逸字符
- 2. 逃逸JavaScript字符串
- 3. JavaScript的逃逸问题Unicode字符
- 4. 逃逸JSON的特殊字符在c#
- 5. R.java文件背后的魔力
- 6. 逃逸%
- 7. 逃逸%
- 8. 逃逸字符串,使其UNIX准备
- 9. 如何XDocument.Save写作逃逸字符
- 10. 在双逃逸Javascript字符串行情
- 11. 逃逸特殊字符jQuery中selecter
- 12. 国防部重写逃逸字符
- 13. 春逃逸已转义字符串
- 14. 如何替换逃逸字符?
- 15. 逃逸字符串为MySQL在Java中
- 16. 逃逸符号“<%=' and '%>”
- 17. 逃逸报价/ F符
- 18. addcslashes逃逸大写字母
- 19. Shell脚本产生逃逸字符(\)与逃脱双重qoutes
- 20. 逃逸冒号
- 21. 逃逸在PHP
- 22. 逃逸问题
- 23. 逃逸“[”从JSON
- 24. 逃逸“价值”
- 25. HTML逃逸
- 26. 高效VB逃逸字符像C#中的'字符串'
- 27. PHP的sprintf逃逸%
- 28. LoadRunner的VUGEN逃逸
- 29. 逃逸符号使用的sed
- 30. 逃逸问号字符作为占位符中的NodeJS
至少试着拼写你创建的标签正确... – Gilles 2008-11-27 10:22:10
对不起,这个问题是匆忙输入的 – mahesh 2008-11-27 10:27:39
你的问题中缺少这个字符(?)。 虽然有什么问题? – 2008-11-27 10:31:36