Chomsky Normal Şekili (Chomsky Normal Form)
Yazan : Şadi Evren ŞEKER
Bilgisayar bilimlerinde özellikle otomatlar (automata) ve dil tasarımında (compiler design) oldukça sık kullanılan konulardan birisi de içerikten bağımsız dilbilgisidir. (Context Free Grammer)
İçerikten bağımsız dil (Context Free Language) konusunda yapılan çalışamlar gelişen ihtiyaçlar ilave bazı kurallar konulmasını gerektirmiştir. Bu konuda çalışan Naom Chomsky tarafından konulan kurallara CNF veya Chomsky normal şekli ismi verilir ve aşağıda açıklanmıştır.
CNF’in tanımı ve kuralları
Şayet bir CFG aşağıdaki kurallara uyuyorsa bu dilbilgisine CNF’e uygun denilebilir. Örneğin bir dilde
- A
BC veya - A
α veya - S
λ
şeklinde kurallara uyuyorsa. (Burada ABC birer devamlı (nonterminal) α bir sonlu (terminal) ve λ ise boş dizgi (empty string) gösteren sembollerdir). Burada B ve C sembolleri başlangıç sembolü olamaz. Yani
B
α
gibi bir kural dilbilgisinde bulunamaz. Benzer şekilde
A
BCC
şeklinde bir gösterim de CNF kurallarına aykırıdır (en fazla 2 devamlı (nonterminal) bulunabilir).
Yukarıdaki tanımdan anlaşılacağı üzere CNF kulllarına uygun olan her dil zaten CFG’dir. Ayrıca yine yukarıdaki tanıma dayanarak bir dildeki bir cümlenin parçalanması (parse) işlemi sırasındaki her adım, kendinden bir önceki adıma göre en fazla bir harf uzun olabilir. Bunun sebebi yukarıdaki şekilde yazılan bir dilde en fazla 2 devamlı (nonterminal) bulunacağı ve dolayısıyla en fazla 1 harf ilave edileceğidir.
Diğer bir ifadeyle CNF’e uygun bir dil parçalaranar bir parçalama ağacı (parse tree) oluşturulduğunda ortaya bir ikili ağaç (binary tree) çıkar ve bu ağacın en derin olma durumunda parçalanan kelimenin boyutundan 1 eksik (ilk devamlı açılımının (nonterminal) 2 elemanlı olduğu düşünülürse) ve en sığ olma durumunda da yine kelime boyutundan 1 eksik olacaktır. Daha kesin bir ifadeyle CNF’e uygun bir dil ile parçalanan bir kelime ve oluşan parçalama ağacında (parse tree) belirsizlik (ambiguity) bulunamaz ve her zaman tek bir ağaç çıkar.
Bir CFG’nin CNF’e çevrimi
Yukarıdaki açıklamalar ışığında her CFG’nin CNF yapısında olmadığını öğrendik. Ayrıca her CFG’nin CNF yapısına çevrilebileceği de bir gerçektir. Bu durumda herhangi bir CFG’nin CNF’e çevrimi için aşağıdaki 5 farklı durum ve bu 5 farklı durumun çözümü verilmiştir.
1. Durumda başlangıcın sağ tarafta bulunmasına karşılık ilave bir başlangıç devamlısı (nonterminal) eklenir.
Örneğin dilimiz aşağıdaki şekilde olsun:
S
ASA | aB
A
B | S
B
b | λ
Yukarıdaki dilbilgisi tanımında görüleceği üzere iki noktada S yani başlangıç devamlısı (nonterminal) sağ tarafta bulunmaktadır. Çözüm olarak ilave bir devamlı eklenerek aşağıdaki hale getirilebilir:
S0
S
S
ASA | aB
A
B | S
B
b | λ
Yukarıdaki bu yeni haliyle başlangıç geçişlisi artık S0 olmuştur ve artık sağ tarafta istenmeyen bu terim bulunmamaktadır.
2. durumda lambda (λ) terimlerinin temizlenmesi gerekir. Bu problemin çözümü için devamlılardan (nonterminal) başlanarak alternatif sonuçlar sıralanır. Örneğin bir önceki adımda oluşturduğumuz grameri ele alacak olursak:
S0
S
S
ASA | aB
A
B | S
B
b | λ
Yukarıdaki gramerde B -> λ terimi bulunmaktadır. Bunu kaldırmak için B devamlısının (nonterminal) kullanıldığı yerlerde değişiklik yapmak gerekir.
S0
S
S
ASA | aB | AS | SA | S | a
A
B | S
B
b
Yukarıdaki S-> AS | SA | S | a terimleri yeni eklenmiştir. Bu terimler B->λ terimi ile üretilebilecek bütün alternatifleri kapsar.
3. Durumda tek terimlerin kaldırılması için tek terimlilerde ulaşılabilen terimler tekrarlanır. Örneğin yukarıdaki gramerin son halinden devam edecek olursak:
S0
S
S
ASA | aB | AS | SA | S | a
A
B | S
B
b
Gramerinde tek terili olarak S0
S , A
B ve A
S durumları bulunmaktadır. Bu durumların kaldırılması için terim değerleri tekrarlanır :
S0
ASA | aB | AS | SA | a
S
ASA | aB | AS | SA | a
A
b | ASA | aB | AS | SA | a
B
b
Yukarıdaki son halinde S ve B değeri (okun sağ tarafında olan değerler) olduğu gibi kopyalanmıştır.
4. durumda şayet bir devamlının (nonterminal) tanımında karışık bir durum varsa (yani bir sonluyu (terminal) ifade eden terim karışıksa) basitletştirmek için ilave bir devamlı (nonterminal) eklenir. Yine yukarıdaki dilden devam edecek olursak:
S0
ASA | aB | AS | SA | a
S
ASA | aB | AS | SA | a
A
b | ASA | aB | AS | SA | a
B
b
Gramerinde “a” sonlusunun (terminal) değerinin B devamlısı (nonterminal) ile yanyana durduğu aB terimini görüyoruz. Bu karışık bir durumdur ve çözümü için yeni bir devamlı (nonterminal) ilave edilir.
S0
ASA | UB | AS | SA | a
S
ASA | UB | AS | SA | a
A
b | ASA | UB | AS | SA | a
B
b
U
a
Yukarıdaki şekilde karışık olan bütün aB terimleri düzeltilmiştir.
5. durumda ise uzun terimlerin kısaltılması söz konusudur. Yani okun sağ tarafında en fazla iki devamlı (nonterminal) bir terimde bulunabilir. Örneğin ASA gibi üç devamlı (nonterminal) bulunduğu durumlar CNF için uygun değildir.
S0
ASA | UB | AS | SA | a
S
ASA | UB | AS | SA | a
A
b | ASA | UB | AS | SA | a
B
b
U
a
dilini ele alırsak
S0
AA1 | UB | AS | SA | a
S
AA1 | UB | AS | SA | a
A
b | AA1 | UB | AS | SA | a
B
b
U
a
A1
SA
Tek problemli olan ASA terimi yerine ilave bir devamlı (nonterminal) eklenerek yukarıdaki şekilde düzeltilebilir.
« Kirchoff Teoremi (Kirchoff Theorem) | Sıfır Bilgi İspatı (Zero-Knowledge proof) »
Yorumlar
Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Chomsky Normal Şekili (Chomsky Normal Form)' isimli yazı 22 Jun 2009 tarihinde, saat: 11:29 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 378 defa okunmuştur.
Benzer yazıları Automata (otomatlar, özdevinirler), Programlama Dilleri kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.
Yazarın Kitabı
Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Sıralama işleminiz poligonu...
- Şadi Evren ŞEKER: bahsettiğiniz sıralama algoritması...
- Abdurrahman ulusoy: merhaba hocam. gelişigüzel...
- Oguz Okutan: Merhaba hocam.. Fonksiyonlarda degere göre...
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
Yakın Yazılar
Chomsky Hiyerarşisi ( Chomsky Hierarchy )
İkinci Normal Şekil (Second Normal Form) 2NF
Özyineli Sayılabilir Diller (Recursively Enumerable Languages)
Özyineli Diller (Recursive Languages)
Chomsky Normal Şekili (Chomsky Normal Form)
Üçüncü normal şekil (Third Normal Form, 3NF)
Uzatılmış Öklit Algoritması (Extended Euclid Algorithm)
extended euclidean ( uzatılmış öklit veya öklid ) bağlantısı ve algoritması
Ortak Bölenlerin En Büyüğü (OBEB, GCD, Greatest Common Divisor)
EBNF (Uzatılmış BNF, Extended Backus Normal Form)
ilk normal şekil (First Normal Form) 1NF
Bağlantılar
otomata gibi türkiyede fazla değer verilmeyen ama aslında derleyici programlama ve bilgisayar dünyasına yeni bir dil kazandırma konusunda çok önmeli olan bu dersimiz için de kaynaksız bırakmıyorsunuz bizi.teşekkürler….yanlış değilsem ege,bilkent,itü,boğaziçi ,gazi ve odtü tek işliyor bu dersi..
Işık üniversitesinde de var …. Theory of Computation…
Hemen hemen bütün bilgisayar mühendisliği bölümlerinde otomata dersi var.