Khi xây dựng bảng phân tích LL(1) M[A,a] từ các tập SELECT (xem định nghĩa SELECT(A→α)=(FIRST(α)∖{ε})∪FOLLOW(A)[ε∈FIRST(α)]), một Ô M[A,a] được gọi là XUNG ĐỘT (conflict) nếu có TỪ HAI luật sinh A→αi trở lên cùng thỏa a∈SELECT(A→αi) — khi đó bộ phân tích không thể quyết định dùng luật sinh nào chỉ dựa vào kí hiệu tra trước a, và văn phạm không phải LL(1).
Cho văn phạm G gồm n luật sinh được đánh số 1,…,n theo thứ tự trong input, hãy tìm TẤT CẢ các ô xung đột của bảng LL(1): với mỗi kí hiệu chưa kết thúc A và kí hiệu kết thúc a (kể cả $) sao cho ô M[A,a] có từ 2 luật sinh trở lên, báo cáo cặp (A,a) cùng danh sách CHỈ SỐ (1-based, theo thứ tự input) của các luật sinh gây xung đột tại đó.
Ví dụ: với văn phạm dangling-else
S -> if E then S S1
S1 -> else S
S1 -> eps
E -> id
ô M[S1,else] có cả luật sinh 2 (S1→else S, vì else ∈FIRST của vế phải) và luật sinh 3 (S1→ε, vì else ∈FOLLOW(S1)) — đây là xung đột duy nhất.
A -> X1 X2 ... Xk (giữa A và ->, giữa -> và X1, giữa các Xi luôn có khoảng trắng); A là kí hiệu ở vế trái, X1,…,Xk là các kí hiệu ở vế phải. Nếu vế phải là chuỗi rỗng ε, dòng có dạng A -> eps (đúng một kí hiệu eps).eps) là kí hiệu KẾT THÚC (terminal). Kí hiệu bắt đầu (start symbol) của văn phạm là vế trái của luật sinh ở dòng đầu tiên (dòng thứ hai của input). Có thể có nhiều luật sinh cùng vế trái, nằm ở các dòng khác nhau, không nhất thiết liền kề.$.Nếu văn phạm KHÔNG có ô xung đột nào (là LL(1)), in ra đúng một dòng LL(1).
Ngược lại, dòng đầu tiên in số nguyên C — tổng số ô xung đột. C dòng tiếp theo, mỗi dòng ứng với một ô xung đột, có dạng A a: i1 i2 ... trong đó A là kí hiệu chưa kết thúc, a là kí hiệu kết thúc (hoặc $) gây xung đột, và i1<i2<… là chỉ số (tăng dần) của các luật sinh xung đột tại ô đó, cách nhau đúng một khoảng trắng. Các dòng xung đột được sắp xếp tăng dần trước hết theo tên A (thứ tự từ điển), sau đó theo a (thứ tự từ điển, riêng $ luôn xếp SAU cùng mọi kí hiệu kết thúc khác của cùng một A).
Ví dụ:
Đầu vào:
4
S -> if E then S S1
S1 -> else S
S1 -> eps
E -> id
Đầu ra:
1
S1 else: 2 3
Đầu vào:
4
E -> T X
X -> + T X
X -> eps
T -> id
Đầu ra:
LL(1)
Đang tải editor...