PROJE TESLİM = 17 ARALIK

Projede aşağıda türetim kuralları verilmiş olan gramer için bir LR ayrıştırıcısı geliştirilecektir. Çalışma iki bölüm halinde gerçekleştirilecek ve farklı tarihlerde teslim edilecektir.
1. BÖLÜM
Yukarıda verilen gramer kurallarını bellekte aşağıda anlatılan veri yapısı ile temsil edilecek ve bu yapıdan yararlanarak kodlama yapılacaktır. Verilen gramerde büyük harflerle başlayan simgeler nonterminal, diğer simgeler terminal simgelerdir. Oluşturacağınız veri gösteriliminde nonterminalleri içeren bir liste yapısı bulunacaktır. Türetim kurallarına erişim nonterminaller üzerinden olacaktır. Her nonterminal kendisini tanımlayan türetim sayısı kadar düğüme sahip olan bir seçenekler listesine işaret edecek ve seçenekler listesinin düğümleri de seçeneğe ait türetim kuralını temsil eden farklı bir listeye işaret edecektir. Gösterilime ait bir bölüm aşağıda verilmiştir.


2. Kılıf ve Geçiş fonksiyonlarını ve gramere ait DFA’yı oluşturacak kodu yazın. 3. DFA’yı kullanarak LR(0) ayrıştırma tablosunu oluşturacak kodu yazın. Tabloyu incelendiğinde gramerin bir LR(0) grameri olmadığını görülecektir, nedenini raporunuzda belirtin.





2. BÖLÜM –

4. İlk bölümde gramerin LR(0) grameri olmadığını belirlemiş olmalısınız. İlk bölümdeki çalışmalarınızdan yararlanarak, gramer için bir LR(1) ayrıştırma tablosu oluşturun ve sorunun nasıl giderildiğini raporunuzda açıklayın.
5. Ötele-İndirge ayrıştırma algoritmasını gerçekleyen ayrıştırıcıya ait kodu yazın.
6. Gramere uygun örnek tarayıcı çıktıları üzerinde ayrıştırma işlemini yürütün. Ayrıştırma işleminin başarılı ve başarısız olduğu en az iki farklı örnek için ayrıştırıcıyı deneyin. Ayrıştırıcı, her ayrıştırma adımı için açıklayıcı bilgileri içeren bir satırı çıkışa aktarmalıdır.

ÖNEMLİ NOT:
a)1. bölüme ait çalışma teslim edilmeden ikincisi teslim edilemez.
b)1. bölümü zamanında teslim etmemiş olan öğrenciler
2. bölüme ait çalışmanın teslim tarihinde her ikisini birlikte teslim edebilirler ancak 1. bölüm için puan alamazlar.
ÖDEVİN TESLİM ŞEKLİ:
❖ Ödev C++ dilinde nesneye yönelik programlama kavramları kullanılarak kodlanacaktır. Her bölüm için kod ile birlikte teslim edilecek olan raporda, yukarıda açıklanması istenen konular açıklanacak ve gerçekleştirilen çalışma ayrıntılı bir şekilde anlatılacaktır: kullanılan veri yapıları ile tüm sınıf tanımları verilecektir. Ayrıca, ayrıştırma işleminin uygulandığı örnek tarayıcı çıktıları ile bu örnekler için ayrıştırıcının ürettiği adımlar ve sonuçlar eklenecektir.

❖ Ödevinizi Ninova sistemi üzerinden kaynak kodlarını içeren bir arşiv dosyası ve pdf formatında rapor dosyası olarak teslim etmeniz gerekmektedir. Geç teslimler kabul edilmemektedir.
❖ Tüm kodunuz C++ programlama dili ile yazılmalı ve g++ kullanarak ITU’nun Linux Sunucusu'nda (SSH üzerinden erişebilirsiniz) derlenebilmeli ve çalıştırılabilmelidir. Kodunuzun hatasız derlenmesi beklenmektedir; aksi takdirde, ödevin notu sıfır olarak değerlendirilebilir.

❖ Yazdığınızın programı derlemek ve çalıştırmak için gerekli talimatları, yorum satırları olarak kodunuzun başlangıcına ve rapora eklemeniz gerekmektedir.

❖ Bu ödev üzerinde bireysel olarak çalışmanız beklenmektedir. Ödev çözümlerinde yapılacak işbirliği yapmamanız beklenmekte ve tespit edildiği takdirde kopya olarak değerlendirilecektir. Bir başkasının çalışmasını kendi çalışmanız olarak göndermek (bir parçası olsa ve üzerinde değişiklik yapılmış olsa da) ya da farklı kaynaklardan (internet de dahil olmak üzere) atıf yapılsa bile kopyala / yapıştır yaparak kod ya da metin içeriklerini ödevinizde kullanmanız gibi eylemler de bu kapsama girmektedir. Tespit edildiği takdirde ilgili durum disiplin soruşturması için idareye bildirilecektir. Kopya eylemine katılan tüm taraflar eşit şekilde muamele göreceklerdir.