Ngữ pháp LL (1) này thế nào?


11

Đây là một câu hỏi từ Sách Rồng. Đây là ngữ pháp:

Một ε B εSAaAbBbBa
Aε
Bε

Câu hỏi hỏi làm thế nào để chỉ ra rằng đó là LL (1) chứ không phải là SLR (1).

Để chứng minh rằng đó là LL (1), tôi đã thử xây dựng bảng phân tích cú pháp của nó, nhưng tôi nhận được nhiều sản phẩm trong một ô, đó là mâu thuẫn.

Xin cho biết LL này thế nào (1), và làm thế nào để chứng minh điều đó?


6
Tôi không quen thuộc lắm với ngữ pháp, nhưng dường như ngôn ngữ của ngữ pháp này là hữu hạn. L={ab,ba}
Nejc

@Nejc: Vâng, có vẻ như vậy!
Vinayak Garg

Câu trả lời:


11

Đầ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 εSAaAb
SBbBa
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 0SAaAbSBbBaABA1B5
state 1SAaAba2
state 2SAaAbAA3
state 3SAaAbb4
state 4SAaAbb
state 5SBbBab6
state 6SBbBaBB7
state 7SBbBaa8
state 8SBbBa

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)


Cảm ơn! Tôi đã xây dựng First & Follow một cách chính xác, nhưng tôi đã phạm sai lầm khi xây dựng bảng.
Vinayak Garg

10

Nếu bạn không được hỏi, bạn không phải xây dựng bảng LL (1) để chứng minh rằng đó là ngữ pháp LL (1). Bạn chỉ cần tính toán các bộ FIRST / FOLLOW như Alex đã làm:

FIRST(S)=a,bFIRST(A)=εFIRST(B)=εFOLLOW(A)=a,bFOLLOW(B)=a,b

Và sau đó, theo định nghĩa, một ngữ pháp LL (1) phải:

  1. Nếu và là hai quy tắc khác nhau của ngữ pháp, thì đó phải là . Do đó, hai bộ không có bất kỳ yếu tố phổ biến.Một b FIRST ( một ) FIRST ( b ) = AaAbFIRST(a)FIRST(b)=
  2. Nếu với bất kỳ ký hiệu không phải đầu cuối nào bạn có , thì đó phải là . Do đó, nếu không có sản xuất nào cho biểu tượng không đầu cuối, thì bộ FIRST và FOLLOW không thể có bất kỳ yếu tố chung nào.alpha * ε FIRST ( Một ) FOLLOW ( Một ) = AΑεFIRST(A)FOLLOW(A)=

Vì vậy, đối với ngữ pháp đã cho:

  1. Chúng tôi có kể từ trong khi và họ không có bất kỳ yếu tố chung nào.FIRST(AaAb)FIRST(BbBa)=FIRST(AaAb)={a}FIRST(BbBa)={b}
  2. FIRST ( Một ) = { một , b } THEO ( Một ) = FIRST ( B ) FOLLOW ( B ) = FIRST(A)FOLLOWA)= vì trong khi , và bây giờ vì trong khi .FIRST(A)={a,b}FOLLOW(A)=FIRST(B)FOLLOW(B)=SAU ( B ) = { a , b }FIRST(B)={ε}FOLLOW(B)={a,b}

Đối với phân tích máy ảnh DSLR (1) tôi nghĩ rằng nó là hoàn hảo!


Chào mừng bạn Để cải thiện câu trả lời này, tại sao bạn không áp dụng những gì bạn nêu vào ngữ pháp trong tay?
Raphael

Hạnh phúc khi được ở đây!! Trả lời yêu cầu của bạn và tôi nghĩ rằng tôi đã giải thích cặn kẽ!
Ethan

Cảm ơn! Lưu ý rằng chúng ta có thể sử dụng LaTeX ở đây, như tôi đã chỉnh sửa cho môn toán của bạn.
Raphael

Ồ cảm ơn nhé! đây là một lời giải thích tuyệt vời Nhưng tôi nghĩ rằng có một số sai lầm trong ứng dụng. Không phải là đầu tiên (A) = {epsilon}? Tôi nghĩ rằng bạn đã trao đổi ĐẦU TIÊN và SAU.
Vinayak Garg

FIRST (A) thực sự là epsilon nhưng vì bạn đang muốn tính toán tập FIRST của toàn bộ thành viên bên phải, A -> chỉ cho thấy rằng chúng ta có một sản phẩm trống và ký hiệu đầu cuối đầu tiên bạn nhìn thấy (và do đó là bộ FIRST của nó) ký hiệu đầu cuối a. Hy vọng điều này sẽ giúp!
Ethan

0

Tìm kiếm một điều kiện đủ để tạo ra một ngữ pháp LL (1) (gợi ý: xem các bộ FIRST).

Tìm kiếm một điều kiện cần thiết mà tất cả các ngữ pháp của máy ảnh DSLR (1) phải đáp ứng (gợi ý: xem các bộ SAU).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.