Ngữ pháp nhạy cảm ngữ cảnh cho ngôn ngữ của các từ được nối với chính chúng


9

Tôi đang tìm kiếm một ngữ pháp context-sensitive mô tả các ngôn ngữ sau: .L= ={ww|w{một,b}*,|w|1}

Tôi đã có vấn đề với thực tế là không có quy tắc như được phép và do đó tôi không thể đặt bất kỳ không thuộc đầu cuối cho thấy sự "giữa" của từ này. Có bất kỳ mẹo cho vấn đề?Xε


1
Câu trả lời nhàm chán: xây dựng một LBA và áp dụng mô phỏng được sử dụng để chứng minh rằng các LBA và ngữ pháp nhạy cảm ngữ cảnh đều mạnh mẽ như nhau.
Raphael

Câu trả lời:


6

Thật vậy, có một mẹo đơn giản cho phép bạn thêm thông tin bổ sung tại một vị trí nhất định: chỉ cần thay thế một chữ cái liền kề với vị trí đó và đánh dấu nó bằng thông tin và chữ cái gốc.

Trong ví dụ của bạn, có ở giữa, nhưng vì nó không thể bị xóa, nó cũng được tính là một chữ cái bình thường. Do đó, chúng tôi có hai bản sao M aM b để chỉ các chữ cái được thay thế. Trong phần cuối của đạo hàm, các điểm đánh dấu nên được thay thế bằng nội dung chữ cái của chúng, bằng các sản phẩm đơn giản như M aa .MMaMbMaa

Trong hầu hết các trường hợp, các ứng dụng của nhu cầu được thực hiện ở phần cuối của quá trình nguồn gốc. Trong một số công trình, điều này không cần phải được "tính thời gian": khi M biến mất quá sớm, đạo hàm không thể tìm được vị trí thích hợp và quá trình sẽ không dừng thành công. Trong các trường hợp khác, người ta cần một loại kiểm soát. Điều này đôi khi được thực hiện bằng cách giới thiệu một nonterminal như một tín hiệu di chuyển dọc theo các chữ cái. Một lần nữa, tín hiệu này cũng sẽ mang một thiết bị đầu cuối nếu không bạn sẽ gặp vấn đề tương tự.MaaM

Di chuyển thông tin xung quanh rất dễ dàng trong cái gọi là văn phạm tiếng đơn điệu ( với | alpha |beta | ) sử dụng quy tắc như X Một Một X , có thể được coi là X nhảy qua Một . Đối với ngữ pháp nhạy cảm ngữ cảnh phù hợp, người ta cần chia phần này theo ba bước: X A X A X , X A XA A X , A A XA Xαβ|α|β|XAAXXAXAXAX,XAXAAX,AAXAX. trong mỗi sản xuất một chữ cái được thay đổi trong một bối cảnh thích hợp. Phải mất khá nhiều trí tưởng tượng để thấy quá trình này không tương tác với các phần khác của đạo hàm. Ví dụ, điều gì xảy ra khi ở bước cuối cùng lần đầu tiên tham gia vào một bước phái sinh khác?A

Điều này có thể không hoạt động đối với các từ rất ngắn, khi có nhiều thông tin hơn các vị trí có sẵn. Giải pháp đơn giản nhất cho điều đó là bỏ qua các chuỗi ngắn trong công trình của bạn và tạo chúng riêng biệt.


Không yêu cầu phải xem xét sản phẩm theo một thứ tự nhất định sao cho Ma → a sẽ không được sử dụng trước khi sắp xếp lại các phần tử cuối cùng? Hay tôi đang thiếu một cái gì đó?
MrBolton

Tôi đã thêm một ghi chú vào đó trong câu trả lời của tôi. Trong một số giải pháp áp dụng sản xuất như vậy quá sớm sẽ dẫn đến một hình thức tình cảm không thể kết thúc thành công. Trong các trường hợp khác, sản phẩm phải được đồng bộ hóa cẩn thận. Một vấn đề của lẽ thường và thử và sai.
Hendrik ngày

1

Câu trả lời mặc định ngắn: đưa ra một LBA chấp nhận ngôn ngữ và sử dụng mô phỏng được sử dụng để chứng minh rằng các ngữ pháp và ngữ pháp nhạy cảm theo ngữ cảnh xác định cùng một bộ ngôn ngữ. Nhưng đó là tất nhiên không phải là những gì bạn đang theo đuổi.

Trong trường hợp cụ thể này, hãy cố gắng suy nghĩ của việc sử dụng một ngữ pháp đúng tuyến cho hai lần, một cho phía bên trái và một cho nửa bên phải. Tất cả bạn phải đảm bảo rằng cả hai ngữ pháp đều xuất phát "đồng bộ".Σ*

Điều này có thể được thực hiện bằng cách hoán đổi xung quanh mã thông báo kiểm soát. Điều đó có nghĩa là, các ngữ pháp bên trái chọn một quy tắc, tạo mã thông báo điều khiển phù hợp và chuyển nó sang ngữ pháp bên phải. Ngữ pháp bên phải nhìn thấy mã thông báo kiểm soát và thực hiện quy tắc phù hợp. Lưu ý rằng bạn cũng có thể thực hiện giao tiếp hai chiều theo cách này, nhưng không cần thiết ở đây.

Có một vấn đề với văn phạm tiếng context-sensitive: họ không bao giờ có thể xóa không bến (trừ nếu từ đó có sản phẩm nào là bằng ngôn ngữ). Do đó, chúng tôi phải tạo ra nhiều thiết bị đầu cuối mà chúng tôi sẽ cần; không cái nào có thể thừaSε

Một cách để đạt được điều này là sử dụng thủ thuật tương tự như đối với một số bằng chứng nhất định về LBA: tạo ra tất cả các thiết bị đầu cuối mà bạn sẽ cần trước tiên , tức là chuẩn bị "băng". Sau đó, "di chuyển xung quanh" trên băng đó. Chỉ "ở cuối", thay thế tất cả các thiết bị đầu cuối bằng thiết bị đầu cuối.

Vì vậy, hãy với Σ = { một , b } (xây dựng sẵn sàng kéo dài đến bảng chữ cái lớn hơn) và N , delta do các quy tắc sau.G= =(N,Σ,δ,S)Σ= ={một,b}Nδ

là các quy tắc để tạo ra các "băng". Lưu ý rằng chiếc mũ biểu thị "vị trí đầu" và chỉ sốl,rbiểu thị một nửa của từ không thuộc thiết bị đầu cuối. Các từ ngắn được tạo ra để đảm bảo an toàn cho một số quy tắc dưới đây. Bây giờ chúng ta cần các quy tắc để rút ra một biểu tượng ở phần bên trái:SX^lSXraaaaababbababbbbaabbεSXlSXrXlX^r

tôi,r

cho tất cả(α,γ)Σ2. Lưu ý cách chúng tôi sử dụng chỉ mục trên để mang biểu tượng được tạo ở bên phải. XaXblà các thiết bị đầu cuối "cuối cùng" sẽ chỉ được sử dụng để di chuyển mã thông báo điều khiển xung quanh và để lấy các thiết bị đầu cuối sau này. Ngoài ra, lưu ý rằng quy tắc thứ hai là (chỉ) được sử dụng cho biểu tượng cuối cùng của nửa bên phải. Để di chuyển vật mang sang nửa bên phải, chúng ta phải di chuyển qua cảXlcòn lạivà đã tạoXα:X^tôiXtôiXγX^tôiγX^tôiXαXγXαγ

(α,γ)Σ2XmộtXb

XtôiXα

cho tất cả(α,β,γ)Σ3. Bây giờ, một khi mang đến mã thông báo kiểm soát bên phải, chúng ta phải bắt chước quy tắc được sử dụng ở bên trái:X^lγXlX^lXlγX^lγXαX^tôiXαγXtôiγXtôiXtôiXtôiγXtôiγXαXtôiXαγXαγXβXαXβγ

(α,β,γ)Σ3

cho tất cả(α,γ)Σ2. Lưu ý rằng quy tắc đầu tiên được sử dụng cho biểu tượng đầu tiên của nửa bên phải và quy tắc cuối cùng chỉ có thể được sử dụng cho biểu tượng cuối cùng, nếu không, đạo hàm không bao giờ chấm dứt. Bây giờ chúng ta chỉ cần các quy tắc chấm dứtXtôiγX^rXtôiX^rγXαγX^rXαX^rγX^rγXrXγX^rX^rγXγ

(α,γ)Σ2

cho tất cả alpha Σ và chúng tôi đang thực hiện. Các quy tắc này cũng vậy, chỉ có thể được áp dụng sau khi mọi thứ (bên trái) được thực hiện, nếu không việc tạo đạo hàm sẽ không chấm dứt. Lưu ý rằng ngữ pháp này là mơ hồ. Không chỉ có thểáp dụng X αα (một cách an toàn) ở bất kỳ đâu bên trái "đầu" bên trái bất cứ lúc nào, mà còn có thể thực hiện nhiều thao tác thực hiện cùng một lúc. Vì họ không bao giờ có thể vượt qua nhau nên thứ tự chính xác được duy trì. Một nhận xét phải được thực hiện: ngữ pháp trênkhôngnhạy cảm với ngữ cảnh vì nhiều quy tắc thay đổicả haiXαα

αΣ

Xαα

của các biểu tượng ở phía bên trái. Điều này không được phép đối với các ngữ pháp nhạy cảm theo ngữ cảnh. May mắn thay, chúng ta có thể mô phỏng bất kỳ quy tắc của biểu mẫuR

bởiMộtBCD



vì vậy chúng tôi tốt và có thể làm việc với ngữ pháp nhỏ hơn. Cho thấy rằng sự can thiệp giữa nhiều mô phỏng như vậy không gây hại là một bài tập.MộtBMộtYRMộtYRXRYRXRYRXRDXRDCD

Lk= ={wk|wΣ*}L= =Tôi1LkLkL


0

X

w|w|1ε

mộtXmộtmộtmột,  mộtXbmộtb,  bXmộtbmột,  bXbbb

w


Tuy nhiên, sử dụng phương pháp của @ hendrik-jan giúp bạn tiết kiệm hai quy tắc.
Rmn
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.