Câu hỏi hay. Mặc dù như đã đề cập trong các bình luận, rất nhiều ngôn ngữ lập trình nhạy cảm với ngữ cảnh, độ nhạy ngữ cảnh đó thường không được giải quyết trong giai đoạn phân tích cú pháp nhưng trong các giai đoạn sau - nghĩa là, một siêu ngôn ngữ được phân tích cú pháp bằng ngữ pháp không ngữ cảnh, và một số cây phân tích sau đó được lọc ra.
Tuy nhiên, điều đó không có nghĩa là những ngôn ngữ đó không nhạy cảm với ngữ cảnh , vì vậy đây là một số ví dụ:
Haskell cho phép bạn xác định các hàm được sử dụng làm toán tử và cũng xác định mức độ ưu tiên và kết hợp của các toán tử đó. Nói cách khác, bạn không thể xây dựng cây phân tích chính xác cho biểu thức toán tử như:
a @@ b @@ c ## d ## e
trừ khi bạn đã phân tích các khai báo ưu tiên / kết hợp cho @@
và ##
:
infixr 8 @@
infixr 6 ##
Một ví dụ thứ hai là Bencode , một ngôn ngữ dữ liệu có tiền tố nội dung với độ dài của nó:
<length>:<contents>
Vấn đề với định dạng này là không thể phân tích cú pháp mà không có thứ gì nhạy cảm với ngữ cảnh, bởi vì cách duy nhất để tìm ra kích thước "trường" là bằng cách ... phân tích chuỗi.
Một ví dụ thứ ba là XML, giả sử tên thẻ tùy ý được phép: mở tên thẻ phải có thẻ đóng trùng khớp:
<hi>
<bye>
the closing tag has to match bye
</bye>
</hi> <!-- has to match "hi" -->