Cho một văn phạm phi ngữ cảnh (CFG) với ký hiệu bắt đầu S.
Quy ước biểu diễn văn phạm phi ngữ cảnh (CFG) dùng chung cho đề này:
A-Z).(, ), +, *, id, num, ...) là ký hiệu kết thúc (terminal); terminal có thể dài nhiều ký tự nhưng không chứa khoảng trắng.e ở vế phải nghĩa là luật sinh sinh ra chuỗi rỗng ε (ví dụ A -> e).$ khi cần dùng tới FOLLOW.Tập FOLLOW(A) của một ký hiệu chưa kết thúc A được định nghĩa như thường lệ: tập các ký hiệu kết thúc có thể xuất hiện ngay sau A trong một dạng câu nào đó dẫn xuất từ S; riêng FOLLOW(S) luôn chứa ký hiệu kết thúc đầu vào $.
Hãy xác định ký hiệu chưa kết thúc A∗ có ∣FOLLOW(A∗)∣ (số lượng phần tử, tính cả $ nếu có) lớn nhất. Nếu có nhiều ký hiệu cùng đạt giá trị lớn nhất, chọn ký hiệu có tên nhỏ hơn theo thứ tự từ điển (so sánh chuỗi thông thường).
Với văn phạm biểu thức số học kinh điển, có thể tính được FOLLOW(F) = \{*, +, ), \}$ với 4 phần tử — nhiều hơn mọi ký hiệu chưa kết thúc khác — nên đáp án là F 4.
A -> X1 X2 ... Xk hoặc A -> e.Quy ước biểu diễn văn phạm phi ngữ cảnh (CFG) dùng chung cho đề này:
A-Z).(, ), +, *, id, num, ...) là ký hiệu kết thúc (terminal); terminal có thể dài nhiều ký tự nhưng không chứa khoảng trắng.e ở vế phải nghĩa là luật sinh sinh ra chuỗi rỗng ε (ví dụ A -> e).$ khi cần dùng tới FOLLOW.In ra đúng một dòng dạng A k, trong đó A là tên ký hiệu chưa kết thúc có ∣FOLLOW(A)∣ lớn nhất (ưu tiên tên nhỏ hơn theo từ điển nếu bằng nhau), và k là giá trị ∣FOLLOW(A)∣ tương ứng.
Ví dụ:
Đầu vào:
S
1
S -> a
Đầu ra:
S 1
Đầu vào:
E
8
E -> T X
X -> + T X
X -> e
T -> F Y
Y -> * F Y
Y -> e
F -> ( E )
F -> id
Đầu ra:
F 4
Đang tải editor...