3.2. Sözdizimsel Dizgecikler

Aşağıdaki kurallar, dizgeciklerinden daha yüksek seviyeli çözümleyicilerin yararlanması için temel bir sözdizimsel çözümleyici tanımlamakta kullanılır. Bu bölümde yapılı başlık alanı gövdelerinde kullanılan dizgecikler tanımlanmıştır.

Bilginize

Bu standardın okuyucuları, bu sözdizimsel dizgeciklerin gerek düşük gerekse yüksek seviyeli sözdiziminde belgenin devamındaki kullanımına özel bir dikkat gösterirse iyi olur. Özellikle, Boşlukların ve Açıklamaların Katlanması bölümünde tanımlanan boşluk karakterlerinden oluşan dizgecikler ve açıklama dizgecikleri burada tanımlanan düşük seviyeli dizgeciklerde kullanılmakta ve bu düşük seviyeli dizgecikler de daha sonra daha yüksek seviyeli dizgecikleri tanımlamakta kullanılmaktadır. Bu yüzden, yüksek seviyeli dizgeciklerde açıklama ve boşluk karakterlerinin kullanımına, belli bir tanımda açıkça görünmeseler bile izin verilebilir.

3.2.1. İlkel Dizgecikler

Aşağıdakiler, bu standarttaki başka bir yere başvurulmasını sağlayan, fakat [RFC2234]'te başka türlü tanımlı olmayan ilkel dizgeciklerdir. Bunların bazıları sözdiziminde başka bir yerde görünmezler, fakat bu belgenin diğer bölümlerinden başvurulmak için yararlıdırlar.

Bilginize

Aşağıdaki "imler" tam da buna bir örnektir. imler dizgeciği bu standardın başka bir yerinde görünmese bile, iletileri sözdizimsel olarak çözümleyen araçları gerçekleyenler için kullanışlıdır. imler içindeki karakterlerin her biri sözdizimsel çözümlemede bir dizgecik oluşturma yerini belirtmekte kullanılabilir.

  SSSBsiz-DNT  =      %d1-8 /         ; sekme, satırbaşı, satırsonu ve
                      %d11 /          ; boşluk karakterleri hariç
                      %d12 /          ; US-ASCII denetim karakterleri
                      %d14-31 /
                      %d127

  metin        =      %d1-9 /         ; satırbaşı ve satırsonu dışında
                      %d11 /          ; tüm karakterler
                      %d12 /
                      %d14-127 /
                      atıl-metin

  imler        =      "(" / ")" /     ; Sözdiziminin başka parçalarında
                      "<" / ">" /     ; kullanılan özel karakterler
                      "[" / "]" /
                      ":" / ";" /
                      "@" / "\" /
                      "," / "." /
                      ÇTIRNAK

Bu dizgeciklere atanmış özel bir anlamsallık yoktur. Basitçe tek karakterlerdir.

3.2.2. Ötelenmiş karakterler

Bazı karakterler özel yoruma tabidirler, örneğin ayraç olarak kullanılan sözdizimsel dizgecikler böyledir. Bu karakterlerin yorumlanan veri içinde yorumlanmamasını, kendisi olarak davranmasını mümkün kılmak için bir ötekileştirme mekanizması sağlanmıştır.

  öteli-çift  =  ("\" metin) / atıl-öteli-krk

Bir öteli-çift rastlandığı her yerde tek başına içerdiği metin karakteri olarak yorumlanır. Yani, öteli-çift'in parçası olarak görünen "\" imi anlambilimsel olarak "görünmez"dir.

Bilginize

"\" imi bir iletide bir öteli-çift'in parçası olmaksızın bulunabilir. Bir öteli-çift'in parçası olmaksızın bir "\" imi anlambilimsel olarak görünmez değildir. öteli-çift'in bu standartta görüldüğü yerler sadece diçerik, tmetin, dmetni, katsız-tırnak ve katsız-sabit dizgecikleridir.

3.2.3. Boşlukların ve Açıklamaların Katlanması

Katlamada kullanılan boşluk karakterleri dahil (Uzun Başlık Alanları bölümünde açıklanmıştı) tüm boşluk karakterleri başlık alanlarının gövdelerindeki öğeler arasında bulunabilirler. Ayrıca, açıklamalar olarak ele alınan dizgeler yapılı alan gövdelerinde parantez içine alınmış olarak bulunabilirler. Aşağıdaki tanımlar katlama boşluklarını (KBOŞ) ve açıklamaları oluşturur.

Parantez içine alınmış karakterlerden oluşan dizgeler açıklamalar olarak ele alınırlar ve Tırnaklı dizgeler bölümünde tanımlandığı gibi artık bir "tırnaklı-dizge" içinde bulunmazlar. Açıklamalar iç içe olabilir.

Bu standartta KBOŞ ve açıklamaların serbestçe yerleştirilebileceği çeşitli yerler vardır. Bu sözdizimiyle bağdaşmak üzere KBOŞ içersin içermesin açıklamaların yerleri için ek olarak bir "AKBOŞ" dizgeciği tanımlanmıştır. Bununla birlikte, bu standartta AKBOŞ dizgeciği, görüldüğü yerlerde, her satırı başka bir karakter içermeksizin sırf BOŞLUK karakterlerinden oluşmuş bir katlı başlık alanı oluşturacak tarzda kullanılmamalıdır *ZORUNLU*[78].

  KBOŞ     = ([*BOŞLUK CRLF] 1*BOŞLUK) /
                               ; Katlanan boşluklar
                atıl-KBOŞ

  dmetin   = SSSBsiz-DNT /     ; Boşluksuz denetim karakterleri

               %d33-39 /       ; "(", ")" veya "\" içermeksizin
               %d42-91 /       ; kalan US-ASCII karakterleri
               %d93-126

  diçerik  = dmetin / öteli-çift / açıklama

  açıklama = "(" *([KBOŞ] diçerik) [KBOŞ] ")"

  AKBOŞ    = *([KBOŞ] açıklama) (([KBOŞ] açıklama) / KBOŞ)

Bu standart boyunca, KBOŞ (Katlı boşluklar dizgeciği) görülen yerler, Uzun Başlık Alanları bölümünde açıklandığı gibi başlığın katlandığı yerlerdir. Başlık katlamanın bir ileti içinde görüldüğü her yerde (yani, her BOŞLUK karakterinden sonra bir CRLF içeren bir başlık alanı gövdesinde), bu standartla ilgili olarak başlık alanı üzerinde bir sözdizimsel çözümleme uygulamadan önce başlık alanı gövdesine "başlık serme" (yani, CRLF silme işlemi) uygulanır. Başka bir deyişle KBOŞ içindeki CRLF'ler anlambilimsel olarak "görünmez"dir.

Bir açıklama, normalde bir yapılı alan gövdesine insanlar tarafından okunabilen bilgilendirici metin yerleştirmek için kullanılır. Bir açıklamanın KBOŞ içermesine izin verildiğinden, katlamaya açıklama içinde de izin veriliyor demektir. Ayrıca, dikkat ederseniz, bir açıklama içinde öteli-çift'e de izin verildiğinden öteli-çift içinde görünmesinden dolayı bir açıklama içinde parantez ve tersbölü imlerine de izin verilmiş olmaktadır. Anlambilimsel olarak, açıklamayı içine alan parantez imleri açıklamanın bir parçası değildirler; açıklama iki parantez imi arasına alınmış bir nesnedir. Daha önce bahsedildiği gibi, açıklama içinde yer alan öteli-çift içindeki "\" ve KBOŞ içindeki CRLF'ler anlambilimsel olarak "görünmez"dirler ve bu nedenle de açıklamanın parçası değildirler.

Bir yapılı alan başlığındaki sözdizimsel dizgecikler arasında görünen bir KBOŞ, açıklama veya AKBOŞ dönüp dolaşıp, anlambilimsel olarak tek bir boşluk karakteri imiş gibi yorumlanır.

3.2.4. Atom

Yapılı başlık alanı gövdelerindeki çeşitli dizgecik tanımları, basitçe, belli temel karakterlerden oluşan dizgelerdir. Böyle alt dizgeciklere atom adı verilir.

Yapılı başlık alanı gövdelerinin bazıları ayrıca metnin içinde nokta karakterine de (".", ASCII değeri: 46) izin verir. Bu amaçla ek olarak bir "nokta-atom" dizgeciği tanımlanmıştır.

adizge             =    HARF / RAKAM /  ; Denetim karakterleri, BOŞLUK ve
                        "!" / "#" /     ; imler dışındaki tüm karakterler
                        "$" / "%" /     ; atomlar için kullanılır
                        "&" / "'" /
                        "*" / "+" /
                        "-" / "/" /
                        "=" / "?" /
                        "^" / "_" /
                        "`" / "{" /
                        "|" / "}" /
                        "~"

atom               =    [AKBOŞ] 1*adizge [AKBOŞ]

nokta-atom         =    [AKBOŞ] nokta-atom-dizgesi [AKBOŞ]

nokta-atom-dizgesi =    1*adizge *("." 1*adizge)

atom ve nokta-atom dizgeciklerinin ikisi de kendini oluşturan karakter dizisinden oluşan tek bir birim olarak yorumlanır. Anlambilimsel olarak isteğe bağlı açıklamalar ve kalan karakterleri kuşatan KBOŞ dizgecikleri atomun parçaları değildirler; atom sadece bir atom içindeki adizge karakterlerinden veya bir nokta-atom içindeki adizge ve nokta (".") karakterlerinden oluşur.

3.2.5. Tırnaklı dizgeler

Atomlarda izin verilenler dışında karakterler içeren karakter dizileri, tırnak karakterleri (ÇTIRNAK, ASCII değeri: 34) ile kuşatılmış karakterler halinde tırnaklı dizge biçiminde ifade edilebilirler.

tdizge          =       SSSBsiz-DNT /   ; Boşluklar olmaksızın
                                        ; denetim karakteri

                        %d33 /          ; "\" veya tırmak imi hariç
                        %d35-91 /       ; kalan tüm karakterler
                        %d93-126

tmetin          =       tdizge / öteli-çift

tırnaklı-dizge  =       [AKBOŞ]
                        ÇTIRNAK *([KBOŞ] tmetin) [KBOŞ] ÇTIRNAK
                        [AKBOŞ]

Bir tırnaklı-dizge tek bir birim olarak ele alınır. Yani, tırnaklı-dizge anlambilimsel olarak atom ile aynıdır. Bir tırnaklı-dizgenin KBOŞ içermesine izin verildiğinden katlamaya da izin verilmiş olur. Ayrıca, bir tırnaklı-dizge içinde öteli-çifte de izin verildiğinden, bir öteli-çifti oluşturması nedeniyle bir tırnaklı-dizge içinde tırnak ve tersbölü karakterlerinin de bulunabileceğine dikkat ediniz.

Anlambilimsel olarak ne tırnak karakterlerinin dışındaki isteğe bağlı AKBOŞ karakterleri ne de tırnak karakterlerinin kendileri tırnaklı-dizgenin parçasıdır; tırnaklı-dizge iki tırnak karakteri arasında kalanlardır. Evvelce bahsedildiği gibi, bir tırnaklı-dizge içinde bulunan bir öteli-çift içindeki "\" ve bir KBOŞ/AKBOŞ içindeki CRLF anlambilimsel olarak "görünmez"dir ve bu nedenle de tırnaklı-dizgenin parçası değildirler.

3.2.6. Muhtelif dizgecikler

Ek olarak üç dizgecik daha tanımlanmıştır: atomlar ve tırnaklı-dizgelerden oluşan dizgeler için sözcük ve deyim ile yapısız başlık alanlarında ve yapılı başlık alanları içinde bazı yerlerde kullanmak için yapısız.

sözcük          =       atom / tırnaklı-dizge

deyim           =       1*sözcük / atıl-deyim

ydizge          =       SSSBsiz-DNT /   ; Boşluksuz denetimler
                        %d33-126 /      ; US-ASCII'nin kalanı
                        atıl-ydizge

yapısız         =       *([KBOŞ] ydizge) [KBOŞ]



[78] Ç.N. - Yani, bir AKBOŞ, KBOŞ içermese bile bir açıklama içermek zorundadır.