Trong những năm qua, kết hợp mẫu "regex" ngày càng trở nên mạnh mẽ hơn đến mức tôi tự hỏi: liệu nó có thực sự phù hợp với ngữ cảnh-ngữ pháp nhạy cảm không? Nó có phải là một biến thể/mở rộng của ngữ pháp-miễn phí-ngữ pháp phù hợp? Bây giờ nó ở đâu và tại sao chúng ta không gọi nó thay vì "biểu hiện chính quy" hạn chế, hạn chế?Là "regex" trong các ngôn ngữ lập trình hiện đại thực sự "ngữ pháp ngữ cảnh nhạy cảm"?
Trả lời
Trong các phần hậu thuẫn cụ thể để ghi dấu ngoặc đơn, biểu thức chính quy phức tạp hơn ngữ pháp thông thường, ngữ cảnh hoặc ngữ cảnh nhạy cảm. Tên chỉ đơn giản là được phát triển theo lịch sử (như nhiều từ). Xem thêm this section trong Wikipedia và điều này explanation with an example từ Perl.
Con đường tôi nhìn thấy nó:
- ngôn ngữ thông thường:
- khớp do máy nhà nước. Chỉ có một biến thể được sử dụng để đại diện cho hiện tại "location" trong ngữ pháp để được xuất hiện: Đệ quy không thể được thực hiện
- Context-free ngôn ngữ:
- khớp bởi một máy stack. "Vị trí" hiện tại trong ngữ pháp được đại diện bởi một chồng trong một hoặc một hình thức khác. Không thể "nhớ" bất cứ điều gì đã xảy ra trước khi
- Context-sensitive ngôn ngữ:
- Hầu hết các ngôn ngữ lập trình
-
Tất cảHầu hết các ngôn ngữ con người
tôi biết thường xuyên trình phân tích cú pháp biểu thức cho phép bạn đối sánh với nội dung nào đó mà trình phân tích cú pháp đã gặp phải, đạt được điều gì đó giống như ngữ cảnh-se ngữ pháp nsitive.
Tuy nhiên, trình phân tích cú pháp biểu thức chính quy, tuy nhiên chúng có thể phức tạp, không cho phép áp dụng quy tắc đệ quy, đây là yêu cầu nhất định đối với ngữ pháp không có ngữ cảnh.
Thuật ngữ regex, theo ý kiến của tôi, chủ yếu đề cập đến cú pháp dùng để diễn tả những văn phạm thường xuyên (các ngôi sao và dấu hỏi).
Lookahead/lookbehind và đặt tên chắc chắn thêm một cái gì đó mà ngồi ngoài biểu thức thông thường tiêu chuẩn - bộ nhớ. Vậy chúng ta không phải ở cấp PDA sao? – notnot
Nó không phải là nói chung đúng là ngôn ngữ tự nhiên là bối cảnh nhạy cảm, xem http://www.eecs.harvard.edu/~shieber/Biblio/Papers/shieber85.pdf –
ah, đó là những thứ tốt – notnot
Có các tính năng trong triển khai cụm từ thông dụng hiện đại, phá vỡ các quy tắc của classic regular expression definition.
Ví dụ Microsoft’s .NET Balancing Group(?<
name1
-
name2
> …)
:
^(?:0(?<L>)|1(?<-L>))*(?(L)(?!))$
này không phù hợp với ngôn ngữ L ₀₁ = {ε , 01, 0011, 000.111, ...}. Nhưng ngôn ngữ này không thường xuyên theo Pumping Lemma.
Tôi biết rằng nó vượt ra ngoài regex kinh điển, nhưng tôi tự hỏi còn bao nhiêu nữa. Liên kết của Fabian ở trên rất thú vị. – notnot
- 1. Ngữ pháp của các ngôn ngữ lập trình hiện đại không có ngữ cảnh hay nhạy cảm với ngữ cảnh?
- 2. Ngôn ngữ lập trình PHP hoặc ngôn ngữ lập trình?
- 3. Sự khác nhau giữa cú pháp và ngữ nghĩa của ngôn ngữ lập trình là gì?
- 4. Có thể thực hiện một ngôn ngữ lập trình thứ hai bằng ngôn ngữ đó không?
- 5. Dịch mã byte Java sang các ngôn ngữ lập trình và ngôn ngữ lập trình khác
- 6. Ngôn ngữ lập trình Siri
- 7. Tính tương quan văn bản nhạy cảm với ngữ cảnh
- 8. Phương pháp học ngôn ngữ lập trình của Schliemann
- 9. C# Ngôn ngữ lập trình
- 10. Lịch sử dấu phẩy sau trong ngữ pháp ngôn ngữ lập trình
- 11. Sử dụng ngôn ngữ lập trình D trong ngữ cảnh .NET
- 12. Thuật ngữ "mệnh đề" trong ngữ cảnh lập trình
- 13. Ngôn ngữ lập trình nào (ngoài Smalltalk) là hình ảnh?
- 14. Đặt ngôn ngữ Wordpress theo lập trình?
- 15. Tôi có thể tìm thấy ngữ pháp chính thức cho ngôn ngữ lập trình Perl ở đâu?
- 16. Tạo ngôn ngữ lập trình với C#
- 17. Mảng trong ngôn ngữ lập trình J
- 18. Ngôn ngữ lập trình bí ẩn
- 19. Phát hiện ngôn ngữ lập trình trong PHP
- 20. Tại sao một số ngôn ngữ lập trình nhanh hơn các ngôn ngữ khác?
- 21. UML cho ngôn ngữ lập trình C
- 22. Ngữ pháp thích hợp cho ngôn ngữ này là gì?
- 23. ngôn ngữ lập trình không xác định
- 24. Điều đó thực sự có nghĩa là ngôn ngữ lập trình là gì?
- 25. Ngôn ngữ lập trình đã nhập
- 26. Gói tốt cho Đại diện ngữ âm cho các ngôn ngữ của con người là gì?
- 27. Ngôn ngữ lập trình sạch trong thế giới thực?
- 28. Phương pháp thiết kế ngôn ngữ lập trình đơn giản
- 29. Đa ngôn ngữ Ngôn ngữ
- 30. Windows: Ngôn ngữ lập trình nào?
Bạn có thể giải thích sự khác biệt giữa 'ngôn ngữ thông thường' và' biểu thức chính quy' không? –
Nó thực sự mạnh hơn CSG? Bạn có thể đưa ra một ví dụ? – notnot
Một ngôn ngữ thông thường có thể được mô tả bằng ngữ pháp thông thường (xem http://en.wikipedia.org/wiki/Regular_grammar), trong khi cụm từ thông dụng là một mẫu khớp với ngôn ngữ ít bị hạn chế và do đó phức tạp hơn để xử lý. –