输入格式
本章描述如何将源文件解释为词法单元序列。
有关程序如何组织到文件中的描述,请参阅包和源文件。
源文件编码
每个源文件都被解释为以 UTF-8 编码的 Unicode 字符序列。如果文件不是有效的 UTF-8,则会出现错误。
字节顺序标记移除
如果序列中的第一个字符是 U+FEFF
(字节顺序标记),则将其移除。
CRLF 规范化
每个紧跟在 U+000A
(LF) 之后的 U+000D
(CR) 字符对都将被替换为单个 U+000A
(LF)。
字符 U+000D
(CR) 的其他情况将保留在原位(它们被视为空白符)。
Shebang 移除
如果剩余的序列以字符 #!
开头,则直到并包括第一个 U+000A
(LF) 的字符都将从序列中移除。
例如,以下文件的第一行将被忽略
#!/usr/bin/env rustx
fn main() {
println!("Hello!");
}
作为例外,如果 #!
字符后面(忽略中间的注释或空白符)跟着一个 [
词法单元,则不会移除任何内容。这可以防止移除源文件开头的内部属性。
注意:标准库
include!
宏对其读取的文件应用了字节顺序标记移除、CRLF 规范化和 Shebang 移除。而include_str!
和include_bytes!
宏则不会。
词法分析
然后,将生成的字符序列按照本章剩余部分的描述转换为词法单元。