Bir permütasyon ifade: permütasyonu ifade için standart (S) BNF bağlam bağımsız dilbilgisi tanımları bir uzantısıdır ihtiva üretimi (ya da eşit şekilde, nonterminallerdir) yoluyla . Permütasyon cümlesi pozisyonunda, bu prodüksiyonların her birini tam olarak bir kez görmek isteriz, ancak bu terminal olmayanların siparişiyle ilgilenmiyoruz.n A 1 A n
Örneğin:
S <- X { A, B, C } Y
şuna eşittir:
S <- X A B C Y
S <- X A C B Y
S <- X B A C Y
S <- X B C A Y
S <- X C A B Y
S <- X C B A Y
Bu kavram "Bağlamdan bağımsız gramerlerin permütasyon cümleleriyle genişletilmesi" nde ortaya çıkmaktadır . Burada, bir LL (1) ayrıştırıcısı kullanılarak bu cümlelerin doğrusal zamanda nasıl ayrıştırılacağı da açıklanmaktadır.
"Permütasyon cümleciklerini ayrıştırma" makalesi , ayrıştırıcı birleştiricileri kullanarak permütasyon cümleciklerini ayrıştırma yöntemini açıklamaktadır. Bunlar, permütasyon cümleleri ve bunları nasıl ayrıştıracağımız hakkında konuştuğum sadece iki makale.
LL (1) tabanlı ayrıştırıcılarla bu tür permütasyon cümlelerini kolayca ayrıştırabildiğimize göre, tahminim LR (1) tarzı ayrıştırıcılarla aynı şeyi yapabiliriz. Benim sorum bu nedenle:
Permütasyon cümleleri içeren bir dilbilgisi, makul büyüklükte bir tablo korunurken, LR (1) makineleri kullanılarak girdi dizesi boyutunda doğrusal olarak zaman içinde ayrıştırılabilir mi?
Permütasyon cümleleri, bağlamsız dillerin gücünü genişletmez: yukarıdaki örnekte olduğu gibi, olası tüm permütasyonları numaralandırabilir. Ancak, sonuçta ortaya çıkan dilbilgisi Boyutunda olabileceğinden dilbilgisi patlar . Bu, doğrusal zaman ayrıştırmasına izin verir, ancak dilbilgisinin boyutu çok büyür.
Yukarıdaki yaklaşım herhangi bir ayrıştırma algoritması için işe yarar (faydalı olmasa da), bu yüzden belki belirli algoritmalar için daha iyisini yapabiliriz. İfadeleri LR tablosuna kodlayarak havaya uçmayı 'sadece' üstel ( ) azaltabiliriz: LR öğelerinin henüz hangi yapımların görülmediğini kodlamasını sağlayabiliriz ve bu nedenle patlamayı azaltabiliriz permütasyon cümlelerinin tüm alt kümelerine.
Bu daha iyi olmasına rağmen, elbette yeterince iyi değil - 30 maddelik permütasyon ifadesine sahip olmak dilbilgisini kullanılamaz hale getirecektir. LR ayrıştırma işleminin hala bir kısmına değinmedik ve bu ayrıştırma için kullanılan gerçek yığın tabanlı yordam. Sayaçları yığına kaydetmenin sorunu çözebileceğini düşünüyorum, ancak bunu nasıl yapacağımdan emin değilim.
Şu anda bir ayrıştırıcı jeneratör uyguluyorum ve sorun etki alanı permütasyon cümleleri cennetten bir hediye olurdu. LR (1) makine kullandığım için yukarıdaki soru takip etti.