Son zamanlarda Chomsky Hiyerarşisine nasıl uyum sağladıkları bağlamında dil ayrıştırıcılarının gelişimini keşfetmek için biraz eğleniyorum.
Bağlama duyarlı bir dilbilgisi için iyi bir gerçek dünya (yani teorik değil) örneği nedir?
Son zamanlarda Chomsky Hiyerarşisine nasıl uyum sağladıkları bağlamında dil ayrıştırıcılarının gelişimini keşfetmek için biraz eğleniyorum.
Bağlama duyarlı bir dilbilgisi için iyi bir gerçek dünya (yani teorik değil) örneği nedir?
Yanıtlar:
İyi soru. Yorumlarda belirtildiği gibi, pek çok programlama dili içeriğe duyarlı olsa da, bu bağlam hassasiyeti genellikle ayrıştırma aşamasında çözülmez, ancak sonraki aşamalarda - yani, dilin bir üst kümesi bağlamsız bir dilbilgisi kullanılarak ayrıştırılır, ve bu ayrıştırma ağaçlarından bazıları daha sonra filtrelenir.
Ancak bu, bu dillerin içeriğe duyarlı olmadığı anlamına gelmez, bu yüzden bazı örnekler:
Haskell, işleç olarak kullanılan işlevleri ve bu işleçlerin önceliğini ve ilişkilendirilebilirliğini tanımlamanızı sağlar. Başka bir deyişle, aşağıdaki gibi bir işleç ifadesi için doğru ayrıştırma ağacını oluşturamazsınız:
a @@ b @@ c ## d ## e
aşağıdakiler için öncelik / ilişkilendirme bildirimlerini ayrıştırmadıkça @@
ve ##
:
infixr 8 @@
infixr 6 ##
İkinci bir örnek, içeriğe uzunluğunun ön ekini ekleyen bir veri dili olan Bencode'dur :
<length>:<contents>
Bu formattaki sorun, bağlama duyarlı bir şey olmadan ayrıştırmanın neredeyse imkansız olmasıdır, çünkü "alan" boyutlarını anlamanın tek yolu dizeyi ayrıştırmaktır.
Üçüncü örnek, rastgele etiket adlarına izin verildiğini varsayarak XML'dir: açılış etiket adlarında eşleşen yakın etiketler olmalıdır:
<hi>
<bye>
the closing tag has to match bye
</bye>
</hi> <!-- has to match "hi" -->
Bildiğim kadarıyla, bağlama duyarlı gramerler yalnızca doğal dil işlemede kullanılır . Programlama dilleri tercümanları ve derleyicileri, karmaşıklık nedeniyle (geçmişte bazı girişimlerde bulunulmuş olsa bile) bağlamsız bir gramer ayrıştırmaya çalışmaz.
Belki de bu kütüphanelerden birinde gerçek kullanım için bazı örnekler bulabilirsiniz:
http://en.wikipedia.org/wiki/List_of_natural_language_processing_toolkits
Bağlama duyarlı dilbilgileri bazen programlama dili semantiğinin tanımlarında kullanılır. Bağlama duyarlı gramerlerin belki de en kapsamlı kullanımı Algol68 dil tanımıdır. Algol68 programlarının sözdizimini ve semantiğini tanımlamak için iki seviyeli bağlamsız gramer (bkz. Http://en.wikipedia.org/wiki/Two-level_grammar ) kullandı.
Birkaç meslektaşım Algol68 uygulamalarını yönlendirmek için van Wijngaarden dilbilgisini kullandı (bkz. Http://en.wikipedia.org/wiki/FLACC ).