Düzenli bir dil nedir?
Dil düzeyleri (normal, bağlam özgür, duyarlı, vs.) kavramını anlamaya çalışıyorum.
Bu kolayca bakabilirim, ama ben tüm açıklamalar semboller yük ve hakkında konuşmak bulmak 'ayarlar'. İki sorum var:
Düzenli bir dil ve farklı dillerde dilleri farklı nasıl kelimelerle tarif EDEBİLİR MİSİN?
Nerede insanları anlamak bu şeyler öğrenir? Anladığım kadarıyla, resmi matematik değil mi? Kullanılan ve herkes öğretmenler sadece bunu biliyorduk farz olarak anlaşılması zor uni dersleri bir çift vardı. Nereden öğrenebilirim ve neden insanlar bu kadar çok kaynaklarda bunu bilmek? bekleniyor Eğitimde bir boşluk var gibi.
İşte example bir:
Herhangi bir dil bu set ait alfabe düzenli bir dildir.
Nasıl bir dil 'üzerinden bir şey var mı?
CEVAP
Bilgisayar bilimi, bir bağlamdakelimebirleştirmeyisemboller. Kullanılan semboller deniralfabe. Örneğin, bazı kelimeleri alfabe dışı {0,1,2,3,4,5,6,7,8,9}
kurulması1
, 2
, , *, *912
543
, 002
olurdu.
Birdilsonra tüm olası kelimelerin bir alt kümesidir. Örneğin, tüm elit MI6 ajanları yakalayan bir dil tanımlamak isteyebiliriz. Bunların hepsi başlangıç ile çift 0, yani bir deyişle dil olurdu 007
, 001
, 005
, 0012
ama 07
15
. Basitlik aşkına, bir dildirüzerindebir alfabe" kelimeleri yerine semboller . birleştirme oluşturduğu "bir alt ^em>bir alfabe".
Bilgisayar bilimi, artık dilleri sınıflandırmak istiyorum. Bir dil diyoruznormaleğer bir kelime ise, karar verilir, eğer bir algoritma ile dil sonra başka sözcük tüm sembolleri inceleyerek (sonlu) sabit belleğe sahip bir makine/. Dili ibaret sadece sözü 42
düzenli olarak karar verebilirsiniz bir kelime içinde gerektirmeden keyfi miktarda bellek; sadece kontrol edip ilk sembolü 4, ister ikinci 2 ya da daha fazla numaraları izleyin.
Tüm dillerde sınırlı sayıda kelime vardır normal, çünkü biz (teorik olarak) sadece yapı denetim akışı ağacı sürekli boyutu (görselleştirmek bunun gibi bir sürü iç içe if
-deyimleri incelemek için bir rakam, sonra diğeri). Örneğin, biz test edip bir kelimedir "asal sayıları 10 ila 99" dili ile aşağıdaki inşa gerektiren hiçbir bellek hariç kodlamak hangi kod satırı ediyoruz şu anda
if word[0] == 1:
if word[1] == 1: # 11
return true # "accept" word, i.e. it's in the language
if word[1] == 3: # 13
return true
...
return false
Unutmayın bütün sonlu dilleri düzenli, ancak tüm düzenli diller sonlu; bizim çift 0 dili içeren sonsuz sayıda kelime (007
, 008
, ama aynı zamanda 004242
0012345
), ama olabilir test ile sabit bellek: test edip bir kelime ait olduğu, kontrol edip ilk sembolü 0
ya da ikinci sembol 0
. Eğer durum buysa, kabul et. İki sözcüğü daha kısa, ya da 00
ile başlamazsa MI6 kod adı değil.
Resmen finite-state machine regular grammar düzenli bir dil olduğunu kanıtlamak için kullanılan bir yapı. Bu if
-yukarıdaki açıklamalara benzer, ama keyfi Uzun kelime için izin verir. Eğer sonlu bir makine varsa, o da düzenli bir dilbilgisi vardır, ve tersi, yani ya göstermek için yeterli. Örneğin, çift-0 dilimizi için sonlu durum makinesi
start state: if input = 0 then goto state 2
start state: if input = 1 then fail
start state: if input = 2 then fail
...
state 2: if input = 0 then accept
state 2: if input != 0 then fail
accept: for any input, accept
37 ** eşittir:
start → 0 B
B → 0 accept
accept → 0 accept
accept → 1 accept
...
38 ** eşittir:
00[0-9]*
Bazı diller vardırdeğilnormal. Örneğin, 1
, 2
1 . (genellikle yazılı aynı sayıda ardından herhangi bir sayı dili ^sup>n2nbir keyfi içinndeğil normal ihtiyacın daha sürekli bir bellek miktarı(= sabit bir sayı Birleşik Devletleri) mağaza sayısı 1
s olup olmadığına karar verirler bir kelimedir dili.
Bu genellikle teorik bilgisayar bilimleri dersinde anlatılmalıdır. Neyse ki, Wikipedia oldukça güzel formal regular languages hem de açıklar.
Düzenli bir dil nedir?...
Düzenli bir dize ve bir verbatim strin...
Ultimate Posta Kodu ve posta düzenli i...
MAC Adresi için bir düzenli ifade nedi...
Bir `foo int nedir::*bar:*`?...