Chomsky Type-I (bağlama duyarlı) dilbilgisi kullanmanın gerçek dünyadaki kullanım durumu nedir?


9

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?


8
Programlama dili önemli mi?
Martin York

@LokiAstari Tabii ki.
Evan Plaice

2
Programlama dillerinin önemli olduğunu düşünüyorum, ancak bağlam duyarlılığının karmaşıklığı normalde semantik analizle bağlamsız bir dilbilgisi ile değiştirildiği için iyi bir çözüm üretmiyorum.
Frank

@Frank Sanırım benim sorunum, içeriğe duyarlı bir dilin gerçek dünyadaki bazı kullanımlara uygulamadan ne olduğunu gerçekten kavrayamıyorum.
Evan Plaice

Özyinelemeli olarak numaralandırılabilir dil ayrıştırıcıları gerektirmeyebilecek ve bu nedenle tip 1 (bağlam duyarlı) dil grubuna girebilecek bazı insan dilleri vardır. cs.virginia.edu/~evans/cs3102/?p=138

Yanıtlar:


9

İ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" -->

İlginç. XML'i biliyordum. XHTML 1.0 spesifikasyonunun arkasındaki sürücünün, daha temiz bir bağlamsız XML için bağlama duyarlı istisnaları destekleyen 'tuhaflık modu' HTML yorumlayıcılarından uzaklaşacağından şüpheleniyorum.
Evan Plaice

@EvanPlaice Yorumunuzla kafam karıştı - örneğimde gösterdiğim gibi "temiz XML" içeriğe duyarlı .

4
@MattFenwick XML örneğinizin XML'nin bağlamdan bağımsız olmasının gerçek nedenini göstermediğini düşünüyorum. Bunun nedeni, rastgele etiket adlarına izin verilmesidir. Yalnızca belirli bir etiket kümesine izin verilirse XML bağlam içermez.
Honza Brabec

@HonzaBrabec haklısınız - örtük olarak rastgele etiket adlarına izin verildiğini varsaydım. Bu varsayımı açıkça belirtmeliydim. Bunu işaret ettiğiniz için teşekkür ederiz!

3

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

http://opennlp.sourceforge.net/projects.html

http://nltk.org/

http://nlp.stanford.edu/nlp/javadoc/javanlp/


2
HTML 'tuhaflık modu' ve kod ön işlemcileri ne olacak, sayılmazlar mı?
Evan Plaice

2

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 ).

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.