IELR (1) -parser nedir?


14

Kendime bizon kullanımını öğretmeye çalışıyorum. Manpage bizonu (1) bizon hakkında şunları söylüyor:

LALR (1), IELR (1) veya kanonik LR (1) ayrıştırıcı tablolarını kullanarak deterministik bir LR veya genelleştirilmiş LR (GLR) ayrıştırıcısı oluşturun.

IELR ayrıştırıcı nedir? Dünya çapında web'de bulduğum tüm ilgili makaleler ödeme duvarı.



@reinierpost Şu anda kendimi çok aptal hissediyorum. Bunu neden bulamadım?
FUZxxl

Bilmiyorum - Google sonuçları kişiselleştiriyor ...
reinierpost

@reinierpost, bu soruyu temizlemek için bağlantınızı belirterek bu soruya cevap vermek ister misiniz ?
Merbs

Hmmm ... eğer gereken her şey buysa, tamam.
reinierpost

Yanıtlar:


3

IELR (1) Ayrıştırma Algoritması

IELR (1) ayrıştırma algoritması Joel E. Denny tarafından 2008 yılında geliştirilen onun doktora parçası olarak Clemson Üniversitesi'nden Brian A. Malloy'un gözetiminde araştırma. IELR (1) algoritması, 1977'de David Pager tarafından geliştirilen "minimal" LR (1) algoritmasının bir varyasyonu olup, kendisi 1965'te Donald Knuth tarafından icat edilen LR (k) ayrıştırma algoritmasının bir varyasyonudur . IELR (1) 'deki IE yetersizliğin giderilmesi anlamına gelir (son bölüme bakınız).

LR (1) Algoritmalar

LR (1) IELR (1) bir parçası anlamına gelir L sağa EFT, R ightmost türetme 1 ileriye dönük belirteci. LR (1) ayrıştırıcılarına kanonik ayrıştırıcılar da denir. Bu ayrıştırma algoritmaları sınıfı, ayrıştırma sırasında gerçekleştirilecek bir sonraki eylemi belirleyen bir yığın ve durum geçiş tablosu ile aşağıdan yukarıya kaydırma, kaydırma azaltma ayrıştırma stratejisi kullanır .

Tarihsel olarak, LR (1) algoritmaları, geçiş tabloları için büyük bellek gereksinimleri nedeniyle dezavantajlı hale gelmiştir. Çağrı cihazının iyileştirilmesi, geçiş tablosu oluşturulduğunda geçiş durumlarını birleştirmek ve tablonun boyutunu önemli ölçüde azaltmak için bir yöntem geliştirmekti. Böylece Pager'in algoritması, LR (1) ayrıştırıcılarını alan ve zaman verimliliği açısından diğer ayrıştırma stratejileriyle rekabetçi hale getirir. "Minimum LR (1) ayrıştırıcı" ifadesi, Pager algoritması tarafından sunulan geçiş tablosunun minimum boyutunu ifade eder.

Çağrı Cihazının Algoritmasının Sınırlamaları

Minimal LR (1) algoritmaları, ayrıştırılacak dil için belirli bir girdi dilbilgisine dayalı olarak geçiş tablosunu oluşturur. Farklı dilbilgileri aynı dili üretebilir. Gerçekten de, LR (1) olmayan bir dilbilgisinin LR (1) ayrıştırılabilir bir dili üretmesi mümkündür. Uygulamada, LR (1) ayrıştırıcı jeneratörleri, bu gerçeğe uyum sağlamak için iki olası durum geçişi arasındaki çatışmaları çözmek için bir spesifikasyona sahip LR (1) olmayan gramerleri kabul eder. Denny ve Malloy, Pager algoritmasının, LR (1) olmayan dilbilgisi bir LR (1) dili oluştursa bile, belirli LR (1) dilbilgisi sağlandığında LR (1) dillerini ayrıştıracak kadar güçlü ayrıştırıcılar üretemediğini keşfetti.

Denny ve Malloy, bu sınırlamanın sadece yaygın olarak kullanılan olgun yazılım olan Gawk ve Gpic'in yanlış ayrıştırıcı eylemleri gerçekleştirdiğini göstererek akademik olmadığını gösteriyor.

IELR (1) 'in Gelişmeleri

Denny ve Malloy, Pager algoritması tarafından üretilen geçiş tablosunu eşdeğer bir LR (1) dilbilgisinin geçiş tablosuyla karşılaştırarak Pager algoritmasının eksikliklerinin kaynağını incelediler ve Pager's'den geçiş tablosunda görünen yetersizlik olarak adlandırdıkları için iki kaynak belirlediler. algoritmasıdır, ancak LR (1) geçiş tablosunda yoktur. Denny ve Malloy'un IELR (1) ( Yetersizlik Giderme LR (1)) algoritması, Pager algoritmasının boyutuyla hemen hemen aynı olan geçiş tablosunu oluştururken bu yetersizlikleri ortadan kaldırmak için tasarlanmış bir algoritmadır.


6

Kendisini tanıttığını iddia eden bir makale: IELR (1): LR Olmayan (1) Uyuşmazlık Çözümü ile Gramerler için Pratik LR (1) Ayrıştırıcı Tabloları (archive.org aracılığıyla) Joel E. Denny ve Brian A. Malloy, Clemson University , Malloy'un sitesinden ücretsiz olarak edinilebilir.

Değer verdikleri şey cevaplayamayacağım bir şey. (Şahsen böyle sakat CFG ayrıştırma ihtiyacını anlamıyorum - neden sadece GLR'yi kullandığınızda ifade gücünüzü sınırlandırıyorsunuz ? Bana mantıklı olan şey TAG veya PEG (doğal görünüyor ve etkileyici güç katıyor) veya ağaç gramerler (ayrıştırma ağaçlarının tanınmasının tasarım açısından sorunsuz olduğu XML gibi diller için)


Teknolojiyle ilgili prensip üzerinde hemfikir olduğum halde, sorun genellikle geleneksel deterministik ayrıştırma işleminin daha iyi, daha eksiksiz uygulamalara sahip olmasıdır. Başka bir sorun, Genel CF ayrıştırma işleminin daha güçlü olmasıdır, ancak GLR bunun en iyi sürümü olmayabilir.
babou

4
İnsanların hobbled CFG ayrıştırıcıları geliştirmelerinin ana nedeni, bir GLR ayrıştırıcısının doğrusal zamanda zorunlu olarak çalışmamasıdır - bu birçok uygulama için büyük bir sorundur. Bir IELR ayrıştırıcısı doğrusal çalışma zamanını ve daha fazlasını garanti edebilir.
FUZxxl

Bunun neden bir sorun olacağını anlamıyorum.
reinierpost

2
@reinierpost Doğrusal zamana göre en kötü durum- (GLR) veya (GLL). Büyük kaynak dosyalarını derlemek örneğin, bu olabilir çok zaman kadar ekleyin. Dahası, destek olmadan ifadeyi ifade etmeyi tercih etme tutumu, söz konusu zaman fedakarlığını ihmal etmektedir. Teknik olarak süper etkileyici sLMG ve / veya PMCFG formalizmlerini kullanabiliriz, ancak daha sonra ile . Bu çok saçma bir örnek olabilir, ancak motivasyon her zaman zamandır . İnsanlar sonsuza kadar yaşamaz ve yapacak çok şeyleri vardır. Zamanlarını boşa harcamak genellikle kötüdür. O ( n 3 ) l i m x O(n4)O(n3)limxO(nx)
kullanıcı

3
Ben o notta istiyorum "Şahsen ben böyle sakat CFG ayrıştırma ihtiyacını anlamıyorum? - Sadece GLR'yi kullanabilirsiniz zaman ifade gücünü sınırlamak niçin" bu bağlamda yanlış yönlendirilmiştir. IELR (1), daha verimli GLR ayrıştırıcılarına izin veren daha verimli LR (1) ayrıştırıcı tabloları oluşturmak için kullanılır .
orlp
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.