Cho một văn phạm phi ngữ cảnh với k luật sinh và ký hiệu bắt đầu S (định dạng như các bài trên). Hãy tự động xây dựng bảng phân tích SLR(1) rồi dùng bảng đó để mô phỏng phân tích cú pháp (shift-reduce) một chuỗi token cho trước.
Các bước xây dựng (tương tự lý thuyết SLR chuẩn, thực hiện tự động, không cho sẵn trong input):
Mô phỏng phân tích: dùng ngăn xếp trạng thái, bắt đầu [0], đọc chuỗi input nối thêm $ ở cuối, áp dụng ACTION/GOTO theo đúng thuật toán LR chuẩn (shift, reduce dùng GOTO trên đỉnh stack sau khi pop, accept khi gặp hành động accept). Nếu tại một bước không có hành động nào trong bảng ứng với (trạng thái hiện tại, ký hiệu input hiện tại) → chuỗi bị từ chối (REJECT).
Yêu cầu: nếu văn phạm không phải SLR(1) thì báo ngay; nếu là SLR(1), mô phỏng phân tích chuỗi input đã cho và cho biết kết quả.
A -> X1 X2 ... Xm (nếu rỗng: A -> ε).$ không xuất hiện trong dòng này (được chương trình tự thêm vào cuối).Nếu văn phạm không phải SLR(1) (có xung đột khi xây bảng): in đúng một dòng NOT-SLR.
Ngược lại, mô phỏng phân tích chuỗi input:
REJECT.ACCEPT, dòng thứ hai là dãy số hiệu các luật sinh đã được reduce, theo đúng thứ tự thực hiện, cách nhau bởi 1 khoảng trắng; nếu không có reduce nào (dãy rỗng) thì in NONE.Ví dụ:
Đầu vào:
6 E
E -> E + T
E -> T
T -> T * F
T -> F
F -> ( E )
F -> id
3
id + id
Đầu ra:
ACCEPT
6 4 2 6 4 1
Đầu vào:
6 E
E -> E + T
E -> T
T -> T * F
T -> F
F -> ( E )
F -> id
7
id + id * id
Đầu ra:
ACCEPT
6 4 2 6 4 6 3 1
Đang tải editor...