2012-03-11 37 views

Trả lời

6

C++ không có ngữ cảnh hay bối cảnh nhạy cảm, kể từ khi template system is Turing-complete và xác định xem một đoạn mã C++ là hợp pháp C++ có khó xác định không. Ví dụ, tôi có thể định nghĩa một lớp mẫu mô phỏng một TM trên một chuỗi và sau đó tạo một hằng số với giá trị 1 nếu máy chấp nhận và 0 nếu nó không. Nếu tôi đã làm điều đó, sau đó đoạn mã sau sẽ là hợp pháp iff TM dừng lại trên đầu vào cho trước:

int myArray[TMTemplate</* ... args ... */>::value]; 

Từ nếu TM từ chối, điều này tạo ra một loạt các kích thước 0, mà không được phép.

Cả C# lẫn Java đều không có ngữ cảnh, vì kiểm tra xem biến có được sử dụng chính xác và nhất quán trong phạm vi cụ thể không được ngữ cảnh không (bằng chứng phức tạp và dựa trên Ogden's lemma). Tuy nhiên, tôi không chắc chắn liệu chúng có nhạy cảm với ngữ cảnh hay không.

Hy vọng điều này sẽ trả lời một phần cho câu hỏi của bạn!

+4

Tôi không chắc liệu tính toàn vẹn của các mẫu có ảnh hưởng đến ngữ pháp * của C++ hay không. Chắc chắn, kết quả của lập trình meta mẫu có thể quyết định một chương trình vượt qua một số kiểm tra ngữ nghĩa nhất định, nhưng nó vượt xa phạm vi ngữ pháp. Và các mẫu không thay đổi gì về cú pháp: Nếu chương trình có lỗi cú pháp, các mẫu không được instanciated và nếu chúng được instanciated, chúng sẽ không bao giờ dẫn đến lỗi cú pháp. Bạn cũng xem xét tất cả các ngôn ngữ được đánh máy theo ngữ cảnh theo ngữ cảnh nhạy cảm vì bạn cần phải biết tất cả các loại có liên quan để quyết định thời tiết, ví dụ: câu lệnh gán là hợp lệ? – delnan

+0

@ delnan- Tôi đã giải thích các câu hỏi như vậy mà bất kỳ ngôn ngữ gõ tĩnh nào không phải là ngữ cảnh, vì tính chính xác của chương trình phụ thuộc vào cách các kiểu liên quan. Tôi đang tiếp cận điều này từ quan điểm của "nếu bạn tập hợp tất cả các chuỗi đại diện cho các chương trình X hợp pháp, bạn sẽ lấy lại loại ngôn ngữ nào?" Bộ đó không phải là bối cảnh miễn phí, ngay cả khi điều kiện tiên quyết để hợp lệ chuỗi phải nằm trong ngữ pháp. Điều đó có ý nghĩa? Và đây có phải là cách giải thích không hợp lý của câu hỏi không? – templatetypedef

+2

Theo diễn giải đó, câu trả lời của bạn có ý nghĩa. Nó không phải là cách tôi có thể giải thích câu hỏi, nhưng đó là bởi vì tôi cho rằng "ngôn ngữ không có ngữ cảnh" (được sử dụng bởi OP) chỉ là một cách viết tắt của "ngôn ngữ với ngữ pháp ngữ cảnh". Nhưng tôi nghĩ rằng nó có ý nghĩa (và nếu đó thực sự là câu hỏi, câu trả lời của bạn là chính xác). Bạn nên thêm giải thích đó vào câu trả lời, để ngăn chặn sự hiểu lầm thêm. – delnan

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