Формат входных данных
Эта глава описывает, как исходный файл интерпретируется как последовательность токенов.
Описание того, как программы организованы в файлы, см. в разделе Крейты и исходные файлы
Кодировка исходного кода
Каждый исходный файл интерпретируется как последовательность символов Юникода, закодированных в 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!этого не делают.
Токенизация
Полученная последовательность символов затем преобразуется в токены, как описано в оставшейся части этой главы.