2009-11-17 26 views
6

Có ai biết nếu Python (bất kỳ phiên bản nào) đã sử dụng NFA (Tự động xác định hữu hạn) để đánh giá các biểu thức thông thường hoặc sử dụng một số cơ chế khác không? Vui lòng cung cấp liên kết/tham chiếu nếu có.Python có sử dụng NFA để đánh giá biểu thức chính quy trong mô-đun không?

+1

Vì hầu hết động cơ RE hiện nay cho phép ngôn ngữ không phải thường xuyên để được xuất hiện Tôi nghi ngờ bất kỳ động cơ RE hiện đại nào thực sự vẫn sử dụng NFA hoặc DFA nữa. – Joey

+0

Vâng, vì một công cụ RE có thể xác định một tập hợp con của RE là thường xuyên, và chúng được sử dụng phổ biến, nó có ý nghĩa để tối ưu hóa cho những tình huống đó. Vì vậy, hoàn toàn có thể là họ _sometimes_ sử dụng NFA hoặc DFA. – MSalters

Trả lời

5

NFA.

Mastering Regular Expressions Xem Friedl của, 3rd edition, chương 4 - bảng 4-1, trang 145.

Google cuốn sách có a preview với nó.

+0

Tham khảo tốt. Cảm ơn. – Johan

+0

Bạn đang chào đón Johan. –

4

này nên mất ít hơn một ms trên DFA:

$ time python3 -c 'import re; re.match("a?"*25+"a"*25, "a"*25)' 
real 0m7.273s 

đổi 25 với 100 và nó sẽ không chấm dứt cho một đời.

Sau đây là cách nó trông giống trên DFA (grep):

$ time echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |grep "a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
real 0m0.063s 

Có một cuộc thảo luận vĩ đại của chủ đề này tại http://swtch.com/~rsc/regexp/regexp1.html

Các vấn đề liên quan