C / C ++编译器如何操作源代码中的转义字符[“\”]?如何编写用于处理该字符的编译器语法?编译器遇到该字符后会做什么?
答案 0 :(得分:14)
大多数编译器分为几部分:编译器前端称为lexical analyzer或扫描程序。编译器的这一部分读取实际字符并创建标记。它有一个状态机,在看到转义字符时决定它是否是真的(例如当它出现在字符串中时)或者它修改下一个字符。令牌作为转义字符或其他一些标记(例如制表符或换行符)相应地输出到编译器的下一部分(the parser)。状态机可以将多个字符组合成一个令牌。
答案 1 :(得分:5)
有关此主题的有趣说明是On Trusting Trust [PDF link]。
本文描述了编译器可以准确处理此问题的一种方式,显示了c-written-in-c编译器如何将代码显式转换为ASCII值;以及如何将新的转义码引导到编译器中,以便理解新代码的ASCII值也是隐含的。
答案 2 :(得分:2)
它通常会逃避以下字符:
\a
表示“提醒”(闪烁终端,哔哔声等),\n
表示'换行',\xNUM
表示十六进制数字。答案 3 :(得分:1)
转义字符(如\n
)是C编译器的单个字符 - 扫描程序将其作为字符标记呈现给解析器,因此解析器中不需要特殊的语法规则来转义转义字符。 / p>