Sınırlamalar – Bilgisayar Bilimleri Ödevleri – Bilgisayar Bilimleri Ödev Hazırlatma – Bilgisayar Bilimleri Alanında Tez Yazdırma – Bilgisayar Bilimleri Ödev Yaptırma Fiyatları
Sınırlamalar
LL(k) ayrıştırmasının bazı sınırlamalarını ele alıyoruz. Dilbilgisinin belirsiz olmaması gerektiğini zaten gördük. Sol tarafı aynı olan kuralların ayrık ileriye dönük kümeleri olmalıdır, ancak kuralları aynı dili tanımlayan ve ayrık ileriye dönük kümeleri olan başka bir dilbilgisine dönüştürebiliriz.
k = 1 ise, tüm ayrıştırma kararlarının giriş dizisindeki en soldaki eşleşmemiş sembole ve tahtadaki en soldaki eşleşmemiş düz tabana dayanabileceğini gördük; tahtadaki diğer domino taşlarını dikkate almanın bir faydası yok. Ancak k > 1 için bir fark yaratır.
Diğer tüm domino taşlarını hesaba katmak LL(k) ayrıştırması olarak adlandırılır ve bunlar göz ardı edilirse güçlü LL(k) ayrıştırması olarak adlandırılır. İşte LL(2) olan ancak güçlü LL(2) olmayan bir gramer örneği. Çok basit bir gramer olacak çünkü her dizi için bir LL(2) türevi yapmanın mümkün olduğunu göstermemiz gerekiyor.
Yine de LL(2) olduğunu nasıl gösterebiliriz? A ayrıştırılmak üzereyken domino tahtasındaki tüm konfigürasyonları göstermeli ve iki kural arasında seçim yapılabileceğini göstermeliyiz. Neyse ki, konfigürasyon sayısı az, bu yüzden hepsini çizebiliriz.
Her yapılandırmada, önden bakışın altını çizdik. İlk ve son yapılandırmada sorun yok. İkinci ve üçüncü konfigürasyonlarda önden bakış aynıdır, her iki durumda da ba; ancak ikinci konfigürasyonda a ve üçüncü konfigürasyonda b olan önceki terminal sembolü temelinde bir seçim yapabiliriz.
Çok zarif olmayan bir çıkış yolu var. A’nın iki farklı versiyonunu tanıtarak S – aAaa ve S – bAba arasındaki seçimi kodlayabiliriz.
tamamen aynı üretim kurallarına sahiptir.
Önceki dil bilgisi ile aynı dili tanımlar ve güçlü LL(2)’dir. Bu kodlama tekniği gerçekten tatmin edici bir şekilde çalışmıyor, çünkü yeni terminal olmayanların sayısının herhangi bir sınırın ötesine geçtiği örnekler bulunabilir – aslında, bunlardan sonsuz miktarda ihtiyaç duyulacaktır. Bu bir gramerde yapılamaz, çünkü terminal olmayanlar kümesinin ve üretim kuralları kümesinin sonlu olmasını gerekli kıldık.
Yinelemeli iniş ayrıştırma kullanılırken karşılaşılabilecek türden sorunlara başka bir örnek. Aritmetik ifadelerin tanımlarını gördük ve boolean ifadeler için benzer tanımlar bulunabilir. Bir ifade için aritmetik veya mantıksal ifade olabilen bir tanım verdiğimizi varsayalım.
Ne yazık ki, herhangi bir k için LL(k) değildir. Sorun parantezlerden kaynaklanıyor: Bir ifade k veya daha fazla sol parantez ile başlıyorsa, bunun aritmetik mi yoksa boolean bir ifade mi olacağını tdl yapmanın bir yolu yoktur.
Böylece LL(k) koşulu ihlal edilmiş olur. Pascal raporunda izlenen yol sözdiziminde 2 V 3, true + (x = 1), 0 V true gibi ifadelere yer vermektir. Tip uyumluluğunun kısıtlanması biçimcilikte değil, resmi olmayan İngilizce nesirde ifade edilir. (Bu, daha az net olduğu anlamına gelmez!)
Ayrıştırıcı, önceki bölümde bir aritmetik ifadenin değerini hesapladığımız gibi, bir ifadenin türünü anında “hesaplar” ve gerektiğinde tür uyumluluğunu kontrol eder. (Tür uyumluluğu gibi şeyleri b’Tammar’a dahil etmek, bağlamdan bağımsız olmayan granülerler kullanmayı veya terminal olmayanları ayrıştırma prosedürlerimizin parametrelerine çok benzeyen niteliklerle dekore etmeyi gerektirir; bunu yapmaktan kaçınırız.)
Ayrıştırma prosedürlerimizin parametreleri gibi; bunu yapmaktan kaçınırız.) Pascal’ın bir LL(l) dili olmadığı başka bir örnek de sarkan else sorunudur. (Neden Pascal’ı bu kadar sık seçiyoruz? Sanırım Pascal’ın tanımı o kadar açık ki sorunların nerede olduğunu anlayabilirsiniz.
Örneğin, C’nin tanımı o kadar net değildir; buna ek olarak, C’nin pek çok tuzağı olduğu iyi bilinir – sorunları belirtmek çok kolaydır; herkes yapabilir. Diğer tarafta ise problem sayısının çok daha az olduğu ALGOL 60 var. Muhtemelen, insanlar yıllar geçtikçe daha az kesinlik kazandılar.) Daha önce verilen belirsiz if-ifadesi kurallarını düşünün. ST’ye karşılık gelen prosedür aşağıdaki gibidir.
Belirsizlik, her ikisi de başkalarını içeren iki ileriye dönük setle sonuçlanır. Pascal’da belirsizlik, else’in mümkün olan en yakın if-cümlesine bağlandığını belirterek çözülür. Ayrıştırıcıda bu, else bölümü olan kurala, else bölümü olmayan kurala göre öncelik verilerek yansıtılır.
Hata raporlamayı geciktirme tekniğini uyguladıktan sonra aşağıdaki ayrıştırıcıyı elde ederiz. Bazı derleyici yazarlarının bir sorun olduğunu fark etmeden bunu otomatik olarak yapmaları oldukça olasıdır.
Windows 10 ekran süresi bakma
Bilgisayar ekran süresi bakma
Bilgisayara süre koyma
Microsoft
iTunes
Bilgisayara zaman sınırı koyma Programı
Microsoft Family
Bilgisayar ekran süresi uzatma
Sözlüksel Analiz
Ayrıştırıcının inşasını sembol dizileri bağlamında tartıştık. Ayrıştırıcıyı tartışırken, her sembolün tek bir karakterle temsil edildiğini varsaydık. Çoğu zaman durum böyle değildir. “Ardışık semboller arasına herhangi bir sayıda boşluk eklenebilir” gibi ifadeler bulmak alışılmadık bir durum değildir. Bu nedenle, boşlukları atlamak için getsym prosedürünü yeniden yazıyoruz.
Bu çözüm, her üretim kuralındaki ilgisiz boşlukları dilbilgisine dahil etmeye çalışılan alternatife göre çok daha fazla tercih edilir. Yeni satırlara geçilerek, yorum eklenerek vb. durum daha da kötüleşir.
Son bir zorluk, birçok sembolün tek bir karakterden ziyade bir karakter dizisinden yapılmış olmasıdır. Örneğin, start beş karakterden oluşur ve :: genellikle iki karakterlik <= dizisiyle temsil edilir.
Giriş karakterleri dizisini daha yönetilebilir bir terminal simgeleri dizisine dönüştürmek, genişletilmiş getsym prosedürünün görevidir. Bu prosedüre genellikle sözlük çözümleyici, •lr tarayıcı denir. Ayrıştırıcının Est’indeki sembollerin gösterimini göz ardı etmemizi sağlar.
Düzenli diller bağlamında sözlüksel çözümlemeyi incelemek bir gelenek haline geldi. Bir tarayıcı tarafından tanınan semboller dizisinin sağ-doğrusal bir dilbilgisi ile tanımlanabileceği doğrudur, ancak verimli bir tarayıcı programlamak için bu özel teorinin kullanılmadığı da doğrudur. Bu nedenle, burada geleneksel geleneği kırıyoruz ve geçici yolu kabul ediyoruz.
Sözlüksel analiz söz konusu olduğunda, tüm tanımlayıcılar eşittir. Ancak bunlar, betimleyici gibi görünen, ancak begin gibi diger simgeleri temsil eden begin gibi sözde ayrılmış sözcüklerden ayırt edilmelidir.
Ayrım ilk olarak yapılabilir. karakterleri bir tanımlayıcıyı temsil ediyormuş gibi taramak ve ardından bu karakter dizisini her ayrılmış kelimenin temsiliyle karşılaştırmak. Karşılaştırma sayısını azaltmak için ikili arama ve karma oluşturma gibi çeşitli yöntemler mevcuttur, ancak bunları tartışmayacağız.