输入格式

本章节描述了如何将源文件解释为一系列 token。

有关程序如何组织成文件的描述,请参阅 Crates and source files

源文件编码

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

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

字节顺序标记移除

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

CRLF 规范化

每个字符对 U+000D (CR) 紧接着 U+000A (LF) 会被替换为单个 U+000A (LF)。

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

Shebang 移除

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

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

#!/usr/bin/env rustx

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

作为例外,如果 #! 字符后跟(忽略中间的 注释空白符)一个 [ token,则不会删除任何内容。 这可以防止删除源文件开头的 内部属性

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

Tokenization

然后,生成的字符序列将转换为 token,如本章的其余部分所述。