Input format
输入格式
notation.md
commit: 0b153cb607e981bfa64ec6fcbfc92cefc891d4ed
本章译文最后维护日期:2024-04-06
本章介绍如何将源文件解释为一系列 token。
有关程序如何组织成文件的描述,请参见crate 和源文件。
Source encoding
源文件编码方式
每个源文件都被解释为以 UTF-8编码的 Unicode字符序列。 如果文件不是有效的 UTF-8编码方式,则报错。
Byte order mark removal
BOM移除
如果字符序列中的第一个字符是 U+FEFF
(BYTE ORDER MARK),则会将其移除。
CRLF normalization
CRLF归一化
U+000D
(CR) 后紧跟着 U+000A
(LF) 这样的字符对都被一个 U+000A
(LF) 所代替。
其他时候出现的字符U+000D
(CR) 则保留在原位(它们被视为空白符)。
Shebang removal
Shebang 移除
如果字符序列以字符 #!
起行,那直到并包括第一个 U+000A
(LF) 的字符将被从此字符序列中移除。
例如,以下文件的第一行将被忽略:
#!/usr/bin/env rustx
fn main() {
println!("Hello!");
}
作为例外,如果 #!
字符后面跟着一个 [
token(此时需要忽略中间的[comments][注释]或空白符),则不会删除任何内容。
这样可以防止删除了源文件开头的内部属性。
注意: 标准库的
include!
宏读取的文件会采用BOM移除、CRLF归一化和 shebang删除的处理方式。但include_str!
和include_bytes!
宏没有采用。
Tokenization
token化
源文件被前面步骤处理后的的字符序列将如本章剩余部分所述那样被转换为 token。