7. Формальный синтаксис
Спецификация формального синтаксиса использует расширенную нотацию Бэкуса-Наура (BNF), описанную в документе [ABNF].
За исключением явно указанных случаев регистр символов для букв не принимается во внимание. Использование строчных и прописных букв обусловлено исключительно наглядностью. Реализации должны принимать эти строки независимо от регистра символов.
UPALPHA = %x41-5A ;; верхний регистр: A-Z LOALPHA = %x61-7A ;; нижний регистр: a-z ALPHA = UPALPHA / LOALPHA ;; регистр не имеет значения DIGIT = %x30-39 ;; цифры 0-9 HEXDIGIT = %x41-46 / DIGIT ;; шестнадцатеричные цифры (верхний регистр) hexchar = "+" HEXDIGIT HEXDIGIT xchar = %x21-2A / %x2C-3C / %x3E-7E ;; символы US-ASCII за исключением "+", "=", пробела и CTL xtext = *(xchar / hexchar) AUTH_CHAR = ALPHA / DIGIT / "-" / "_" auth_type = 1*20AUTH_CHAR auth_command = "AUTH" SPACE auth_type [SPACE (base64 / "=")] *(CRLF [base64]) CRLF auth_param = "AUTH=" xtext ;; декодированная форма xtext ДОЛЖНА ;; совпадать с addr-spec или "<>" base64 = base64_terminal / ( 1*(4base64_CHAR) [base64_terminal] ) base64_char = UPALPHA / LOALPHA / DIGIT / "+" / "/" ;; регистр принимается во внимание base64_terminal = (2base64_char "==") / (3base64_char "=") continue_req = "334" SPACE [base64] CRLF CR = %x0C ;; ASCII CR (возврат каретки) CRLF = CR LF CTL = %x00-1F / %x7F ;; все коды управления ASCII, а также символ DEL LF = %x0A ;; ASCII LF (перевод строки) SPACE = %x20 ;; ASCII SP (пробел)