Quy ước biểu diễn văn phạm phi ngữ cảnh (dùng chung cho các câu hỏi cùng chủ đề):
A -> X1 X2 ... Xk, trong đó các ký hiệu cách nhau đúng 1 khoảng trắng:
A là ký hiệu chưa kết thúc (nonterminal): đúng 1 chữ cái in HOA (A-Z).Xi là một token — hoặc là 1 ký hiệu chưa kết thúc (chữ in hoa đã/ sẽ xuất hiện ở vế trái sản xuất nào đó), hoặc là 1 ký hiệu kết thúc (terminal): đúng 1 ký tự bất kỳ không phải chữ in hoa (chữ thường, chữ số, hoặc ký hiệu như + * ( ) , ; ...). Đảm bảo không ký hiệu kết thúc nào là $, #, hay trùng chuỗi eps.A -> eps (đúng 1 token eps, không kèm ký hiệu nào khác).Ràng buộc bổ sung cho bài này: văn phạm đã cho được đảm bảo là LL(1) (không có ô xung đột nào trong bảng phân tích, xây dựng theo đúng quy tắc chuẩn ở các bài trước cùng chủ đề) và không đệ quy trái (trực tiếp lẫn gián tiếp), nên việc mô phỏng dưới đây luôn dừng.
Cho thêm một dòng biểu diễn chuỗi ký hiệu kết thúc đầu vào cần phân tích (các token cách nhau bởi khoảng trắng; nếu chuỗi rỗng thì dòng ghi eps). Mô phỏng bộ phân tích cú pháp LL(1) dùng ngăn xếp (stack) theo thuật toán chuẩn:
$.$): nếu t=c thì bỏ t khỏi ngăn xếp và dịch con trỏ đầu vào sang phải 1 vị trí; nếu t=c thì dừng, từ chối (REJECT).Ví dụ: Với văn phạm biểu thức số học kinh điển đã loại đệ quy trái
4
E -> T X
X -> + T X
X -> eps
T -> i
và chuỗi nhập i + i, dãy sản xuất được áp dụng là 1, 4, 2, 4, 3 rồi ACCEPT.
eps nếu chuỗi rỗng.In ra mỗi chỉ số sản xuất (1-based) đã áp dụng, theo đúng thứ tự áp dụng, mỗi số một dòng. Sau khi liệt kê hết, in thêm 1 dòng cuối cùng: ACCEPT nếu quá trình phân tích kết thúc thành công, hoặc REJECT nếu gặp lỗi (không khớp terminal hoặc ô bảng rỗng).
Ví dụ:
Đầu vào:
1
S -> a
a
Đầu ra:
1
ACCEPT
Đầu vào:
8
E -> T X
X -> + T X
X -> eps
T -> F Y
Y -> * F Y
Y -> eps
F -> ( E )
F -> i
i + i * i
Đầu ra:
1
4
8
6
2
4
8
5
8
6
3
ACCEPT
Đang tải editor...