输入格式
本章描述了源文件如何被解释为一系列记号(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!宏则不会。
记号化
得到的字符序列随后会按照本章其余部分所述转换为记号。