Formel Diller ve Soyut Makineler BAĞLAMDAN BAĞIMSIZ gramerler CONTEXT – FREE GRAMMARS
Chomsky Hiyerarşisi Karmaşıklık Özyinelemeli - Sayılabilir Diller : Turing Makinesi (Recursively – Enumerable Languages : Turing Machine) Bağlama - Duyarlı Diller : Doğrusal – Sınırlandırılmış Otomatlar (Context – Sensitive Languages : Linear – Bounded Automata) 1 2 3 Bağlam - Bağımsız Diller : Bas – Bırak Otomatları (Context – Free Languages : Push – Down Automata) Düzenli Diller : Sonlu - Durum Otomatları (Regular Language : Finite – State Automata) *(Dil : Otomat)
Bağlamdan Bağımsız Diller Tip – 2 düzeyinde yer alan ve düzenli gramerler / ifadeler / diller’den daha yüksek ifade gücüne sahip bir dil sınıfıdır. İfade gücü daha yüksek olsa da tüm olası dilleri tanıma imkanına sahip değildir. Ardında yatan temel düşünce «değişkenlerin» dizgelere (string) karşılık gelecek şekilde kullanımıdır. Bu değişkenler özyinelemeli (recursive) bir şekilde birbirleri üzerinden tanımlanırlar. Bu düzeydeki dillerin tanımı için özyinelemeli bir notasyona sahip olan Bağlamdan Bağımsız Gramerler (CFG) kullanılır. Kullanım alanları: Ayrıştırma (parse) ağaçları Derleyiciler XML
Tip – 3’den Tip – 2’ye Geçiş a(a|b)*b Bu düzenli ifade ile; önce bir a, ardından 0 veya daha fazla sayıda a ya da b, son olarak da bir b sembollerinden oluşan dizgeler tanımlanır. Yani bu düzenli ifade ön, orta ve son kısım olmak üzere 3 parçaya ayrılabilir. Ön kısım: a Orta kısım: (a|b)* Son kısım: b
Tip – 3’den Tip – 2’ye Geçiş S bir dilde bir dizge, M de orta kısım olmak üzere; S → aMb şeklinde bir kural yazılabilir. Buradaki M a veya b sembollerinden oluşabilir. M → A ve M → B iki yeni kural olup, A ve B dile ait dizgelerdir. A → ε, A → aA ve B → ε, B → bB aaab dizgesi aşağıdaki gibi oluşturulur: S → aMb S → aAb (M → A) S → aaAb (A → aA) S → aaab
Bağlamdan Bağımsızlık Kurallarla değiştirme işlemi, sadece değişecek sembol üzerinde yapılır ve önündeki ya da ardındaki kısımlara bakılmaz. Bu nedenle bağlamdan bağımsız (context - free) olarak adlandırılır. S, A, B ve M terminal olmayan a, b ve ε ise terminal semboller olarak adlandırılır. Tüm dizgeler sadece terminal sembollerden oluşabilir.
Bağlamdan Bağımsız Gramerler Bir bağlamdan bağımsız gramer G = (N, T, R, S) şeklinde tanımlanır. N, terminal olmayan semboller kümesi T, terminal semboller kümesi R, üretim kuralları S, başlangıç sembolü Kurallar uygulanarak dile ait tüm dizgeler elde edilebilir. Oluşturulan L(G) dili bağlam bağımsız dil olarak adlandırılır.
Örnek Programlama dilleri için doğru yazılmış aritmetik ifadeler gösteren dil.
Örnek Dengeli parantezler için CFG ve örnek üretim.
Örnek S → aS S → Bb B → cB B → ε S aS aaS aaBb aacBb aaccBb aaccb S aS
Örnek L = {0n1n : n > 0} S → 0S1 S → 01
Örnek İçinde alt dizge olarak «aba» barındıran tüm dizgeler. S → AabaA A →aA A →bA A → ε
Örnek L = {wwR : w ∈ (a + b)∗} S → aSa S → bSb S → ε