输入格式
Lexer
CHAR → [U+0000-U+D7FF U+E000-U+10FFFF] // a Unicode scalar value
ASCII → [U+0000-U+007F]
NUL → U+0000
本章描述源文件如何被解释为词法单元序列。
有关程序如何组织到文件中的描述,请参阅包和源文件。
源编码
每个源文件被解释为以 UTF-8 编码的 Unicode 字符序列。
如果文件不是有效的 UTF-8,则是错误。
字节顺序标记移除
如果序列中的第一个字符是 U+FEFF(字节顺序标记),则将其移除。
CRLF 规范化
每对字符 U+000D (CR) 紧接着 U+000A (LF) 被替换为单个 U+000A (LF)。这发生一次,而不是重复发生,因此在规范化之后,输入中仍然可以存在 U+000D (CR) 紧接着 U+000A (LF)(例如,如果原始输入包含 “CR CR LF LF”)。
字符 U+000D (CR) 的其他出现保留在原处(它们被视为空白)。
Shebang 移除
如果存在 shebang,则将其从输入序列中移除(因此被忽略)。
词法分析
然后,生成的字符序列按照本章其余部分的描述转换为词法单元。
Note
标准库
include!宏对其读取的文件应用以下转换:
- 字节顺序标记移除。
- CRLF 规范化。
- 在项上下文中调用时移除 shebang(与表达式或语句上下文相反)。
include_str!和include_bytes!宏不应用这些转换。