Hãy bắt đầu bằng việc xây dựng LR bộ (1) configurating cho ngữ pháp:
(1)
S' -> .S [$]
S -> .aEa [$]
S -> .aFb [$]
S -> .bFa [$]
S -> .bEb [$]
(2)
S' -> S. [$]
(3)
S -> a.Ea [$]
S -> a.Fb [$]
E -> .e [a]
F -> .e [b]
(4)
E -> e. [a]
F -> e. [b]
(5)
S -> aE.a [$]
(6)
S -> aEa. [$]
(7)
S -> aF.b [$]
(8)
S -> aFb. [$]
(9)
S -> b.Fa [$]
S -> b.Eb [$]
E -> .e [b]
F -> .e [a]
(10)
E -> e. [b]
F -> e. [a]
(11)
S -> bF.a [$]
(12)
S -> bFa. [$]
(13)
S -> bE.b [$]
(14)
S -> bEb. [$]
Nếu yo thông báo u'll, tiểu bang (4) và (10) có lõi tương tự, vì vậy trong LALR (1) automaton chúng tôi muốn kết hợp chúng với nhau để tạo trạng thái mới
(4, 10)
E -> e. [a, b]
F -> e. [a, b]
Mà bây giờ có một giảm/giảm xung đột trong nó (tất cả các xung đột trong LALR (1) mà không có trong LR (1) phân tích cú pháp được giảm/giảm, bằng cách này). Điều này giải thích tại sao ngữ pháp là LR (1) nhưng không phải là LALR (1).
Hy vọng điều này sẽ hữu ích!
tốt, bạn đã giúp tôi rất nhiều, tôi nhận ra một sai lầm trong một phân tích trong pdf của mình, nhưng dù sao, tôi thấy điều này [ở đây] (http://compilers.iecc.com/comparch/article/95- 02-053) và tôi muốn chứng minh điều đó với bản thân mình, kết quả của tôi cũng là một ngữ pháp LARL (1) hợp lệ, vì vậy tôi đoán có lỗi trên trang web đó? tôi có đúng không –
Tôi đoán đó sẽ là một sai lầm trên trang web, vì chúng tôi vừa xây dựng hệ thống tự động LALR và có 'bison' kiểm tra nó cho chúng tôi. Tôi cho rằng mục đích là tìm một LALR nhưng không phải là ngữ pháp của SLR. – templatetypedef
ok, btw cũng nhờ công cụ 'bison' :) –