Đầu tiên, hãy cho sản phẩm của bạn một số.
1
2
3
4S → B b B một Một → ε B → εS→AaAb
S→BbBa
A→ε
B→ε
Hãy tính toán đầu tiên và theo dõi các bộ đầu tiên. Đối với các ví dụ nhỏ như thế này, sử dụng trực giác về các bộ này là đủ.
FIRST(S)={a,b}FIRST(A)={}FIRST(B)={}FOLLOW(A)={a,b}FOLLOW(B)={a,b}
Bây giờ hãy tính bảng . Theo định nghĩa, nếu chúng ta không có xung đột, ngữ pháp là .L L ( 1 )LL(1)LL(1)
a | b |
-----------
S | 1 | 2 |
A | 3 | 3 |
B | 4 | 4 |
Vì không có xung đột, ngữ pháp là .LL(1)
Bây giờ cho bảng . Đầu tiên, máy tự động .L R ( 0 )SLR(1)LR(0)
state 0S→∙AaAbS→∙BbBaA→∙B→∙A⟹1B⟹5
state 1S→A∙aAba⟹2
state 2S→Aa∙AbA→∙A⟹3
state 3S→AaA∙bb⟹4
state 4S→AaAb∙b
state 5S→B∙bBab⟹6
state 6S→Bb∙BaB→∙B⟹7
state 7S→BbB∙aa⟹8
state 8S→BbBa∙
Và sau đó là bảng (tôi giả sử có thể được theo sau bởi bất cứ thứ gì).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 | | |
Có những xung đột ở trạng thái 0, vì vậy ngữ pháp không phải là . Lưu ý rằng nếu đã được sử dụng thay vào đó, sau đó cả hai mâu thuẫn sẽ được giải quyết một cách chính xác: trong trạng thái 0 trên lookahead sẽ mất R3 và trên lookahead nó sẽ mất R4.SLR(1)LALR(1)a LALR(1)b
Điều này dẫn đến câu hỏi thú vị rằng liệu có một ngữ pháp là chứ không phải , đây là trường hợp nhưng không dễ để tìm một ví dụ về.LL(1)LALR(1)