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 (пробел)