Trong lý thuyết phân tích LR, một mục LR(0) (LR(0) item) là một luật sinh có đánh dấu vị trí đọc bằng một dấu chấm . ở đâu đó trong vế phải. Ví dụ mục A -> a . B c nghĩa là đã đọc được a, tiếp theo bộ phân tích cần xử lý B rồi c.
Cho một danh sách mục LR(0) (vế trái mỗi luật sinh là một chữ cái in hoa A-Z — ký hiệu chưa kết thúc; mọi token khác trong vế phải, ngoại trừ dấu chấm ., đều là ký hiệu kết thúc trừ khi bản thân nó cũng là một chữ cái in hoa đơn), hãy phân loại từng mục theo quy tắc:
Ví dụ: mục E -> E + . T có ký hiệu ngay sau dấu chấm là T (chữ in hoa) → GOTO. Mục T -> id . có dấu chấm ở cuối → REDUCE. Mục F -> . ( E ) có ký hiệu ngay sau dấu chấm là ( (không phải chữ in hoa) → SHIFT.
Dòng đầu là số nguyên n (1≤n≤200) — số mục cần phân loại. n dòng tiếp theo, mỗi dòng là một mục LR(0) dạng A -> t1 t2 ... tm, trong đó A là một chữ cái in hoa, -> là ký hiệu phân cách, và đúng một trong các token t1,…,tm là dấu chấm . (các token cách nhau bởi đúng một khoảng trắng). Vế phải có thể chỉ chứa dấu chấm (mục A -> . ứng với luật sinh rỗng).
In ra n dòng, dòng thứ i là loại của mục thứ i: REDUCE, GOTO, hoặc SHIFT.
Ví dụ:
Đầu vào:
1
A -> a . B c
Đầu ra:
GOTO
Đầu vào:
4
S -> . E
E -> E + . T
T -> id .
S -> .
Đầu ra:
GOTO
GOTO
REDUCE
REDUCE
Đang tải editor...