Bağlam Duyarlı Dilbilgileri ve Çeşitleri


25

1) Statik yazım ile resmi gramerler arasındaki ilişki nedir?

2) Özellikle, bir doğrusal sınırlanmış otomatın bir C ++ veya SML programının iyi yazılmış olup olmadığını kontrol etmesi mümkün olabilir mi? Yuvalanmış bir yığın otomatı?

3) Statik yazım kurallarını resmi dilbilgisi terimlerinde ifade etmenin doğal bir yolu var mı?

Yanıtlar:


20

Doğrusal sınırlı otomatların C ++ programlarının olup olmadığını kontrol etmesi mümkün değildir ve LBA için SML programlarının iyi yazılmış olup olmadığını kontrol etmek mümkün değildir. C ++ bir Turing-complete tür sistemine sahiptir, çünkü isteğe bağlı programları şablon metaprogramları olarak kodlayabilirsiniz.

SML daha ilginç. Karar verilebilir tip kontrolü var, ancak sorun EXPTIME tamamlandı. Bu nedenle, karmaşıklık hiyerarşisinde çok şaşırtıcı bir çöküş olmadığı sürece, bir LBA'nın bunu kontrol etmesi muhtemel değildir. Bunun nedeni, SML'nin tür çıkarımı gerektirmesi ve türünün büyüklüğü program büyüklüğünden daha hızlı büyüyen program aileleri var. Örnek olarak, aşağıdaki programı göz önünde bulundurun:

fun delta x = (x, x)        (* this has type 'a -> ('a * 'a), so its return value
                               has a type double the size of its argument *)

fun f1 x = delta (delta x)  (* Now we use functions to iterate this process *)
fun f2 x = f1 (f1 x)        
fun f3 x = f2 (f2 x)        (* This function has a HUGE type *)

C veya Pascal gibi daha basit tip sistemler için, LBA'nın kontrol etmesinin mümkün olduğuna inanıyorum.

Programlama dilleri araştırmasının ilk günlerinde, insanlar bazen programlama dilleri için tip sistemlerini belirtmek üzere van Wingaarden gramerlerini (yani iki seviyeli gramerleri) kullandılar. Algol 68'in bu şekilde belirtildiğine inanıyorum. Ancak, bu tekniğin temelde pragmatik nedenlerden dolayı terk edildiği söylendi: insanların belirttiklerini düşündüklerini belirten gramerler yazması oldukça zor oldu! (Tipik olarak, insanların yazdığı gramerler, amaçladıklarından daha büyük diller üretti.

Bu günlerde insanlar, tipik olarak Horn cümlelerinin bir koleksiyonunun en sabit noktası olarak tahminleri belirtmenin bir yolu olan tip sistemlerini belirtmek için şematik çıkarım kurallarını kullanıyorlar. Birinci dereceden Boynuz teorileri için memnuniyet kabiliyeti genel olarak kararsızdır, bu nedenle, her tür teorisyenin yaptığı her şeyi yakalamak istiyorsanız, seçtiğiniz dilbilgisel formalizm ne olursa olsun gerçekten daha güçlü olacaktır.

Tip sistemlerini uygulamak için özellik gramerlerini kullanma konusunda bazı çalışmalar olduğunu biliyorum . Bu seçim için bazı yazılım mühendisliği faydaları olduğunu iddia ediyorlar: yani, dilbilgisi gramerlerinin bilgi akışını çok sıkı bir şekilde kontrol ettiğini ve bunun programın anlaşılmasını kolaylaştırdığını söyledi.


4

Bildiğim kadarıyla tip doğruluğu ilginç durumlar için kararsız olma eğilimindedir, bu nedenle açıkça resmi gramerler, düşünebileceğiniz her tip sistemi yakalayamaz.

Büyük derleyici üreticilerinin true, örneğin, değerlendirme yapmadığı takdirde bir kuralın yürütülmesini engelleyen kurallar için keyfi tahminlere izin verdiğini biliyorum { type(e1) == type(e2) } (expression e1) '+' (expression e2). Bu kavram kolayca resmileştirilebilir; izin verilen tahminlerde uygun kısıtlamalar daha sonra LBA'lar tarafından karar verilebilirlik sağlayabilir.

Bu tür tahminlere karar vermek, en azından çalışma zamanı açısından zordur, bu yüzden insanların , faz fizibilitesini kontrol etmek için , faz bilgi toplayan, yinelemeli bir ayrıştırma yapma eğiliminde olduklarını düşünüyorum . Örneğin, bir seferde bir isim tablosu oluşturabilir ve daha sonra kullanılmış tüm değişkenlerin (görünüşte) ikinci bir çalıştırmada bildirildiğini kontrol edebilirsiniz.kk+1

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.