SORU
12 Mayıs 2011, PERŞEMBE


LL ve LR ayrıştırma arasındaki fark nedir?

Kimse bana LL basit bir örnek karşı LR ayrıştırma ayrıştırma verebilir misiniz?

CEVAP
26 Temmuz 2011, Salı


En yüksek seviye arasındaki fark LL ayrıştırma ve LR ayrıştırma olduğunu LL ayrıştırıcıları başlamak başlangıç sembolü ve denemek için geçerlidir productions ulaşması hedef dize, oysa LR ayrıştırıcıları başlamak hedef dize ve denemek için geri gelmesi başlangıç sembolü.

LL bir ayrıştırma sağdan sola, soldaki bir kökten türemiştir. Yani, giriş ve en soldaki bir türetme oluşturmak için doğru girişimi için soldan sembolleri düşünün. Bu hedef dize başında sembol başlangıç ve biz gelene kadar, art arda dışında en soldaki Terminal dışı genişleterek yapılır. LR bir ayrıştırma sağdan sola, sağdaki bir türetme, biz soldan sağa tarama ve sağdaki anlamı inşa etme çabası anlamına gelir. Çözümleyici sürekli giriş bir dize alır ve bir terminal dışı geri tersine çevirmek için çalışır.

LL bir ayrıştırma sırasında, çözümleyici sürekli iki eylem arasında seçer:

  1. Tahmin etmek: En soldaki Terminal dışı ve ilerleme simgeleri bazı sayısına göre üretim giriş dizesi daha yakın olabilmek için uygulanması gereken seçim.
  2. Maç: En soldaki giriş soldaki unconsumed sembolü ile terminal sembolü tahmin maç.

Bu dilbilgisi belirli bir örnek olarak,:

  • S &yani; E
  • E &yani; T E
  • E &yani; T
  • T &yani; int

Sonra dizgide int int int, bir LL(2) çözümleyici ilerleme iki belirteçleri kullanır) şöyle: dize ayrıştırma

Production       Input              Action
---------------------------------------------------------
S                int   int   int    Predict S -> E
E                int   int   int    Predict E -> T   E
T   E            int   int   int    Predict T -> int
int   E          int   int   int    Match int
  E                int   int        Match  
E                int   int          Predict E -> T   E
T   E            int   int          Predict T -> int
int   E          int   int          Match int
  E                int              Match  
E                int                Predict E -> T
T                int                Predict T -> int
int              int                Match int
                                    Accept

Her adımda bizim üretimde en soldaki sembol baktığımız dikkat edin. Eğer bir terminal varsa, maç, ve eğer bir terminal dışı, olacak ne kurallardan birini seçerek tahmin ediyoruz.

LR parser, iki eylem vardır:

  1. Shift: Göz için bir tampon için giriş bir sonraki token ekleyin.
  2. Azaltmak: Bir üretim tersine çevirerek bu tampon terminalleri ve nonterminals bir koleksiyon bazı Terminal dışı geri azaltmak.

Örnek olarak, (1) LR ayrıştırıcı bir ilerleme belirteci () aşağıdaki gibi aynı dize ayrıştırmak olabilir

Workspace        Input              Action
---------------------------------------------------------
                 int   int   int    Shift
int                int   int        Reduce T -> int
T                  int   int        Shift
T                int   int          Shift
T   int            int              Reduce T -> int
T   T              int              Shift
T   T            int                Shift
T   T   int                         Reduce T -> int
T   T   T                           Reduce E -> T
T   T   E                           Reduce E -> T   E
T   E                               Reduce E -> T   E
E                                   Reduce S -> E
S                                   Accept

Bahsettiğiniz iki ayrıştırma algoritmaları () LL ve LR farklı özelliklere sahip olduğu bilinmektedir. LL ayrıştırıcıları, elle yazmak daha kolay olma eğilimindedir, ama LR ayrıştırıcıları daha az güçlü ve LR ayrıştırıcıları daha gramerleri çok daha küçük bir dizi kabul. LR ayrıştırıcıları birçok tatlar (LR(0), SLR(1) ve LALR(1), LR(1), İELR(1), yeşil hat tüzüğünü(0), vb.) ve çok daha güçlü. Onlar da çok daha karmaşık vardır ve hemen hemen her zaman yacc bison gibi araçlar tarafından oluşturulur. LL ayrıştırıcıları da birçok tatlar gelir (ANTLR aracı tarafından kullanılan LL (*) de dahil olmak üzere), pratikte olsa LL(1) en yaygın kullanılan.

Eğer daha LL ve LR ayrıştırma hakkında bilgi edinmek isterseniz utanmaz bir fiş gibi, ben sadece Derleyiciler dersi bitmiş ve some handouts and lecture slides on parsing dersin web sitesinde. Eğer yararlı olacağını düşünüyorsanız hiçbirini ayrıntılı memnun olurum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • hidetake takayama

    hidetake tak

    3 Mart 2009
  • Vicious Computers

    Vicious Comp

    14 EKİM 2006