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

Формат входных данных

Lexer
CHAR<a Unicode scalar value>

NUL → U+0000

CHAR a Unicode scalar value
NUL U+0000

Эта глава описывает, как исходный файл интерпретируется как последовательность токенов.

Описание того, как программы организованы в файлы, см. в разделе Крейты и исходные файлы

Кодировка исходного кода

Каждый исходный файл интерпретируется как последовательность символов Юникода, закодированных в UTF-8.

Ошибкой является случай, если файл не является корректным UTF-8.

Удаление метки порядка байт (BOM)

Если первый символ в последовательности — U+FEFF (МЕТКА ПОРЯДКА БАЙТ), он удаляется.

Нормализация CRLF

Каждая пара символов U+000D (CR), сразу за которой следует U+000A (LF), заменяется на один символ U+000A (LF). Это происходит однократно, а не повторно, поэтому после нормализации в входных данных всё ещё могут существовать U+000D (CR), сразу за которыми следует U+000A (LF) (например, если исходные данные содержали “CR CR LF LF”).

Остальные вхождения символа U+000D (CR) остаются на месте (они рассматриваются как пробельные символы).

Удаление шебанга (shebang)

Если оставшаяся последовательность начинается с символов #!, символы до первого U+000A (LF) включительно удаляются из последовательности.

Например, первая строка следующего файла будет проигнорирована:

#!/usr/bin/env rustx

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

В качестве исключения, если за символами #! (игнорируя находящиеся между ними комментарии или пробельные символы) следует токен [, ничего не удаляется. Это предотвращает удаление внутреннего атрибута в начале исходного файла.

Note

Макрос стандартной библиотеки include! применяет удаление метки порядка байт, нормализацию CRLF и удаление шебанга к файлу, который он читает. Макросы include_str! и include_bytes! этого не делают.

Токенизация

Полученная последовательность символов затем преобразуется в токены, как описано в оставшейся части этой главы.