Kattalashtirilgan Backus-Naur shakli - Augmented Backus–Naur form

Yilda Kompyuter fanlari, kengaytirilgan Backus-Naur shakli (ABNF) a metall tili asoslangan Backus-Naur shakli (BNF), lekin o'zining sintaksis va lotin qoidalaridan iborat. ABNF uchun motiv printsipi a ta'riflashdir rasmiy tizim ikki yo'nalishli sifatida ishlatiladigan tilning aloqa protokoli. U tomonidan belgilanadi Internet standarti 68 ("STD 68", case case sic), 2010 yil dekabr holatiga ko'ra bu RFC  5234 va u ko'pincha ta'riflash tili sifatida xizmat qiladi IETF aloqa protokollari.[1][2]

RFC  5234 o'rnini bosadi RFC  4234 (bu o'rnini egalladi RFC  2234 va RFC  733 ).[3] RFC 7405 uni yangilaydi va harflarga sezgir qator harflarini ko'rsatish uchun sintaksis qo'shadi.

Umumiy nuqtai

ABNF spetsifikatsiyasi bu quyidagicha yozilgan lotin qoidalari to'plamidir

qoida = ta'rif; sharh CR LF

bu erda qoida katta-kichik sezgir nonterminal, ta'rifi qoidani belgilaydigan ramzlar ketma-ketligidan, hujjatlar uchun sharhdan va vagonni qaytarish va chiziqli ozuqa bilan tugashidan iborat.

Qoida nomlari katta-kichikligi sezgir emas: <rulename>, <Rulename>, <RULENAME>va <rUlENamE> barchasi bir xil qoidaga murojaat qiladi. Qoida nomlari harfdan, so'ngra harflar, raqamlar va tirelardan iborat.

Burchak qavslari (<, >) qoida nomlari atrofida talab qilinmaydi (ular BNF-da bo'lgani kabi). Biroq, ular qoida nomini aniqlash uchun nasrda ishlatilganda qoida nomini chegaralash uchun ishlatilishi mumkin.

Terminal qiymatlari

Terminallar bir yoki bir nechta raqamli belgilar bilan belgilanadi.

Raqamli belgilar foiz belgisi sifatida ko'rsatilishi mumkin %keyin bazasi (b = ikkilik, d = kasr, va x = o'n oltilik), so'ngra qiymat yoki qiymatlarni birlashtirish (tomonidan ko'rsatilgan .). Masalan, vagonning qaytishi tomonidan belgilanadi % d13 kasrda yoki % x0D o'n oltilikda. Vagonning qaytishi, so'ngra chiziqli ozuqa quyidagicha biriktirilishi bilan belgilanishi mumkin % d13.10.

To'g'ridan-to'g'ri matn tirnoq belgilariga kiritilgan qator yordamida ("). Ushbu satrlar katta-kichiklikka bog'liq emas va ishlatiladigan belgilar to'plami (US-) ASCII. Shuning uchun, mag'lubiyat "abc" "abc", "Abc", "aBc", "abC", "ABc", "AbC", "aBC" va "ABC" ga mos keladi. RFC 7405 kichik harflar qatoriga sintaksis qo'shdi: % s "aBc" faqat "aBc" ga mos keladi. Bungacha, harfga sezgir satr faqat alohida belgilar ro'yxati bilan belgilanishi mumkin edi: "aBc" ga mos kelish uchun, ta'rif % d97.66.99. Ip, shuningdek, a bilan katta-kichik harflar bilan sezgir bo'lmagan holda aniq ko'rsatilishi mumkin % i prefiks.

Operatorlar

Oq bo'shliq

Oq bo'shliq ta'rif elementlarini ajratish uchun ishlatiladi; bo'sh joy ajratuvchi sifatida tan olinishi uchun u aniq kiritilishi kerak. Bitta bo'shliq belgisi uchun aniq ma'lumot WSP (chiziqli oq bo'shliq) va LWSP yangi qatorlarga ruxsat berilgan bo'shliqdagi nol yoki undan ortiq belgilar uchun. The LWSP RFC5234-dagi ta'rif munozarali[4] chunki ikkita maydon o'rtasida ajratuvchini hosil qilish uchun kamida bitta bo'shliq belgisi kerak.

Ta'riflar chap tomonga yo'naltirilgan. Agar bir nechta satrlar kerak bo'lsa (o'qish uchun), davom etish satrlari bo'shliq bilan chegaralanadi.

Izoh

; sharh

Vergul (;) satr oxirigacha davom etadigan sharhni boshlaydi.

Birlashtirish

1-qoida. 2-qoida

Qoida, qoida nomlari ketma-ketligini ro'yxatlash orqali aniqlanishi mumkin.

"Aba" qatoriga mos kelish uchun quyidagi qoidalardan foydalanish mumkin:

  • fu = % x61 ; a
  • bar = % x62 ; b
  • g'ichirlash = fu bar fu

Shu bilan bir qatorda

1-qoida / 2-qoida

Qoidalar a bilan ajratilgan muqobil qoidalar ro'yxati bilan belgilanishi mumkin Solidus (/).

Qoidani qabul qilish fu yoki qoida bar, quyidagi qoida tuzilishi mumkin:

  • fubar = fu / bar

Qo'shimcha alternativalar

1-qoida = / 2-qoida

Dan foydalanish orqali qoidaga qo'shimcha alternativalar qo'shilishi mumkin =/ qoida nomi va ta'rifi o'rtasida.

Qoida

  • qoidalar to'plami = alt1 / alt2 / alt3 / alt4 / alt5

ga teng

  • qoidalar to'plami = alt1 / alt2
  • qoidalar to'plami =/ alt3
  • qoidalar to'plami =/ alt4 / alt5

Qiymat oralig'i

% c ## - ##

Tire yordamida raqamli qiymatlar oralig'i belgilanishi mumkin (-).

Qoida

  • OKTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7"

ga teng

  • OKTAL = % x30-37

Tartib guruhi

(1-qoida 2-qoida)

Elementlar ta'rifda qoidalarni guruhlash uchun qavs ichiga joylashtirilishi mumkin.

"Elem fubar snafu" yoki "elem tarfu snafu" ga mos kelish uchun quyidagi qoidani tuzish mumkin:

  • guruh = elem (fubar / tarfu) snafu

"Elem fubar" yoki "tarfu snafu" ga mos kelish uchun quyidagi qoidalar tuzilishi mumkin:

  • guruh = elem fubar / tarfu snafu
  • guruh = (elem fubar) / (tarfu snafu)

O'zgaruvchan takrorlash

n * nQoidalar

Elementning takrorlanishini, shaklini ko'rsatish uchun * element ishlatilgan. Ixtiyoriy <a> kiritiladigan elementlarning minimal sonini beradi (sukut bo'yicha 0). Ixtiyoriy <b> kiritiladigan elementlarning maksimal sonini beradi (cheksizligi sukut bo'yicha).

Foydalanish * element nol yoki undan ko'p elementlar uchun, * 1element nol yoki bitta element uchun, 1 * element bir yoki bir nechta element uchun va 2 * 3 element ikki yoki uchta element uchun, qarang. doimiy iboralar e *, e?, e + va e {2,3}.

Maxsus takrorlash

nRule

Elementlarning aniq sonini ko'rsatish uchun shakl element ishlatiladi va unga teng keladi * element.

Foydalanish 2DIGIT ikkita raqamli raqamni olish uchun va 3DIGIT uchta raqamli raqamni olish. (DIGIT quyida "ostida belgilanadiAsosiy qoidalar "Shuningdek qarang pochta indeksi quyidagi misolda.)

Ixtiyoriy ketma-ketlik

[Qoida]

Ixtiyoriy elementni ko'rsatish uchun quyidagi konstruktsiyalar tengdir:

  • [fubar snafu]
  • *1(fubar snafu)
  • 0*1(fubar snafu)

Operatorning ustuvorligi

Quyidagi operatorlar ushbu majburiyatni eng qattiq bog'lanishdan eng yumshoq ulanishga qadar ustunlikka ega:

  1. Iplar, ismlarning shakllanishi
  2. Izoh
  3. Qiymat oralig'i
  4. Takrorlash
  5. Guruhlash, ixtiyoriy
  6. Birlashtirish
  7. Shu bilan bir qatorda

Birlashtirish bilan muqobil operatordan foydalanish chalkash bo'lishi mumkin va aniq biriktirish guruhlarini yaratish uchun guruhlashdan foydalanish tavsiya etiladi.

Asosiy qoidalar

Asosiy qoidalar ABNF standartida aniqlangan.

QoidaRasmiy ta'rifMa'nosi
ALPHA% x41-5A /% x61-7AASCII katta va kichik harflari (A – Z, a – z)
DIGIT% x30-39O'nli raqamlar (0-9)
HEXDIGDIGIT / "A" / "B" / "C" / "D" / "E" / "F"O‘n oltinchi raqamlar (0–9, A – F, a-f)
DQUOTE% x22Ikkita taklif
SP% x20Bo'shliq
HTAB% x09Landshaft yorliq
WSPSP / HTABBo'shliq va gorizontal yorliq
LWSP* (WSP / CRLF WSP)Lineer oq bo'shliq (o'tgan yangi qator)
VCHAR% x21-7EKo'rinadigan (bosma) belgilar
CHAR% x01-7FNULdan tashqari har qanday ASCII belgisi
OCTET% x00-FF8 bit ma'lumotlar
CTL% x00-1F /% x7FBoshqaruv elementlari
CR% x0DVagonni qaytarish
LF% x0ALinefeed
CRLFCR LFInternet standartidagi yangi yo'nalish
BIT"0" / "1"Ikkilik raqam

Misol

Kengaytirilgan Backus-Naur shakli (ABNF) sahifasida keltirilgan pochta manzilining namunasi quyidagicha ko'rsatilishi mumkin:

pochta manzili   = ism qismi ko'cha zip qismiism qismi        = *(shaxsiy qism SP) familiya [SP qo'shimchasi] CRLFism qismi        =/ shaxsiy qism CRLFshaxsiy qism    = ism / (boshlang'ich ".")ism       = *ALPHAboshlang'ich          = ALPHAfamiliya        = *ALPHAqo'shimchasi           = ("Kichik" / "Sr." / 1*("Men" / "V" / "X"))ko'cha           = [mos SP] uy-raqam SP ko'cha nomi CRLFmos              = 1*4DIGITuy-raqam        = 1*8(DIGIT / ALPHA)ko'cha nomi      = 1*VCHARzip qismi         = shaharcha nomi "," SP davlat 1*2SP pochta indeksi CRLFshaharcha nomi        = 1*(ALPHA / SP)davlat            = 2ALPHApochta indeksi         = 5DIGIT ["-" 4DIGIT]

Tuzoqlar

RFC 5234 LWSP ta'rifiga quyidagi ogohlantirishni qo'shadi:

Ushbu chiziqli-oq bo'shliq qoidasidan foydalanish faqat bo'sh joyni o'z ichiga olgan, endi pochta sarlavhalarida qonuniy bo'lmagan va boshqa kontekstda o'zaro bog'liqlik muammolarini keltirib chiqardi. Pochta sarlavhalarini belgilashda foydalanmang va boshqa kontekstlarda ehtiyotkorlik bilan foydalaning.

Adabiyotlar

  1. ^ "Internet protokolining rasmiy standartlari". RFC muharriri. 2010-02-21. Arxivlandi asl nusxasidan 2010 yil 9 fevralda. Olingan 2010-02-21.
  2. ^ Kroker, D .; Overell, P. (2008 yil yanvar). "Sintaksis xususiyatlari uchun kengaytirilgan BNF: ABNF" (Oddiy matn). RFC muharriri. p. 16. Olingan 2010-02-21.
  3. ^ "RFC indeksi". RFC muharriri. 2010-02-19. Arxivlandi asl nusxasidan 2010 yil 9 fevralda. Olingan 2010-02-21.
  4. ^ RFC Errata 3096.