REGEXP được triển khai trong các ngôn ngữ lập trình như thế nào?


7

Có một bài viết tổng quát tốt về việc giải thích hoặc biên dịch REGEXP trong các ngôn ngữ lập trình để khớp mẫu, có hoặc không có biến? Tôi không tìm kiếm một lời giải thích nhanh về việc xây dựng các DFA, nhưng cho một bài viết thực sự về cách nó thực sự được thực hiện trong việc thực hiện ngôn ngữ lập trình, và những gì được coi là đơn giản hoặc khó khăn. Tôi hy vọng sự khác biệt giữa các ngôn ngữ có thể có một không chính xác. Một bài viết chính thức về cách triển khai REGEXP cũng hữu ích :-)


Rõ ràng đây là một câu hỏi cũ, nhưng tôi nghĩ rằng tôi đã thêm rằng đó là một thay thế cho công trình xây dựng của Thompson, tôi khá thích ý tưởng về công trình Berry-Sethi, sử dụng chính xác một trạng thái hơn regex có các ký hiệu đầu cuối . Xem cách kết hợp các NFA được thực hiện bằng cách tìm các trạng thái có thể tiếp cận nhanh chóng, đây gần như là một điểm câm. Có lẽ thiếuε-transitions là hấp dẫn. Tài liệu tham khảo duy nhất tôi có thể cung cấp là những slide này .
G. Bạch

@ G.Bach Không có câu hỏi nào cũ, trừ khi những tiến bộ kỹ thuật đã làm cho chủ đề trở nên lỗi thời. AFAIK, đây cũng có thể là một câu trả lời, nếu bạn thực sự có thể liên hệ nó với việc triển khai REGEXP trong các ngôn ngữ lập trình. Nó có thể là sử dụng hiện tại, hoặc sử dụng được đề xuất. Các phiên bản ngôn ngữ lập trình của REGEXP có nhiều loại chuông và còi có thể tương thích hoặc không tương thích với phương pháp Berry-Sethi. Tôi nghĩ rằng cấu trúc Berry-Sethi được sử dụng để triển khai ngôn ngữ Esterel, nhưng không dành cho REGEXP, AFAIK.
babou

Tôi thực sự không nghĩ rằng một câu trả lời riêng biệt là có công, nó có ý nghĩa hơn như là một nhận xét rằng "có những công trình khác ngoài câu trả lời có hiệu quả tương tự"; Tôi thực sự không biết nó được sử dụng ở đâu trong bất kỳ công cụ nào, tôi chỉ thích ý tưởng về nó khi tôi biết về nó, thực tế là trong bối cảnh xây dựng mộtεNFA miễn phí chấp nhận ngôn ngữ của một biểu thức thông thường.
G. Bạch

@ G.Bach Tôi nghĩ rằng nó có thể hữu ích để nhắc nhở mọi người về các biến thể thú vị. Nhưng biến nó thành một câu trả lời thích hợp cho câu hỏi khi được hỏi thực sự có thể là một công việc. Dù sao cũng cảm ơn bạn.
babou

Câu trả lời:


5

Tôi tin rằng hầu hết các trình so khớp biểu thức chính quy được giải thích đều bắt đầu bằng thuật toán xây dựng của Thompson để biến biểu thức chính quy thành một automata hữu hạn không xác định. Bài báo mô tả lần đầu tiên là: Ken Thompson, "Kỹ thuật lập trình: Thuật toán tìm kiếm biểu thức chính quy", Truyền thông của ACM , 11 (6): 419-422, tháng 6 năm 1968. Nhưng bài báo đó hơi khó đọc, vì ông đã được biên dịch thành mã máy.

Hướng dẫn yêu thích của tôi về triển khai biểu thức chính quy là loạt bài viết trên blog của Russ Cox , tác giả của thư viện biểu thức chính quy RE2. Ông đưa ra rất nhiều cuộc thảo luận lịch sử. Ông lập luận rằng cách tiếp cận hiệu quả nhất để mô phỏng NFA là chuyển đổi sang DFA một cách nhanh chóng với bộ nhớ đệm của các trạng thái DFA mà bạn thực sự đạt được. . Chỉ sử dụng quay lui khi bạn cần.

Nơi khác mà bạn có thể tìm là thư viện biểu thức chính quy của Henry Spencer . Theo trang web đó, điều này đã được mô tả trong cuốn sách: Dale Schumacher (chủ biên), Giải pháp phần mềm trong C , Nhà xuất bản học thuật, 1994.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.