输入格式

本章描述了源文件如何被解释为一系列记号(token)。

关于程序如何组织成文件,请参阅Crate 和源文件

源文件编码

每个源文件都被解释为一系列以 UTF-8 编码的 Unicode 字符。

如果文件不是有效的 UTF-8 编码,则会出错。

字节顺序标记移除

如果序列中的第一个字符是 U+FEFF字节顺序标记),则该字符会被移除。

CRLF 规范化

每对紧跟在 U+000D (CR) 之后 U+000A (LF) 的字符对,都会被替换为一个单独的 U+000A (LF)。

字符 U+000D (CR) 的其他出现位置会保留不变(它们被视为空白字符)。

Shebang 移除

如果剩余的序列以字符 #! 开头,则会移除从 #! 开始直到第一个 U+000A (LF)(包括 U+000A (LF))的所有字符。

例如,以下文件的第一行将被忽略

#!/usr/bin/env rustx

fn main() {
    println!("Hello!");
}

一个例外是,如果 #! 字符后面紧跟着(忽略中间的注释空白字符)一个 [ 记号,则不会移除任何内容。这可以防止源文件开头的内部属性被移除。

注意

标准库的include! 宏会对其读取的文件应用字节顺序标记移除、CRLF 规范化和 shebang 移除。而include_str!include_bytes! 宏则不会。

记号化

得到的字符序列随后会按照本章其余部分所述转换为记号。