Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

输入格式

Syntax
CHAR<a Unicode scalar value>

NUL → U+0000

CHAR a Unicode scalar value
NUL U+0000

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

有关程序如何组织成文件的描述,请参阅crate和源文件

源文件编码

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

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

字节序标记移除

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

CRLF规范化

每对紧跟着U+000A (LF) 的U+000D (CR) 字符会被单个U+000A (LF) 替换。此操作只执行一次,不会重复,因此在规范化之后,输入中仍然可能存在紧跟着U+000A (LF) 的U+000D (CR)(例如,如果原始输入包含 “CR CR LF LF”)。

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

Shebang移除

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

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

#!/usr/bin/env rustx

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

作为例外,如果#!字符后面紧跟着(忽略中间的注释空白符)一个[词法单元,则不进行任何移除。这可以防止源文件开头的内部属性被移除。

注意

标准库的include!宏会对其读取的文件进行字节序标记移除、CRLF规范化和Shebang移除。include_str!include_bytes!宏则不会。

词法单元化

然后,所得的字符序列将转换为词法单元,具体描述见本章的其余部分。