Thuật toán Thompson construction xây dựng NFA từ biểu thức chính quy bằng cách ghép các "mảnh" NFA (fragment) đệ quy theo cấu trúc cú pháp của biểu thức. Hãy tính tổng số trạng thái của NFA thu được — chỉ dựa trên quy tắc đếm, không cần dựng tường minh đồ thị NFA.
Bảng chữ cái gồm các ký hiệu là chữ cái thường (a-z) hoặc chữ số (0-9). Biểu thức chính quy R được xây dựng từ các ký hiệu đó bằng: phép nối liền kề (concatenation, viết các biểu thức con liền nhau), phép hợp | (độ ưu tiên thấp nhất, kết hợp trái), và các toán tử hậu tố *, +, ? (độ ưu tiên cao nhất, áp dụng cho biểu thức con ngay trước nó, có thể áp dụng liên tiếp nhiều lần); dấu ngoặc đơn ( ) dùng để nhóm. R luôn hợp lệ về cú pháp (ngoặc cân xứng, không có toán hạng rỗng, không có khoảng trắng).
Quy tắc đếm số trạng thái theo Thompson construction chuẩn (như trình bày trong các giáo trình trình biên dịch):
Ví dụ (biểu thức kinh điển trong giáo trình): với R= (a|b)*abb, NFA theo Thompson construction có đúng 11 trạng thái.
Một dòng duy nhất chứa biểu thức chính quy R hợp lệ, độ dài từ 1 đến 200 ký tự, không chứa khoảng trắng.
In ra một số nguyên duy nhất là tổng số trạng thái của NFA theo quy tắc đã nêu ở đề bài.
Với R= (a|b)*abb, kết quả in ra là:
11
Ví dụ:
Đầu vào:
(a|b)*abb
Đầu ra:
11
Đầu vào:
a
Đầu ra:
2
Đang tải editor...