Bağlamdan Bağımsız Gramerler için FIRST ve FOLLOW Kümelerini Hesaplayan CFG Hesaplayıcısı
Derleyici Tasarımında FIRST ve FOLLOW Kümelerinin Önemi
Arka Plan Bilgisi
Derleyici Tasarımı ve Sözdizimi Analizi'nde, sembollerin belirli bir Bağlamdan Bağımsız Dilbilgisi'nden (CFG) nasıl türetildiğini anlamak çok önemlidir. FIRST ve FOLLOW kümeleri, LL(1) ayrıştırıcıları oluşturmada ve dilbilgisinin belirsiz olmamasını sağlamada kullanılan temel araçlardır.
- FIRST Kümesi: Bir terminal olmayan sembolden türetilebilen dizelerin başlangıcındaki terminal sembolleri kümesini temsil eder.
- FOLLOW Kümesi: Bir cümle biçiminde, bir terminal olmayan sembolün hemen ardından görünebilecek terminal sembolleri kümesini temsil eder.
Hesaplama Formülü
FIRST ve FOLLOW kümelerini hesaplamak için:
-
FIRST Kümesi:
- Eğer bir sembol ε (epsilon) türetiyorsa, FIRST kümesine ε'u dahil edin.
- Sembol dizileri için, boş değer atanamayan bir sembole rastlanana kadar, ayrı ayrı FIRST kümelerini birleştirerek FIRST kümesini hesaplayın.
-
FOLLOW Kümesi:
- Başlangıç sembolünün FOLLOW kümesini
$(girişin sonu) ile başlatın. - Terminal olmayan bir sembolün göründüğü üretim kurallarına göre FOLLOW bilgisini yayın.
- Başlangıç sembolünün FOLLOW kümesini
Örnek Hesaplama
Aşağıdaki CFG'yi göz önünde bulundurun:
S -> A B C
A -> a | ε
B -> b | ε
C -> c
Adım 1: FIRST Kümelerini Hesaplayın
- FIRST(A) = {a, ε}
- FIRST(B) = {b, ε}
- FIRST(C) = {c}
Adım 2: FOLLOW Kümelerini Hesaplayın
- FOLLOW(S) = {$}
- FOLLOW(A) = {b, c, $} (S -> A B C'den türetilmiştir)
- FOLLOW(B) = {c, $} (S -> A B C'den türetilmiştir)
- FOLLOW(C) = {$} (S -> A B C'den türetilmiştir)
SSS
S1: Bir dilbilgisi LL(1) değilse ne olur? Bir dilbilgisi LL(1) değilse, hangi üretim kuralının uygulanacağını tahmin etmede çakışmalar olduğu anlamına gelir. Bu, dilbilgisini değiştirerek veya SLR veya LALR gibi daha gelişmiş ayrıştırma teknikleri kullanarak çözülebilir.
S2: FIRST ve FOLLOW kümeleri neden önemlidir? FIRST ve FOLLOW kümeleri, ayrıştırma sırasında olası sonraki belirteci belirlemeye yardımcı olur ve ayrıştırıcının girdi dizelerini doğru şekilde tahmin etmesini ve işlemesini sağlar.
Kelime Bilgisi
- LL(1) Dilbilgisi: Bir LL(1) ayrıştırıcısı tarafından ayrıştırılabilen, yani bir seferde bir belirteç ileriyi gören bağlamdan bağımsız bir dilbilgisi.
- Boş Değer Atanabilir Terminal Olmayan: Boş dize ε'u türetebilen bir terminal olmayan.
- Cümle Biçimi: Üretim kuralları uygulanarak başlangıç sembolünden türetilen herhangi bir dize.
CFG'ler Hakkında İlginç Gerçekler
- Belirsizlik: Tüm CFG'ler belirsiz değildir. Bazıları, derleyicilerde pratik kullanım için belirsizliği gidermek üzere dönüşümler gerektirir.
- Chomsky Normal Formu: Her CFG, Chomsky Normal Formuna dönüştürülebilir ve ayrıştırma algoritmalarını basitleştirir.
- Uygulamalar: CFG'ler, programlama dillerinde, doğal dil işlemede ve hatta DNA dizileme analizinde yaygın olarak kullanılır.