Trường hợp sử dụng trong thế giới thực của việc sử dụng ngữ pháp Chomsky Type-I (nhạy cảm theo ngữ cảnh) là gì


9

Gần đây tôi đã có một số niềm vui khám phá sự phát triển của các trình phân tích cú pháp ngôn ngữ trong bối cảnh làm thế nào chúng phù hợp với Phân cấp Chomsky.

Một ví dụ thực tế tốt (tức là không lý thuyết) của một ngữ pháp nhạy cảm ngữ cảnh là gì?


8
Ngôn ngữ lập trình có được tính không?
Martin York

@LokiAstari Tất nhiên rồi.
Evan Plaice

2
Tôi đoán ngôn ngữ lập trình được tính, nhưng không tạo ra một giải pháp tốt, vì sự phức tạp của độ nhạy ngữ cảnh thường được thay thế bằng một ngữ pháp không ngữ cảnh với phân tích ngữ nghĩa thay thế.
Frank

@Frank Tôi đoán vấn đề của tôi là, tôi thực sự không thể nắm bắt được ngôn ngữ nhạy cảm ngữ cảnh là gì mà không áp dụng nó vào một số cách sử dụng trong thế giới thực.
Evan Plaice

Có một số ngôn ngữ của con người có thể không yêu cầu trình phân tích cú pháp ngôn ngữ đệ quy và do đó rơi vào nhóm ngôn ngữ loại 1 (bối cảnh senstive). cs.virginia.edu/~evans/cs3102/?p=138

Câu trả lời:


9

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 @@##:

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" -->

Hấp dẫn. Tôi biết về XML. Tôi nghi ngờ ổ đĩa đằng sau thông số XHTML 1.0 là dẫn đến các trình thông dịch HTML của 'chế độ quirks' hỗ trợ các ngoại lệ nhạy cảm theo ngữ cảnh với XML không ngữ cảnh sạch hơn.
Evan Plaice

@EvanPlaice Tôi bối rối trước nhận xét của bạn - "XML sạch" nhạy cảm với ngữ cảnh như tôi đã trình bày trong ví dụ của mình.

4
@MattFenwick Tôi nghĩ rằng ví dụ XML của bạn không hiển thị lý do thực sự tại sao XML không có ngữ cảnh. Lý do là tên thẻ tùy ý được cho phép. Nếu chỉ một bộ thẻ cụ thể được cho phép thì XML sẽ không có ngữ cảnh.
Honza Brabec

@HonzaBrabec bạn đúng - Tôi mặc nhiên cho rằng tên thẻ tùy ý được cho phép. Tôi nên đã tuyên bố rõ ràng rằng giả định. Cảm ơn bạn đã chỉ ra rằng!

3

Chừng nào tôi biết, văn phạm tiếng bối cảnh nhạy cảm được sử dụng trong xử lý ngôn ngữ tự nhiên, chỉ . Các trình thông dịch và trình biên dịch ngôn ngữ lập trình không cố phân tích ngữ pháp không ngữ cảnh vì sự phức tạp (ngay cả khi một số nỗ lực đã được thực hiện trong quá khứ).

Có lẽ, bạn có thể tìm thấy một số ví dụ về việc sử dụng thực tế trong một trong những thư viện này:

http://en.wikipedia.org/wiki/List_of_natural_lingu_ Processing_toolkits

http://opennlp.sourceforge.net/projects.html

http://nltk.org/

http://nlp.stanford.edu/nlp/javadoc/javanlp/


2
Thế còn HTML 'chế độ quirks' và tiền xử lý mã, họ sẽ không tính?
Evan Plaice

2

Ngữ pháp nhạy cảm ngữ cảnh đôi khi được sử dụng trong các mô tả về ngữ nghĩa ngôn ngữ lập trình. Có lẽ việc sử dụng toàn diện nhất các ngữ pháp nhạy cảm ngữ cảnh là định nghĩa ngôn ngữ Algol68. Nó đã sử dụng một ngữ pháp miễn phí ngữ cảnh hai cấp độ (xem http://en.wikipedia.org/wiki/Two-level_grammar ) để mô tả cả cú pháp và ngữ nghĩa của các chương trình Algol68.

Một vài đồng nghiệp của tôi đã sử dụng ngữ pháp van Wijngaarden để chỉ đạo việc thực hiện Algol68 của họ (xem http://en.wikipedia.org/wiki/FLACC ).

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.