CNF biçimindeki gramerler için CYK algoritması ile söz dizimi analizi yapan Python/Tkinter tabanlı masaüstü uygulaması.
Bu proje, Biçimsel Diller ve Otomata dersi kapsamında geliştirilmiştir. Kullanıcıdan alınan bir kelimenin, Chomsky Normal Form (CNF) biçimindeki bir gramer tarafından üretilip üretilemediği CYK algoritması kullanılarak analiz edilir.
Bu uygulama, dışarıdan yüklenen bir gramer dosyasını okuyarak girilen kelimenin kabul veya red durumunu belirler. Gramer kuralları kod içine sabit yazılmamıştır; kullanıcı tarafından düzenlenebilen gramer.txt dosyasından okunur.
Program analiz öncesinde gramerin CNF formatına uygun olup olmadığını kontrol eder. Analiz sonucunda kabul/red bilgisi, kısa açıklama ve CYK tablosu arayüz üzerinde gösterilir.
| Teknoloji | Açıklama |
|---|---|
| Python 3 | Ana programlama dili |
| Tkinter | Masaüstü arayüz geliştirme |
| Tkinter Canvas | CYK tablosunu görsel olarak gösterme |
| TXT Dosyaları | Gramer ve örnek kelime girişi |
Harici kütüphane kurulumu gerekmez.
- Gramer kurallarını
.txtdosyasından okuma - CNF uygunluk kontrolü yapma
- CYK algoritması ile kelime analizi
- Kabul / red sonucunu gösterme
- CYK tablosunu arayüzde görselleştirme
- Hatalı gramer formatlarında kullanıcıya uyarı verme
- Kabul ve red örnek dosyaları ile test edebilme
Bilgisayarınızda Python 3 kurulu olmalıdır.
Aşağıdaki dosyaların aynı klasörde olduğundan emin olun:
main.py
gramer.txt
ornek_kabul.txt
ornek_red.txt
Programı çalıştırmak için terminalde şu komutu kullanın:
python main.pyArdından:
- Gramer Dosyası Seç butonuna basın.
gramer.txtdosyasını seçin.- Analiz edilecek kelimeyi girin.
- Analiz Et butonuna basın.
- CYK tablosunu ve kabul/red sonucunu görüntüleyin.
Gramer kuralları aşağıdaki formatta yazılmalıdır:
S -> AB | BC
A -> BA | a
B -> CC | b
C -> AB | a
CNF için kabul edilen kural biçimleri:
A -> BC
A -> a
Kurallar:
- Sol taraf tek büyük harf olmalıdır.
- Sağ taraf ya iki büyük değişken ya da tek terminal karakter olmalıdır.
- Başlangıç sembolü
Solarak kabul edilmiştir.
| Kelime | Sonuç |
|---|---|
baaba |
Kabul |
aaaa |
Red |
- Gramer dosyası okunur ve CNF uygunluğu kontrol edilir.
- Kelimedeki tek karakterleri üreten değişkenler tablonun alt satırına yazılır.
- Daha uzun alt kelimeler için tüm olası bölünme noktaları denenir.
- Sol ve sağ parçaları üreten değişkenler birleştirilerek gramerde karşılığı aranır.
- En üst hücrede başlangıç sembolü
Svarsa kelime kabul edilir, yoksa reddedilir.
cyk-parser-tkinter/
├── main.py
├── gramer.txt
├── ornek_kabul.txt
├── ornek_red.txt
└── README.md
Bu proje, CYK algoritmasının dinamik programlama mantığını ve CNF gramer yapısını uygulamalı olarak göstermek amacıyla geliştirilmiştir. Tkinter arayüzü sayesinde kullanıcı gramer dosyası seçebilir, kelime analizi yapabilir ve oluşan CYK tablosunu görsel olarak inceleyebilir.