Ta xây dựng một máy Shift-Reduce đơn giản để kiểm tra tính hợp lệ của một chuỗi dấu ngoặc gồm ba loại: tròn (), vuông [], nhọn {}, ứng với văn phạm
S→(S)∣[S]∣{S}∣SS∣ε
Máy xử lý chuỗi s từ trái sang phải bằng một ngăn xếp (stack), khởi đầu rỗng:
(, [, {): thực hiện SHIFT — đẩy ký tự đó vào đỉnh stack.), ], }):
Cho chuỗi s (có thể rỗng, chỉ gồm các ký tự trong tập (){}[]), hãy mô phỏng máy trên và xác định:
Ví dụ: với s= ([{}]), máy shift 3 lần ((, [, {), sau đó reduce 3 lần khi gặp }, ], ). Kết quả: hợp lệ, số reduce = 3, độ sâu lớn nhất = 3.
Một dòng duy nhất chứa chuỗi s (0≤∣s∣≤105), chỉ gồm các ký tự trong tập (, ), [, ], {, }. Chuỗi có thể rỗng (dòng trống).
Nếu s hợp lệ theo máy Shift-Reduce mô tả ở trên: in một dòng OK r d trong đó r là số lần reduce, d là độ sâu ngăn xếp lớn nhất (các số cách nhau đúng 1 khoảng trắng).
Nếu s không hợp lệ: in một dòng ERROR p với p là vị trí (1-indexed) xảy ra lỗi đầu tiên.
Ví dụ:
Đầu vào:
()
Đầu ra:
OK 1 1
Đầu vào:
Đầu ra:
OK 0 0
Đang tải editor...