EPAL'ı tanıyan herhangi bir gereksiz CFG ayrıştırma algoritması var mı?


23

Hatta palindromların dili olan EPAL, aşağıdaki net bağlamsız gramer tarafından oluşturulan dil olarak tanımlanmaktadır:

Saa

Sbb

SaSa

SbSb

EPAL, pek çok ayrıştırma algoritmasının 'temelini oluşturuyor: dili tanımlayan herhangi bir dilbilgisini ayrıştırabilen açık olmayan CFG'ler için henüz herhangi bir ayrıştırma algoritmasıyla karşılaşmadım. Belirli bir ayrıştırıcı tarafından ayrıştırılamayan kesin olmayan CFG'lerin olduğunu göstermek için sıklıkla kullanılır. Bu benim soruma ilham verdi:

EPAL'de çalışan yalnızca belirsiz CFG'leri kabul eden bir ayrıştırma algoritması var mı?

Elbette dil dilindeki zaman diliminde ayrıştırılan gramer için geçici iki geçişli bir çözümleyici tasarlanabilir. Özellikle akılda EPAL ile tasarlanmamış ayrıştırma yöntemleri ile ilgileniyorum.


1
Sormaktan neredeyse korkuyorum: LL (1) ile özyinelemeli alçalma ile ilgili yanlış olan ne?
Raphael

3
Geri izlemeyen özyinelemeli iniş, dil herhangi bir k için LL (k) olmadığından EPAL'ı kullanamaz. Geri izlemeyle özyinelemeli iniş, dilbilgisini O(n2) zaman içinde ele alabilir , ancak bu, aradığım şey olmayan, üstel en kötü durum davranışına sahip genel bir algoritmadır.
Alex ten Brink

üstel değil, ikinci dereceden. O ( 2 N ) üstel. O(N2)O(2N)
Victor Stafusa

1
@Victor: backtracking'in bazı gramerler üzerinde üstel bir davranışı var, sadece bu gramerde değil. Yine de, belirsiz gramerler üzerinde çalışan bir algoritma olması, soruma cevap olarak indirgendi.
Alex ten Brink

1
@jmad: niyetim dili ayrıştırmak değil (bunu lineer zamanda trivally yapabilirsin), merakımı yerine getirmek: Ayrıştırma yöntemiyle ayrıştırılamayan bir dilin örneği olarak kullanıldığını gördüm. Bunu tanıyan bir ayrıştırma yöntemi olup olmadığını merak ediyorum.
Alex ten Brink,

Yanıtlar:


14

Aşağıdaki ayrıştırma stratejisinin taslağını kendi sorumluluğunuzdadır.

Girişi sadece bir uçtan okumak yerine her iki taraftan da okur ve eşleşen kuralları ararız. Bunu özyinelemeli iniş tarzında yapabiliriz; çağrısında , w önekini bulun ve girişe v önekini bulun , böylece kalan kelimede A w B v kuralı olacak şekilde B ( ) 'ye inin . Eşleşen kural yoksa, sözcüğü reddet.A()wvAwBvB()

AwBvAwBvwpw Θ ( n 2 )vsvΘ(n2)

Fikir, doğrusal olmayan dilbilgileri için hiç de işe yaramaz. Doğrusal ancak belirsiz gramerler genel olarak geri izleme olmadan çözümlenemez (en azından negatif girdiler için).


  1. w v v w swpv burada ve , yani hiçbir kelime diğerinin öneki değildir. , son ekler için benzer.wvvws

1
Mükemmel! Tam olarak aradığım şeydi. Herhangi bir için olmayan bir dilin böyle basit bir algoritma ile ayrıştırılabilir olması harika. kNLR(k)k
Alex ten Brink

1
Bunu biraz daha düşündükten sonra, açıklamanızda küçük bir hata keşfettim: Doğrusal dilbilgisi açık değildir, ancak tanımladığınız gibi benzersiz bir önek yoktur. Hala benzersiz bir önek var, ancak onu almak için nonterminalin içine bakmak zorunda kalabilirsiniz ve çalışma süreniz . Algoritmanız üzerinde çalışıyor . O ( n 2 ) E P A LSaAb|aBb,Aa,BbO(n2)EPAL
Alex ten Brink

@AlextenBrink İyi yakalayın. Bunun için hesap düzenlemiştim.
Raphael
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.