Sai lầm trong ví dụ CSG Wikipedia?


8

Tôi bối rối về ví dụ được đưa ra trong bài viết Wikipedia về ngữ pháp nhạy cảm ngữ cảnh:

https://en.wikipedia.org/wiki/Context-sensitive_grammar

Disclamer : Tôi đã thay đổi phần thảo luận trong bài viết trên wikipedia, vì vậy trạng thái hiện tại của bài viết sẽ khác với những gì tôi đang thảo luận trong câu hỏi này. Phiên bản gốc có tại đây: https://en.wikipedia.org/w/index.php?title=Context-sensitive_grammar&oldid=747616366

Ngữ pháp sau đây, với ký hiệu bắt đầu S, tạo ra ngôn ngữ không ngữ cảnh chính tắc {anbncn: n 1}:

  1. S → abc
  2. S → một SB c
  3. c B → WB
  4. WB → WX
  5. WX → BX
  6. BX → B c
  7. b B → bb

Họ không tuyên bố trực tiếp rằng ngữ pháp này nhạy cảm với ngữ cảnh , nhưng câu tiếp theo ngụ ý rằng họ coi nó là ngữ cảnh nhạy cảm :

quy tắc 3 đến 6 cho phép trao đổi liên tiếp từng cB thành Bc (cần có bốn quy tắc vì quy tắc cB → Bc sẽ không phù hợp với sơ đồ αAβ → αγβ)

Vì vậy, họ thu hút hình thức chính tắc của các quy tắc ngữ pháp nhạy cảm theo ngữ cảnh: αAβ → αγβ, ngụ ý rằng toàn bộ ngữ pháp là nhạy cảm theo ngữ cảnh.

Điều tôi bối rối là quy tắc số 3 , dường như không phù hợp với sơ đồ αAβ → αγβ. Tôi coi terminal ở đây là một phần của , biến là trong lược đồ, trống. Điều này ngụ ý rằng không thể tạo ra , vì nên được lưu trên cùng một vị trí ( ).αcαMột β c B W B c c B c ...BAβcBWBccBc

Có phải tôi đã bỏ lỡ điều gì đó hoặc ngữ pháp này thực sự bị đặt nhầm ở đây (vì nó không thực sự nhạy cảm với ngữ cảnh)?


1
Tôi nghĩ bạn đúng.
Emil Jeřábek

@ EmilJeřábek Có vẻ như chúng tôi đã thay đổi trong phần đó của bài viết wiki cùng một lúc: Tôi đã giới thiệu có phiên bản ngữ pháp phù hợp
Andrey Lebedev

Thật không may, ngữ pháp của bạn là sai. Xem en.wikipedia.org/wiki/ .
Emil Jeřábek

@ EmilJeřábek Tôi xin lỗi, có gì sai với ngữ pháp của tôi (9 quy tắc ngữ pháp) mà tôi đã đặt trong phiên bản bài viết mới? Bạn có thể chỉ ra quy tắc nào là sai?
Andrey Lebedev

@ EmilJeřábek Ah, ý bạn là ngữ pháp này có thể tạo ra "aaa bb cccc" không?
Andrey Lebedev

Câu trả lời:


9

Nếu tôi không nhầm, một ngữ pháp CS đơn giản hơn là có thể. Đây là:

  1. SABSc
  2. SAbc
  3. BAXA
  4. XAXY
  5. XYAY
  6. AYAB
  7. Aa
  8. Bbbb .

Một dẫn xuất cho chuỗi làaaabbbccc

1ABSc1ABABScc2ABABAbccc3AXABAbccc4AXYBAbccc5AAYBAbccc6AABBAbccc36AABABbccc36AAABBbccc7...aaaBBbccc8aaaBbbccc8aaabbbccc


3

Trên thực tế như một số người xem đồng ý ngữ pháp ban đầu là không chính xác. Như @ EmilJeřábek nhận thấy, đã có cuộc thảo luận về vấn đề này tại đây: https://en.wikipedia.org/wiki/Talk:Context-sensitive_grammar#Wrong_grammar_for_lingu

Vì vậy, có vẻ như cả ngữ pháp 7 quy tắc (mà tôi đã hỏi ở trên trong câu hỏi của tôi), không phải là ngữ pháp 9 quy tắc đã có ở đây trước và hiện tại trong các bài viết ngôn ngữ khác, cả hai đều không chính xác. Ngữ pháp 9 quy tắc này:

  1. S → a BC
  2. S → một SBC
  3. CB → WB
  4. WB → WC
  5. WC → BC
  6. a B → ab
  7. b B → bb
  8. b C → bc
  9. c C → cc

là ví dụ không chính xác vì nó có thể tạo ra các từ có dạng " aaa bb cccc" `không phù hợp với công thức .anbncn

Vì vậy, tôi đề nghị sau đây nâng cao ngữ pháp này bằng cách thay thế các quy tắc 3-5 thành bốn quy tắc:

  1. S → a BC
  2. S → một SBC
  3. CB → Cc
  4. CZ → WZ
  5. WZ → WC
  6. WC → BC
  7. a B → ab
  8. b B → bb
  9. b C → bc
  10. c C → cc

Quy tắc 3-6 sẽ giúp tránh vấn đề với việc thay thế CB thành WB và sau đó là WC thành BC.

EDIT : Như @ EmilJeřábek đã đề xuất một lần nữa, quy tắc # 7 và # 8 có thể được đơn giản hóa thành một quy tắcBb.

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.