Yazan : Şadi Evren ŞEKER

Bilgisayar bilimlerinde dil tasarımı konusunda kullanılan backus normal şeklinin (backus normal form) özel bir halidir. Basitçe standart BNF’te yazılan kuralların birleştirilerek daha sade yazılmasını hedefler.

Bu durumu aşağıdaki örnek üzerinden görebiliriz:

Örneğin BNF olarak yazılan dilimize göre:

<EGER> ::= if( <KOSUL>) | if( <KOSUL>) else

şeklinde bir satırımız bulunsun. Bu satırın anlamı dilimizde bir EGER döz dizilimi (syntax), if komutu ve parantez içinde bir koşuldan oluşabilir veya bu if ve parantez içerisindeki koşulu bir else komutu izleyebilir.

Yukarıdaki bu BNF yazılımını EBNF olarak aşağıdaki şekilde yazabiliriz:

<EGER> ::= if( <KOSUL>) [else]

Yukarıdaki bu yeni satırda dikkat edileceği üzere köşeli parantezler arasında bir else komutu bulunmaktadır. Bunun anlamı, EGER komutu “if( KOSUL)” olarak tanımlanır ve şayet istenirse bu komuta ilave olarak else komutu eklenebilir. Yani köşeli parantez içerisindeki komut isteğe bağlıdır.

Yukarıdaki bu yeni yazılım aslında sadece gösterimde bir farklılık oluşturmaktadır. Bunun dışında, EBNF’in kullanım alanı ve işlevi BNF ile aynıdır.

EBNF’in BNF’ten farklı olarak getirdiği ifade şekilleri aşağıda listelenmiştir:

İfade Kullanımı
Tanımlama definition =
Üleştirme concatenation ,
Bitirme termination ;
Seçim (Veya) separation |
Çift Tırnak double quotation marks ” … “
Tek Tırnak single quotation marks ‘ … ‘
İsteğe bağlı option [ … ]
Tekrarlı repetition { … }
Gruplama grouping ( … )
Yorum comment (* … *)
Özel dizilim special sequence ? … ?
Hariç exception

Yukarıdakitabloda ilk 6 ifade standart BNF gösteriminde de kullanılan ifadelerdir. Ancak son 6, koyu renkle yazılmış ifade EBNF için gelen yeni eklentilerdir.

Bu kullanımlardan isteğe bağlı (option) olma durumunu gördük. Şimdi diğer durumları inceleyelim:

Tekrarlı ifade ( {} işaretleri arasındaki ifadeler), düzenli ifadelerde (regular expression) kullanılan * işlemine benzetilebilir. Bu işlem basitçe bir bilginin istenildiği kadar tekrar edilmesi anlamına gelir.

Örneğin programlama dillerinin çoğunda kullanılan C tipi yorum’u düşünelim (comment). Bu yorumlarda istenilen kelimeler yazılabilir. Bu durumda yorum satırının tanımı aşağıdaki şekilde olabilir

<YORUM> ::= “/*” , { <harf> } , “*/”

<harf> ::= a | b | … | z

Yukarıdaki EBNF tanımında a’dan z’ye kadar olan harfler, <harf> olarak tanımlanmış, ardından bu tanım <YORUM> içerisinde istenildiği kadar tekrarlanabilir anlamında {} işaretleri arasına yerleştirilmiştir.

EBNF’de ilave olarak dil tasarımcısının istediği yere kendi yorumlarını eklemesi de mümkündür. Buna göre tasarımcı (* *) işaretleri arasına istediği bilgiyi yazabilmektedir. Bu bilgi BNF işlemine tabi tutulmamaktadır.

EBNF’in belki de BNF’e göre en büyük eklentisi, hariç (fark) işlemidir. Yani bir bilgi grubundan başka bir bilgi grubunun çıkarılması durumudur.

Mesela bir dizgi (String) tanımı sırasında çift tırnaklar arasında herhangi bir yazı yazılabilir. Ancak bu yazının içerisinde çift tırnak bulunamaz çünkü bu durumda dizginin bittiğini belirten çift tırnak ile karışıklık oluşur. Bunu ifade için aşağıdaki EBNF gösterimini inceleyelim:

<DIZGI> ::= ‘ ” ‘ , { ?bütün karakterler? – ‘ ” ‘ } ,  ‘ ” ‘

Yukarıdaki yeni kuralda, bütün karakterlerden, çift tırnak karakteri ayrı tutulmuştur. Yine yukarıdaki gösterimde ?bütün karakterler? tanımı, özel bir dizilim görüntüsüdür.

Yorumlar

  1. hazal

    hocam yazınız cok yardımcı oldu fakat ben selectıon sort algortmasını ebnf e nasıl cevırebılırım yardımcı olursanız cok sevınırım yeterlı kaynak bulamadım saygılar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir