Genişletilmiş Backus–Naur formu (EBNF)



Bilgisayar biliminde, Genişletilmiş Backus–Naur formu (EBNF) bağlamdan bağımsız dilbilgisini (context-free grammar) ifade etmek için kullanılan bir notasyondur. Başka bir ifadeyle, bilgisayar programlama dillerini ve biçimsel dilleri (formal languages) tanımlamanın bir yoludur. Backus–Naur formu (BNF) notasyonunu temel alır.

Niklaus Wirth tarafından geliştirilmiştir. En yaygın kullanılan türevleri standartlaştırılmıştır.

Temel Bilgiler

Kod, örneğin bir bilgisayar programının kaynak kodu, terminal sembol olarak adlandırılan sembollerden oluşur. Bu semboller, karakterler, sayılar, noktalama işaretleri, boşluk işaretleri vb. olabilir.
EBNF, bu terminal sembol dizilerinin ilgili terminal olmayan (nonterminal) sembollere atanmasıyla oluşan üretim kuralını (production rule) tanımlar.

Örnek:
sifir haric sayi ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
sayi ::= "0" | sifir haric sayi ;
Bu üretim kuralı sol tarafta sayi adında terminal olmayan bir atama yapar. Dik çubuklar | alternatifleri gösterir (başka bir ifadeyle veya şeklinde de tanımlanabilir), kuralı oluşturan terminal semboller çift tırnak arasında verilmiş ve noktalı virgül ifadeyi sonlandırmıştır. sayi, 0 veya sifir haric sayi olarak ifadelendirildiğinden, bu kurala göre 0 ila 9 arasında değer alabilir.
Bir üretim kuralı virgül kullanarak terminal veya terminal olmayan semboller dizisi şeklinde de yazılabilir:

oniki                ::= "1" , "2" ;
ikiyuzbir ::= "2" , "0" , "1" ;
ucyuzoniki ::= "3" , oniki ;
onikibinikiyuzbir ::= oniki , ikiyuzbir ;
Atlanabilir veya tekrarlanabilir ifadeler süslü parantez ile verilebilir { ... }:
dogal sayi ::= sifir haric sayi , { sayi } ;
Bu durumda, 1, 2, ...,10,...,12345,... sözceleri doğru ifadelerdir. Süslü parantez içinde verilene uygun ifade hiç kullanılmasa da, defalarca kullanılsa da doğrudur.
Köşeli parantez opsiyonlu kullanımı ifade eder [ ... ]:
tam sayi ::= "0" | [ "-" ] , dogal sayi ;
Bu kurala göre tam sayı sıfır veya işareti - olan veya olmayan bir doğal sayı olabilir.
EBNF ile yapılabilecek diğer şeyler arasında sembol tekrarına sınır koyabilme, üretim kuralında belli yerlere erişim engelleme veya açıklama kısımları ekleme gibi özellikleri sayabiliriz.

ISO standardına göre genişlemeler

ISO 14977 standardına göre EBNF genişletilebilirdir ve iki durumdan bahsedilir. Birincisi soru işareti arasında isteğe bağlı karakter katarı tanımlayabilmedir. Örneğin, boşluk karakteri aşağıdaki kuralla tanımlanabilir:
bosluk ::= ? US-ASCII character 32 ?;
İkinci durum şöyledir. Normalde etiket ifadeler parantez ile yazılamaz. Yani aşağıdaki şekil EBNF de geçersizdir:
something ::= foo ( bar );
Ancak EBNF nin bir uzantısı bu notasyonu kullanabilir. Örneğin, Lisp dilbilgisinde, bir fonksiyon aşağıdaki kuralla tanımlanabilir.
function application ::= list( symbol , [ { expression } ] );

BNF yi genişletmek

The BNF had the problem that options and repetitions could not be directly expressed. Instead, they needed the use of an intermediate rule or alternative production defined to be either nothing or the optional production for option, or either the repeated production or itself, recursively, for repetition. The same constructs can still be used in EBNF.
Option:
signed number ::= [ sign , ] number ;
can be defined in BNF-style as:
signed number ::= sign , number | number ;
or
signed number ::= optional sign , number ;
optional sign ::= ε | sign ; (* epsilon is used to denote more clearly an empty production *)
Repetition:
number ::= { digit } ;
can be defined in BNF-style as:
number ::= digit | number digit;