Automat LALR(1) được xây dựng từ automat LR(1) chính tắc bằng cách hợp nhất (merge) các trạng thái có cùng "lõi" (core) — tức cùng tập mục LR(0) khi bỏ qua lookahead — thành một trạng thái duy nhất, với tập lookahead của mỗi mục là hợp các tập lookahead tương ứng từ các trạng thái được hợp nhất.
Việc hợp nhất này đôi khi làm xuất hiện xung đột reduce/reduce mới vốn không tồn tại ở từng trạng thái LR(1) riêng lẻ: nếu sau khi hợp nhất, có hai mục đầy đủ (dạng A→α⋅) thuộc hai sản xuất khác nhau mà tập lookahead (đã hợp) của chúng giao nhau khác rỗng, đó là một xung đột reduce/reduce của automat LALR(1) (dù trước khi hợp nhất, tại mỗi trạng thái LR(1) gốc có thể hoàn toàn không có xung đột).
Cho một tập các trạng thái LR(1) (mỗi trạng thái là một tập mục kèm lookahead, cho sẵn — không cần tính đóng), hãy:
Ví dụ kinh điển: với văn phạm S→aAd∣bAe∣aBe∣bBd, A→c, B→c, hai trạng thái LR(1) chính tắc chứa cùng lõi {A→c⋅, B→c⋅} nhưng với lookahead {d}/{e} ở trạng thái này và {e}/{d} ở trạng thái kia (không xung đột ở từng trạng thái riêng). Khi LALR(1) hợp nhất hai trạng thái đó, cả hai mục đều nhận lookahead {d,e} — sinh ra xung đột reduce/reduce trên {d,e}.
A -> β . γ | a1 a2 ... (định dạng giống hệt bài tính closure LR(1) ở trên: mục LR(0) rồi tới dấu | rồi tới danh sách lookahead cách nhau khoảng trắng). Nếu cùng một mục lõi xuất hiện nhiều lần trong cùng một trạng thái, lookahead của chúng được hợp lại.Nhom: i1,i2,... — danh sách chỉ số (1-based, tăng dần, cách nhau dấu phẩy không khoảng trắng) của các trạng thái gốc thuộc nhóm này.REDUCE-REDUCE: <mục A> // <mục B> | t1 t2 ... trong đó <mục A> và <mục B> là hai mục dạng A -> β . (mục A đứng trước theo thứ tự so sánh chuỗi), và t1 t2 ... là các ký hiệu giao nhau, sắp xếp tăng dần theo thứ tự từ điển (mã ASCII), cách nhau khoảng trắng. Các dòng xung đột được sắp xếp tăng dần theo <mục A> rồi <mục B>.OK.Ví dụ:
Đầu vào:
14
5
S -> . a A d | $
S -> . a B e | $
S -> . b A e | $
S -> . b B d | $
S' -> . S | $
1
S' -> S . | $
4
A -> . c | d
B -> . c | e
S -> a . A d | $
S -> a . B e | $
4
A -> . c | e
B -> . c | d
S -> b . A e | $
S -> b . B d | $
2
A -> c . | d
B -> c . | e
1
S -> a B . e | $
1
S -> a A . d | $
2
A -> c . | e
B -> c . | d
1
S -> b B . d | $
1
S -> b A . e | $
1
S -> a B e . | $
1
S -> a A d . | $
1
S -> b B d . | $
1
S -> b A e . | $
Đầu ra:
13
Nhom: 1
OK
Nhom: 2
OK
Nhom: 3
OK
Nhom: 4
OK
Nhom: 5,8
REDUCE-REDUCE: A -> c . // B -> c . | d e
Nhom: 6
OK
Nhom: 7
OK
Nhom: 9
OK
Nhom: 10
OK
Nhom: 11
OK
Nhom: 12
OK
Nhom: 13
OK
Nhom: 14
OK
Đầu vào:
2
2
X -> p . | a
Y -> q . | b
2
X -> p . | a
Y -> q . | c
Đầu ra:
1
Nhom: 1,2
OK
Đang tải editor...