输入格式

本章描述如何将源文件解释为词法单元序列。

有关程序如何组织到文件中的描述,请参阅包和源文件

源文件编码

每个源文件都被解释为以 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! 宏则不会。

词法分析

然后,将生成的字符序列按照本章剩余部分的描述转换为词法单元。