Cho một văn phạm phi ngữ cảnh với k luật sinh (đánh số 1…k) và ký hiệu bắt đầu S. Hãy xây dựng toàn bộ tập mục chính tắc LR(0) (canonical collection of LR(0) item sets) cùng bảng chuyển trạng thái (transition/GOTO) của nó.
Văn phạm mở rộng (augmented): thêm luật sinh số 0: S′→S (S′ là ký hiệu mới, không trùng với bất kỳ ký hiệu nào trong văn phạm gốc).
Xây dựng:
(I, X) -> J.Thứ tự ký hiệu X khi xét chuyển tại mỗi trạng thái: xác định một thứ tự toàn cục cố định các ký hiệu ALLSYMBOLS bằng cách quét lần lượt các luật sinh gốc 1,2,…,k (không tính luật 0) theo đúng thứ tự cho trong input; với mỗi luật, xét lần lượt vế trái rồi các ký hiệu vế phải từ trái sang phải; ký hiệu nào gặp lần đầu tiên (và khác ε) thì được thêm vào cuối ALLSYMBOLS. Khi xét các chuyển đi ra từ một trạng thái, phải xét X theo đúng thứ tự xuất hiện trong ALLSYMBOLS (bỏ qua X nếu GOTO(I,X) không tồn tại).
Yêu cầu: in ra toàn bộ các trạng thái (theo thứ tự tạo ra 0,1,…) cùng tập mục của mỗi trạng thái, và toàn bộ các chuyển trạng thái.
A -> X1 X2 ... Xm (nếu rỗng: A -> ε). Không có ký hiệu nào trùng tên S'.STATE t, sau đó in các mục của trạng thái đó, mỗi mục một dòng i p (luật 0 ứng với S′→S), sắp xếp tăng dần theo (i,p).state X next_state, được liệt kê theo thứ tự: nhóm theo state tăng dần (đúng thứ tự trạng thái được tạo ra), trong mỗi trạng thái theo đúng thứ tự ALLSYMBOLS đã mô tả ở trên.Ví dụ:
Đầu vào:
6 E
E -> E + T
E -> T
T -> T * F
T -> F
F -> ( E )
F -> id
Đầu ra:
12
STATE 0
0 0
1 0
2 0
3 0
4 0
5 0
6 0
STATE 1
0 1
1 1
STATE 2
2 1
3 1
STATE 3
4 1
STATE 4
1 0
2 0
3 0
4 0
5 0
5 1
6 0
STATE 5
6 1
STATE 6
1 2
3 0
4 0
5 0
6 0
STATE 7
3 2
5 0
6 0
STATE 8
1 1
5 2
STATE 9
1 3
3 1
STATE 10
3 3
STATE 11
5 3
22
0 E 1
0 T 2
0 F 3
0 ( 4
0 id 5
1 + 6
2 * 7
4 E 8
4 T 2
4 F 3
4 ( 4
4 id 5
6 T 9
6 F 3
6 ( 4
6 id 5
7 F 10
7 ( 4
7 id 5
8 + 6
8 ) 11
9 * 7
Đầu vào:
1 S
S -> a
Đầu ra:
3
STATE 0
0 0
1 0
STATE 1
0 1
STATE 2
1 1
2
0 S 1
0 a 2
Đang tải editor...