Ayrıştırma Ağaçları Tanımlar Soldan ve Sağdan Türemeler ile İlişkisi Gramerlerde Belirsizlik
Ayrıştırma Ağaçları Ayrıştırma Ağaçları bir OBG’in sembolleri ile etiketlenmiş ağaçlardır. Yapraklar: Terminal veya ε ile etiketlenmiş. İç düğümler: Değişken ile etiketlenmiş. Çocuklar, üst düğümün kuralının sağ tarafı ile etiketlenmiş. Kök: başlangıç sembolü ile etiketlenmeli.
Örnek: Ayrıştırma Ağacı S -> SS | (S) | () S ) (
Ayrıştırma Ağacının Ürünü Yaprak etiketlerinin soldan sağa doğru bitiştirilmesine ayrıştırma ağacının ürünü denir. Örnek: aşağıdaki ağacın ürünü (())() ’dür. S ) (
Ayrıştırma Ağaçları, Soldan ve Sağdan Türemeler Her ayrıştırma ağacı için, tek bir soldan türeme, ve tek bir sağdan türeme vardır. İspatlayacağımız: Kökü A ile etiketlenmiş, ürünü w olan bir ayrıştırma ağacı varsa, o zaman A =>*lm w. Eğer A =>*lm w, o zaman kökü A, ürünü w olan bir ayrıştırma ağacı vardır.
İspat – Kısım 1 Ağacın yüksekliği (kökten başlayan en uzun yol) üzerine tümevarım. Temel: yükseklik 1. Ağaç şöyledir: A -> a1…an bir kural olmalı. Böylece, A =>*lm a1…an. A a1 an . . .
Kısım 1 – Tümevarım (1)’i yüksekliği < h olan ağaçlar için varsayalım, ve ağacımızın yüksekliği h olsun. Tümevarım hipotezi: Xi =>*lm wi. Not: Xi terminal ise, o zaman Xi = wi. Böylece, A =>lm X1…Xn =>*lm w1X2…Xn =>*lm w1w2X3…Xn =>*lm … =>*lm w1…wn. A X1 Xn . . . w1 wn
İspat: Kısım 2 Soldan türeme verildiği zaman, bir ayrıştırma ağacının varlığını ispatlamamız gerekir. İspat, türemenin uzunluğu üzerinedir.
Kısım 2 – Temel A =>*lm a1…an bir adımlık türeme ile gerçekleşirse, o zaman aşağıdaki gibi bir ayrıştırma ağacı vardır. A a1 an . . .
Kısım 2 – Tümevarım (2)’yi k (> 1)’den daha az sayıda basamağı olan türemeler için varsayalım, ve A =>*lm w k-basamaklı bir türeme olsun. İlk basamak: A =>lm X1…Xn. Kilit nokta: w’yu ilk parçası X1, ikinci parçası X2 vs.’den türeyecek şekilde bölebiliriz. Xi terminal ise, o zaman wi = Xi.
Tümevarım – (3) Yani, değişken olan tüm Xi ‘ler için, Xi =>*lm wi Ve türeme k’den daha az sayıda basamağa sahiptir. Tümevarım hipotezine göre, Xi bir değişken ise, o zaman kökü Xi , ürünü wi olan bir ayrıştırma ağacı vardır. Dolayısı ile, w için bir ayrıştırma ağacı vardır. A X1 Xn . . . w1 wn
Ayrıştırma Ağaçları ve Sağdan Türemeler Fikirler esasen soldan türeme ispatının aynadan yansıması. Hayal edin!
Ayrıştırma Ağaçları ve Herhangi bir Türeme Soldan türemeden ayrıştırma ağacı elde edilebileceğinin ispatı “soldan” olmasına bağlı değil. İlk adım hala daha be A => X1…Xn olmalı. w hala daha ilk kısmın X1’den, ikinci kısmın X2’den vs. türetilebileceği şeklinde till can be divided so the first portion bölünebilir.
Belirsiz Gramerler Bir gramer eğer dilin içindeki herhangi bir dizinin en az iki tane ayrıştırma ağacı varsa belirsizdir. Example: S -> SS | (S) | () ()()() için iki tane ayrıştırma ağacı bir sonraki slaytda.
Örnek – Devam S S S S ( ) ( ) S S S S ( ) ( ) ( ) ( )
Belirsizlik, Soldan ve Sağdan Türemeler İki tane farklı ayrıştırma ağacı varsa, ispatta verilen yönteme göre iki farklı soldan türemeye sebebiyet vermeleri lazım. Diğer taraftan, iki farklı soldan türeme, ispatın diğer kısmına göre, farklı ayrıştırma ağacı üretmesi lazım. Sağdan türemeler ayni şekilde.
Belirsizlik, vs. – (2) Dolayısı ile, “belirsiz gramer’’in eşdeğer tanımları şöyle: Dilin içinde iki tane farklı soldan türemesi olan bir dizi var. Dilin içinde iki tane farklı sağdan türemesi olan bir dizi var.
Belirsizlik Gramerlerin Özelliğidir, Dillerin Değil Dengeli parantezler grameri için belirsiz olmayan bir gramer. B -> (RB | ε R -> ) | (RR B, başlangıç sembolü, dengeli dizileri türetir. R bir tane fazladan sağ parantezi olan dizileri türetir.
Örnek: Belirsiz Olmayan Gramer B -> (RB | ε R -> ) | (RR Verilen dengeli parantezli dizi için soldan türemeyi diziyi soldan sağa doğru inceleyerek yapınız: B’yi genişletmek gerekiyorsa, ve sonraki sembol “(” ise, B -> (RB kullanınız; eğer sona gelmişsek ε kullanınız. R’yi genişletmek gerekiyorsa, ve sonraki sembol “)” ise, R -> ) kullanınız; “(” ise (RR kullanınız.
Ayrıştırma Süreci Geriye kalan girdi: (())() Soldan türemenin adımları: B Bir sonraki sembol B -> (RB | ε R -> ) | (RR
Ayrıştırma Süreci Geriye kalan girdi: ())() Soldan türemenin adımları: B (RB Bir sonraki sembol B -> (RB | ε R -> ) | (RR
Ayrıştırma Süreci Geriye kalan girdi : ))() Soldan türemenin adımları: B (RB ((RRB Bir sonraki sembol B -> (RB | ε R -> ) | (RR
Ayrıştırma Süreci Geriye kalan girdi: )() Soldan türemenin adımları: B ((RRB (()RB Bir sonraki sembol B -> (RB | ε R -> ) | (RR
Ayrıştırma Süreci Geriye kalan girdi: () Soldan türemenin adımları: B ((RRB (()RB (())B Bir sonraki sembol B -> (RB | ε R -> ) | (RR
Ayrıştırma Süreci Geriye kalan girdi: ) Soldan türemenin adımları: B (())(RB (RB ((RRB (()RB (())B Bir sonraki sembol B -> (RB | ε R -> ) | (RR
Ayrıştırma Süreci Geriye kalan girdi: Soldan türemenin adımları: B (())(RB (RB (())()B ((RRB (()RB (())B Bir sonraki sembol B -> (RB | ε R -> ) | (RR
Ayrıştırma Süreci Geriye kalan girdi: Soldan türemenin adımları: B (())(RB (RB (())()B ((RRB (())() (()RB (())B Next symbol B -> (RB | ε R -> ) | (RR
LL(1) gramerler Verilen örnekteki gibi, girdiyi soldan sağa doğru tarayıp, sadece bir sembole bakıp, soldan türemede hangi sağ taradı seçeceğimizi bilebiliyorsak, bu gramere LL(1) gramer diyoruz. “Soldan (Leftmost) türeme, soldan-sağa (Left-to-right) tarama, girdinin sadece bir sombolünü görme.”
LL(1) Grammars – (2) Birçok programlama dilinin grameri LL(1)’dir. LL(1) gramerler hiç bir zaman belirsiz değildir.
Doğal Belirsizlik Her belirsiz grameri, dengeli parantezler gramerinde yaptığımız gibi, belirsiz olmayacak şekilde düzeltebilsek iyi olurdu. Maalesef, bazı OBD’lerdoğal olarak belirsizdir, yanı bu dilleri tanımlayan tüm gramerler belirsizdir.
Örnek: Doğal Belirsizlik {0i1j2k | i = j veya j = k} doğal olarak belirsizdir. İçgüdüsel olarak, 0n1n2n şeklideki diziler biri 0’ları ve 1’leri denetleyen, diğeri 1’leri ve 2’leri denetleyen en azından iki türlü ayrıştırma ağacı tarafından üretilebilmelidir.
Verilen Dil İçin Bir Belirsiz Gramer S -> AB | CD A -> 0A1 | 01 B -> 2B | 2 C -> 0C | 0 D -> 1D2 | 12 A eşit sayıda 0 ve 1 üretir B istendiği kadar 2 üretir C istendiği kadar 0 üretir D eşit sayıda 1 ve 2 üretir Ve eşit sayıda 0,1 ve 2’den oluşan tüm dizilerin iki tane türemesi vardır. Örnek: S => AB => 01B =>012 S => CD => 0D => 012