Bu dilbilgisi LL (1) nasıl?


12

Bu Ejderha Kitabından bir soru. Bu dilbilgisi:

SAaAbBbBa
Aε
Bε

Soru, bunun LL (1) olduğunu ancak SLR (1) olmadığını nasıl göstereceğini soruyor.

LL (1) olduğunu kanıtlamak için, ayrıştırma tablosunu oluşturmaya çalıştım, ama bir çelişki olan bir hücrede birden fazla yapım alıyorum.

Lütfen bu LL'nin (1) nasıl olduğunu ve nasıl kanıtlanacağını söyle?


6
Ben dilbilgisi ile çok yakın değilim, ama bu dilbilgisinin dili sonlu gibi görünüyor. L={ab,ba}
Nejc

@Nejc: Evet öyle görünüyor!
Vinayak Garg

Yanıtlar:


11

İlk olarak yapımlarınıza bir numara verelim.

1 2 3 4Sbirbirbirb
SBbBbir
birε
Bε

İlkini hesaplayalım ve önce setleri takip edelim. Bu gibi küçük örnekler için, bu kümeler hakkında sezgisel kullanım yeterlidir.

FbenR,ST(S)={bir,b}FbenR,ST(bir)={}FbenR,ST(B)={}FÖLLÖW(bir)={bir,b}FÖLLÖW(B)={bir,b}

Şimdi tablosunu hesaplayalım . Tanım gereği, anlaşmazlıklar olmazsa dilbilgisi .LL(1)LL(1)

    a | b |
-----------
S | 1 | 2 |
A | 3 | 3 |
B | 4 | 4 |

Çatışma olmadığı için dilbilgisi .LL(1)

Şimdi tablosu için. İlk olarak, otomatı.SLR,(1)LR,(0)

devlet 0SbirbirbirbSBbBbirbirBbir1B5
devlet 1Sbirbirbirbbir2
devlet 2Sbirbirbirbbirbir3
devlet 3Sbirbirbirbb4
devlet 4Sbirbirbirbb
devlet 5SBbBbirb6
devlet 6SBbBbirBB7
devlet 7SBbBbirbir8
devlet 8SBbBbir

Ve sonra tablosu ( herhangi bir şey izleyebileceğini varsayıyorum ).SLR,(1)S

    a     | b     | A | B |
---------------------------
0 | R3/R4 | R3/R4 | 1 | 5 |
1 | S2    |       |   |   |
2 | R3    | R3    | 3 |   |
3 |       | S4    |   |   |
4 | R1    | R1    |   |   |
5 |       | S4    |   |   |
6 | R4    | R4    |   | 7 |
7 | S8    |       |   |   |
8 | R2    | R2    |   |   |

Durum 0'da çakışmalar vardır, bu nedenle dilbilgisi değildir . Eğer Not yerine kullanılır, daha sonra her iki çakışma doğru çözüleceğini: 0 durumunda ileri yönlü üzerinde R3 alacağını ve lookahead ilgili o R4 alacaktı.SLR,(1)LALR(1)bir LbirLR,(1)b

Bu, ancak olmayan bir dilbilgisi olup olmadığına dair ilginç soruya neden olur, ancak durum budur, ancak bir örnek bulmak kolay değildir.LL(1)LbirLR,(1)


Teşekkürler! İlk ve Takip'i doğru bir şekilde oluşturmuştum, ancak masayı oluştururken bir hata yaptım.
Vinayak Garg

10

Sizden istenmezse, LL (1) dilbilgisi olduğunu kanıtlamak için LL (1) tablosunu oluşturmanız gerekmez. İLK / TAKİP setlerini Alex'in yaptığı gibi hesaplıyorsunuz:

İLK(S)=bir,bİLK(bir)=εİLK(B)=εTAKİP ET(bir)=bir,bTAKİP ET(B)=bir,b

Ve sonra, tanım gereği bir LL (1) dilbilgisi şunları yapmak zorundadır:

  1. Eğer ve gramer iki farklı kurallar, o zaman bu olmalıdır . Bu nedenle, iki setin ortak bir unsuru yoktur.birbirbirbİLK(bir)İLK(b)=
  2. Terminal olmayan herhangi bir sembolü için , bu . Bu nedenle, terminal olmayan bir sembol için sıfır üretim varsa, FIRST ve FOLLOW kümelerinin ortak bir öğesi olamaz.birΑ*εİLK(bir)TAKİP ET(bir)=

Yani, verilen dilbilgisi için:

  1. Biz yana ise ve ortak öğeleri yoktur.İLK(birbirbirb)İLK(BbBbir)=İLK(birbirbirb)={bir}İLK(BbBbir)={b}
  2. İLK(bir)TAKİP ETbir)= yana ise , ve şimdi yana ise .İLK(bir)={bir,b}TAKİP ET(bir)=İLK(B)TAKİP ET(B)=İLK(B)={ε}TAKİP ET(B)={bir,b}

SLR (1) analizine gelince, bunun kusursuz olduğunu düşünüyorum!


Hoşgeldiniz! Bu cevabı iyileştirmek için, belirttiğiniz şeyi neden dilbilgisine uygulamıyorsunuz?
Raphael

Burada olduğum için mutluyum !! İsteğinizi yanıtladı ve kapsamlı bir açıklama yaptığımı düşünüyorum!
Ethan

Teşekkürler! Matematik için düzenlediğim gibi burada LaTeX'i kullanabileceğimizi unutmayın.
Raphael

Vay canına teşekkürler! bu harika bir açıklama. Ancak uygulamada bir hata olduğunu düşünüyorum. İlk (A) = {epsilon} değil mi? Sanırım İLK ve TAKİP EDİN.
Vinayak Garg

FIRST (A) gerçekten epsilon'dur, ancak sağ üyenin İLK kümesini hesaplamaya çalıştığınız için, A -> ε sadece boş bir üretime sahip olduğumuzu ve gördüğünüz ilk terminal sembolünün (ve bu nedenle İLK kümesinin) olduğunu gösterir. terminal sembolü a. Umarım bu yardımcı oldu!
Ethan

0

Bir dilbilgisi LL (1) yapan yeterli bir koşul arayın (ipucu: İLK setlerine bakın).

Tüm SLR (1) gramerlerinin karşılaması gereken bir koşulu arayın (ipucu: TAKİP setlerine bakın).

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.