Bağlamdan Bağımsız Dilbilgisi nedir?


104

Biri bana bağlamdan bağımsız gramerin ne olduğunu açıklayabilir mi? Wikipedia girişine ve ardından resmi dilbilgisiyle ilgili Wikipedia girişine baktıktan sonra, tamamen ve tamamen kafam karıştı. Birisi bu şeylerin ne olduğunu açıklayacak kadar nazik olabilir mi?

Bunu merak ediyorum çünkü ayrıştırmayı ve ayrıca bir regex motorunun sınırlamasını araştırmak istiyorum.

Bu terimlerin doğrudan programlamayla mı yoksa genel olarak dilbilimle mi ilgili olduğundan emin değilim. Eğer durum buysa, özür dilerim, eğer öyleyse belki bu yer değiştirebilir mi?


2
Daha çok ilgiliAutomata Theorem
Rahul

2
Biçimsel diller ve ayrıştırma için otomata teorisiyle ilgileniyorsanız, Sudkamp's Languages ​​and Machines veya Aho, Sethi & Ullman's Compilers gibi bir kitap öneririm . Her kitap, bir tür biçimsel gramer olan bağlamdan bağımsız bir gramerin resmi bir tanımını sağlar, ardından bunları anlamak için gereken bağlamdan bağımsız gramerler hakkındaki temel teoremleri belirtir ve kanıtlar (bağlamdan bağımsız diller için pompalama leması ve dönüştürme ve normal form teoremleri). Biçimsel dil teorisini öğrenmek için küme teorisinin üstünkörü bir anlayışının ötesinde matematiksel bir ön koşul yoktur.
danportin

1
Bu tür sorular Teorik Bilgisayar Bilimi'ne taşınmamalı mı?
Soluk Mavi Nokta

Yanıtlar:


110

Bağlamdan bağımsız bir gramer, belirli özellikleri karşılayan bir gramerdir. Bilgisayar biliminde gramerler dilleri tanımlar; özellikle resmi dilleri tanımlarlar.

Biçimsel bir dil, dizelerden oluşan bir dizi (nesnelerin bir koleksiyonu için matematiksel bir terim) (sembol dizileri ... "dizi" kelimesinin programlama kullanımına çok benzer). Biçimsel dilin basit bir örneği, üç, {000, 001, 010, 011, 100, 101, 110, 111} uzunluğundaki tüm ikili dizelerin kümesidir.

Dilbilgisi, bir dilbilgisi tarafından tanımlanan dilde bir dizi oluşturmak için yapabileceğiniz dönüşümleri tanımlayarak çalışır. Gramerler, bir başlangıç ​​sembolünün (genellikle S) bazı sembol dizilerine nasıl dönüştürüleceğini söyleyecektir. Daha önce verilen dil için bir gramer:

S -> BBB
B -> 0
B -> 1

Bu yorumlamak yolu yani Sile değiştirilebilir BBBve B0 ile değiştirilebilir ve Byapabileceğimiz dize 010 oluşturmak için 1. So ile değiştirilebilir S -> BBB -> 0BB -> 01B -> 010.

Bağlamdan bağımsız bir gramer, değiştirdiğiniz şeyin (okun solunda) tek bir "terminal olmayan" sembol olduğu bir gramerdir. Terminal olmayan sembol, dilbilgisinde kullandığınız ve son dizelerinizde görünmeyen herhangi bir semboldür. Yukarıdaki gramerde, "S" ve "B" terminal olmayan sembollerdir ve "0" ve "1" "terminal" sembolleridir. Gramerler gibi

S -> AB
AB -> 1
A -> AA
B -> 0

"AB -> 1" gibi kurallar içerdikleri için düzenli değillerdir.


12
"Normal değil" derken "bağlamdan bağımsız değil" mi demek istiyorsun? (çünkü CFG'ler tarafından temsil edilebilen dil, normal ifadelerle gösterilebilenlerin bir süper kümesidir)
Anti Earth

3
"S, B ile değiştirilebilir" mi, "S, BBB ile değiştirilebilir" mi?
Cosmo Harrigan

4
Yüce Tanrım, bu SO'da gördüğüm en iyi açıklanan cevaplardan biri.
Rafael Dias da Silva

1
@AntiEarth ikinci örnek normal bir dilbilgisi değildir, çünkü tek bir terminal olmayan sembolden iki terminal olmayan sembol üreten kurallara sahiptir, buna normal gramerlerde izin verilmez (ayrıca, OP'nin belirttiği gibi, üzerinde birden fazla terminal dışı sembol bulunan kuralları vardır. sol). en.wikipedia.org/wiki/Regular_grammar
awwsmm

21

Dil Teorisi, Hesaplama Teorisi ile ilgilidir. Bilgisayar Biliminin daha felsefi tarafı hangisidir, hangi programların mümkün olduğuna veya hangilerinin yazılmasının mümkün olacağına karar vermek ve çözmek için bir algoritma yazmanın ne tür problemler olduğuna karar vermek.

Normal bir ifade, normal bir dili tanımlamanın bir yoludur. Düzenli dil, deterministik sonlu bir otomat tarafından kararlaştırılabilen bir dildir.

Sonlu Durum Makineleri hakkındaki makaleyi okumalısınız: http://en.wikipedia.org/wiki/Finite_state_machine

Ve Normal diller: http://en.wikipedia.org/wiki/Regular_language

Tüm Normal Diller Bağlam İçermeyen Dillerdir, ancak normal olmayan Bağlamdan Bağımsız Diller vardır. Bağlamdan bağımsız bir dil, bir Bağlamdan Bağımsız Grammer veya tek yığınlı bir Sonlu Durum Makinesi olan Aşağı Açılan Otomata tarafından kabul edilen tüm dizelerin kümesidir: http://en.wikipedia.org/wiki/Pushdown_automaton#PDA_and_Context-free_Languages

Bir dizenin dilde olup olmadığına karar vermek için bir Turing Makinesi (bilgisayarınızda yazabileceğiniz olası herhangi bir program) gerektiren daha karmaşık diller vardır.

Dil teorisi ayrıca P'ye karşı NP problemi ve diğer bazı ilginç konularla da çok ilgilidir.

Bilgisayar Bilimlerine Giriş üçüncü sınıf ders kitabım bu konuyu açıklamada oldukça iyiydi: Hesaplama Teorisine Giriş. Michael Sipser tarafından. Ama yeni satın almak bana 160 dolara mal oldu ve çok da büyük değil. Belki kullanılmış bir kopyasını bulabilir veya bir kütüphanede veya size yardımcı olabilecek bir şeyde bulabilirsiniz.

DÜZENLE:

Normal İfadelerin ve daha yüksek dil sınıflarının sınırlamaları, son 50 yılda bir ton araştırıldı. Normal diller için pompalayan lemma ilginizi çekebilir. Belirli bir dilin düzenli olmadığını kanıtlamanın bir yoludur:

http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages

Bir dil normal değilse, Bağlamsız olabilir, bu da bir Bağlamdan Bağımsız Grammer tarafından tanımlanabileceği anlamına gelir veya daha yüksek bir dil sınıfında bile olabilir, Bağlamsız için pompalama lemması ile bunun Bağlamsız olmadığını kanıtlayabilirsiniz. normal ifadeler için olana benzer diller.

Bir dil bile karar verilemez olabilir, yani bir Turing makinesi bile (bilgisayarınızı çalıştırabilir) bir dizgenin dilde kabul edilip edilmeyeceğine veya reddedilmesine karar verecek şekilde programlanamaz.

Bence en çok ilgilendiğiniz kısım, bir Düzenli İfadenin hangi dillere karar verebileceğini görmek için Sonlu Durum Makineleri (Hem Belirleyici hem de Belirleyici) ve hangi dillerin düzenli olmadığını kanıtlamak için pompalama lemması.

Temelde, bir tür hafızaya veya sayma yeteneğine ihtiyaç duyan bir dil normal değildir. Eşleşen parantez dili düzenli değildir, çünkü makinenin birini kapatması gerekip gerekmediğini anlamak için parantez açıp açmadığını hatırlaması gerekir.

En az üç b içeren a ve b harflerini kullanan tüm dizelerin dili normal bir dildir: a ba ba ba

A'dan daha fazla b içeren a ve b harflerini kullanan tüm dizgelerin dili düzenli değildir.

Ayrıca, sonlu dillerin hepsinin düzenli olmasını da istememelisiniz, örneğin:

A'dan daha fazla b içeren a ve b harflerini kullanan 50 karakterden kısa tüm dizelerin dili normaldir, çünkü sonlu olduğu için (b | abb | bab | bba | aabbb | ababb | olarak tanımlanabileceğini biliyoruz. ..) Tüm olası kombinasyonlar listelenene kadar ect.


1
Normal ifadeler, dizeleri kalıplarla eşleştiren karar programları değildir. Üyelik sorununun kararlaştırılabileceği düzenli kümeleri ifade eden ifadelerdir.
danportin

1
Bir set normal ise, açıkça karar verilebilir. Başka nasıl ifade edeceğimi bilmiyorum. Hafızası olmayan etkin karar programlarıdır.
Paul

Düzenli diller ("hafızası olmayan karar programları") için bir karar prosedürü sağlayan deterministik sonlu otomatayı tanımlıyorsunuz. Düzenli ifadelerdir terimleri belirtmek düzenli dilleri değil, programlar yöntemlerdir. Bu benim tek şikayetimdi.
danportin

1
"Normal ifade, normal bir dili tanımlamanın bir yoludur. Düzenli bir dil, deterministik sonlu bir otomat tarafından karar verilebilen bir dildir." Olarak değiştirdim. Bu daha iyi geliyor mu?
Paul
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.