Làm cách nào để biết ngôn ngữ có miễn phí hay không?Làm cách nào để xác định xem ngôn ngữ có phải là ngữ cảnh miễn phí hay không?
Trả lời
Bạn cần một ngữ pháp cho ngôn ngữ để xác định xem đó có phải là ngữ cảnh không. Ngữ pháp là ngữ cảnh miễn phí nếu tất cả các sản phẩm của nó có dạng "(không phải là thiết bị đầu cuối) -> chuỗi các thiết bị đầu cuối và không phải thiết bị đầu cuối".
Trước tiên, bạn nên cố gắng xây dựng một context-free grammar tạo thành ngôn ngữ theo chủ đề. Ngữ pháp không có ngữ cảnh nếu các cạnh bên trái của tất cả các sản phẩm chứa chính xác một biểu tượng không phải là thiết bị đầu cuối. Theo định nghĩa, nếu có, thì ngôn ngữ không có ngữ cảnh.
Cấu trúc tương đương sẽ là pushdown automaton. Nó giống như DFA, nhưng với một ngăn xếp có sẵn. Nó có thể dễ dàng hơn để xây dựng hơn một ngữ pháp.
Tuy nhiên, nếu bạn không xây dựng được ngữ pháp hoặc ô tô, điều đó không có nghĩa là ngôn ngữ không có ngữ cảnh; có lẽ, đó chỉ là bạn, những người không thể xây dựng một ngữ pháp đủ khôn lanh (ví dụ, tôi đã từng dành khoảng 7 giờ để xây dựng một ngữ pháp cho một ngôn ngữ khó khăn).
Nếu bạn bắt đầu nghi ngờ nếu ngôn ngữ không có ngữ cảnh, bạn nên sử dụng cái gọi là "pumping lemma for context-free languages". Nó mô tả một thuộc tính của tất cả ngôn ngữ không có ngữ cảnh và nếu ngôn ngữ của bạn vi phạm, thì chắc chắn nó không có ngữ cảnh (xem usage notes tại Wikipedia).
Bổ đề này là hệ quả của Ogden's lemma. Vì vậy, Ogden là mạnh hơn, và nếu bạn không áp dụng bổ đề bơm, bạn có thể thử Ogden (nó được sử dụng theo cùng một cách).
Tất cả điều này là tốt, nhưng bạn nhận ra rằng không ai trong số này hoàn toàn xác định một câu trả lời, phải không? Điều gì xảy ra nếu bạn không thể tìm thấy ngữ pháp không có ngữ cảnh, và bổ đề của Ogden không mâu thuẫn với bất kỳ tài sản nào đã biết của ngôn ngữ của bạn? Bạn vẫn còn bị mắc kẹt với vấn đề. (Mà tôi tin là khó, vì vậy câu trả lời của bạn có lẽ là tốt như nó được, chỉ cần chỉ ra rằng nó không phải là đầy đủ.) – ShreevatsaR
@ShreevatsaR, chính xác. Nó có thể xảy ra rằng không ai trong số các công trình trên. Nhưng tôi thực sự không biết phải làm gì trong trường hợp đó. –
Sửa
Như đã đề cập trong các ý kiến để chứng minh một ngôn ngữ là không-CFG, tôi tin là sử dụng Bổ đề một ogdens. Việc giải thích sai vốn có trong câu trả lời trước đây của tôi là để được miễn trừ :) Giữ lại câu trả lời trước đó cho người bảo hiểm.
Cũ câu trả lời
Bằng cách nhìn vào ngữ pháp và các quy tắc sử dụng! Như đã thấy từ hình ảnh (phân cấp wikipedia chomsky). Chỉ các ngôn ngữ thông thường là không có ngữ cảnh. Ngụ ý bất cứ điều gì sử dụng những thứ có dạng A-> aB hoặc A-> Ba một mình không phải là ngữ cảnh tự do.
Sửa A-> AB và A-> định nghĩa Ba có nghĩa là để bày tỏ trái và ngữ pháp đệ quy phải và không được hiểu theo nghĩa đen.
Về mặt kỹ thuật, các ngôn ngữ thông thường không có ngữ cảnh, nhưng tôi đồng ý rằng thuật ngữ "không có ngữ cảnh" thường được sử dụng để có nghĩa là "không có ngữ cảnh, nhưng không thường xuyên" - tức là các nhãn trong biểu đồ được áp dụng cho các vùng nhỏ nhất họ đang ở, thay vì các vòng kết nối nhỏ nhất mà họ đang ở. – reinierpost
"Chỉ những ngôn ngữ thông thường là không có ngữ cảnh". Gì? Tôi nghĩ rằng bạn đang đọc sơ đồ sai đường xung quanh. Các ngôn ngữ thông thường là một tập con của các ngôn ngữ không có ngữ cảnh và do đó chúng chắc chắn không có ngữ cảnh. Tuy nhiên, hầu hết các ngôn ngữ nhạy cảm theo ngữ cảnh là * không * không có bối cảnh làm cho các ngôn ngữ nhạy cảm theo ngữ cảnh trở thành một phần lớn các ngôn ngữ không có ngữ cảnh. – sepp2k
Sepp2k, tôi có nghĩa là những người về quyền lực biểu cảm. Ví dụ, sức mạnh biểu cảm của ngữ cảnh tự do ngôn ngữ cao hơn nhiều so với ngôn ngữ thông thường. Ngữ pháp thông thường ** sẽ không ** có cùng sức mạnh biểu cảm. Tuy nhiên, một CSL có thể mang tính biểu cảm hơn CFG. Vì vậy, một CSL chắc chắn là một ứng cử viên cho CFG nhưng RG thì không. – questzen
- 1. Ngữ cảnh miễn phí ngữ cảnh cho không phải palindrome
- 2. Ngữ pháp ngữ cảnh miễn phí cho C
- 3. NLTK Bối cảnh Ngữ pháp tự do miễn phí
- 4. Làm thế nào để xác định xem một ngôn ngữ là LL (1)?
- 5. 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?
- 6. Ngôn ngữ PHP có phải là C?
- 7. Làm cách nào để triển khai ngôn ngữ có cùng ngôn ngữ nhanh hơn ngôn ngữ?
- 8. Dự án ngôn ngữ chức năng rất lớn nào có sẵn miễn phí?
- 9. iOS: Xác định xem ngôn ngữ của thiết bị là phải sang trái (RTL)
- 10. ngôn ngữ lập trình không xác định
- 11. Python không phải là ngôn ngữ chuẩn?
- 12. JavaScript có phải là ngôn ngữ ứng dụng không?
- 13. Xác định ngôn ngữ RTL trong Android
- 14. Đa ngôn ngữ Ngôn ngữ
- 15. Làm cách nào để diễn tả ngữ cảnh thiết kế ngữ cảnh miễn phí dưới dạng DSL nội bộ trong Python?
- 16. Android: Có cách nào để thay đổi ngôn ngữ mặc định của android sang ngôn ngữ mới không?
- 17. 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"?
- 18. ngôn ngữ nào có được IEEE 754 phải không?
- 19. Xác định ngữ cảnh của một từ - Python
- 20. Làm cách nào để hiển thị ngôn ngữ (ngôn ngữ) hiện tại ứng dụng Android?
- 21. Cách bắt đầu Intent nếu ngữ cảnh không phải là bối cảnh hoạt động nhưng ngữ cảnh ứng dụng
- 22. Android: chọn giữa hai ngôn ngữ không có "ngôn ngữ"
- 23. Có cách nào để truy xuất mục Sitecore bằng ngôn ngữ khác với ngữ cảnh hiện tại không?
- 24. Listener Android miễn nhiệm menu ngữ cảnh
- 25. Làm cách nào để xác định ngôn ngữ nhập hiện tại?
- 26. Có cách nào miễn phí để phân phối các ứng dụng Windows 8 miễn phí không?
- 27. LL (2) ngôn ngữ không phải là LL (1)
- 28. Có một thuật toán hiệu quả để quyết định liệu ngôn ngữ được chấp nhận bởi một NFA có phải là một siêu ngôn ngữ của ngôn ngữ khác được chấp nhận không?
- 29. Áp dụng ngữ nghĩa cho các Monads miễn phí
- 30. Cách xác định ngữ cảnh dịch trong Django {% trans%} {% blocktrans%}?
Có cảm ơn. Sau đó 0^n 1^n là ngữ cảnh miễn phí. vậy Bổ sung của {(0^n1^n)^m | m, n> 0} là Ngữ cảnh miễn phí hay không. – user423733
Cần phải chỉ ra rằng chỉ vì bạn có thể đưa ra ngữ pháp không ngữ cảnh cho một ngôn ngữ không có nghĩa là không có ngữ cảnh tự do ngữ cảnh cho ngôn ngữ đó. Trong ngắn hạn, bạn chỉ có thể sử dụng xây dựng một ngữ pháp để cho thấy rằng một ngôn ngữ không có ngữ cảnh, không phải để cho thấy rằng nó không phải là. – sepp2k