Cevap Evet. Ancak bunu bir Earley ayrıştırıcıyla yapmam çünkü aynı özelliklere sahip daha basit olanlar var.
Temel olarak, Earley ayrıştırıcısı, dilbilgisi belirsiz olduğunda belirli bir dize için olası tüm ayrıştırmaları üreten genel bağlamsız ayrıştırıcılar ailesine aittir.
Bu ayrıştırıcıları anlamanın iki yolu vardır (en azından):
Tek bir dize ayrıştırılırken, dikkate alınacak sonlu durum otomatı
, her seferinde bir sembol olmak üzere yalnızca ayrıştırılacak dizesini tanıyan doğrusal bir otomattır (durum sayısı | w | + 1'dir ). Bir FA A ve bir CF garmer
G'nin (Bar Hillel, Perlis, Shamir 1961) çapraz ürün yapısını uygularsanız, L ( A ) ∩ L ( G ) üreten yeni bir dilbilgisi F olan yeni bir CF gramer elde edersiniz. . Genellikle göz ardı edilen ilginç nokta, F'nin G tarafından kullanılan parse ağaçlarını koruduğuw|w|+1AGFL(A)∩L(G)FG, terminal dışı yeniden adlandırma (çapraz ürün nedeniyle).
AFL(G)∅G üretmek için kullanabileceği üretir.
F ve tüm genel CF ayrıştırma algoritmaları, CYK, Earley, genelleştirilmiş LR veya LL veya diğerleri olsun, çapraz ürün yapısının az çok optimize edilmiş bir versiyonudur. Yani tüm söylediğim onlar için de geçerli.
Ancak, gördüğünüz gibi, eğer herkes bunu yapmakla ilgileniyorsa, tüm düzenli bir seti ayrıştırmayı genelleştirir.
ww
GF
İstenirse, bu sadece minimum mesafeye sahip telleri tutmak için kullanılabilir.
Bununla birlikte, sonlu durum makineleri ile kompozisyon ilişkisel olduğu için bu biraz geliştirilebilir.
GwΣ∗
Yapımın öncekiyle aynı sonucu elde etmek için budamak kolay olurdu, ancak en iyi yol, Earley de dahil olmak üzere literatürdeki çoğu ayrıştırıcı tarafından kullanılan dinamik programlama organizasyonu gibi daha kontrollü bir kavşak yapısıdır ve bunu oluşturmaktan kaçınmak için kullanmaktır. mesafeleri hesaplayarak ve istenen eşiği aştığında herhangi bir hesaplama yolunu iptal ederek işe yaramaz kural. Dinamik programlama, girdiye en kısa mesafedeki dize için doğrudan ayrıştırma ormanını (veya ayrıştırma ağacını) hesaplamak için de kullanılabilir.