Đối với một bối cảnh cụ ngôn ngữ miễn phí G, chúng ta gọi là không thuộc đầu cuối nullable nếu A i → * ε , tức là chúng ta có thể lấy được các chuỗi rỗng từ A i sau khi áp dụng một số hữu hạn các tác phẩm.
Có một thuật toán đơn giản để xác định các phần tử ngữ pháp nào là không thể tìm thấy ở đây :
Chúng tôi bắt đầu bằng cách xem xét tất cả các nonterminals là không thể rỗng. Chúng tôi đánh dấu tất cả như nullable nếu có một sản xuất A i → ε . Chúng tôi sau đó lặp qua tất cả các tác phẩm khác Một i → B 1 B 2 ... B k trừ tác phẩm với một thiết bị đầu cuối trong họ, và đánh dấu A i như nullable nếu tất cả B i là nullable. Chúng tôi tiếp tục thực hiện vòng lặp này cho đến khi chúng tôi hoàn thành một vòng lặp mà không đánh dấu bất kỳ số phút nào là không thể.
Vấn đề của tôi với thuật toán này là nó có thời gian chạy : trường hợp xấu nhất là ví dụ A 1 → A 2 , A 2 → A 3 , A 3 → A 4 , ..., A n - 1 → Một n , A n → ε .
Có một thuật toán cho vấn đề này với thời gian chạy tốt hơn không?