Cho văn phạm phi ngữ cảnh, dựng bộ tự động LR(0) chính tắc (như mô tả ở bài "Số trạng thái của bộ tự động LR(0) chính tắc": tăng cường S′→S, đánh số trạng thái bằng BFS, duyệt ký hiệu theo thứ tự từ điển) và tính tập FOLLOW cho từng non-terminal theo thuật toán chuẩn (coi ký hiệu kết thúc chuỗi là $, FOLLOW(S) chứa $).
Với mỗi trạng thái Ii của bộ tự động, gọi Ii có XUNG ĐỘT nếu:
(Mục hoàn chỉnh có LHS=S′ ứng với hành động ACCEPT, không tính là reduce, bỏ qua khi xét xung đột.)
Văn phạm là SLR(1) khi và chỉ khi KHÔNG trạng thái nào có xung đột.
Ví dụ: văn phạm S -> L = R, S -> R, L -> * R, L -> id, R -> L KHÔNG phải SLR(1) — trạng thái chứa mục R -> L . có xung đột shift/reduce trên ký hiệu =.
A -> X1 X2 ... Xk (vế phải rỗng thì A ->). Ký hiệu bắt đầu bằng chữ hoa là non-terminal, còn lại là terminal. Đảm bảo văn phạm không chứa ký hiệu S' hay $.SLR(1).NOT SLR(1), dòng thứ hai in danh sách CHỈ SỐ các trạng thái có xung đột (đánh số theo đúng quy tắc BFS như bài dựng bộ tự động LR(0)), TĂNG DẦN, cách nhau đúng 1 dấu cách.Ví dụ:
Đầu vào:
6
E -> E + T
E -> T
T -> T * F
T -> F
F -> ( E )
F -> id
Đầu ra:
SLR(1)
Đầu vào:
5
S -> L = R
S -> R
L -> * R
L -> id
R -> L
Đầu ra:
NOT SLR(1)
2
Đang tải editor...