Có một cách giải quyết khác nhau về vấn đề khác của mối nguy hiểm khác không phải là trận đấu khác với trận đấu gần nhất?


9

Những món quà ngữ pháp ngữ cảnh tự do sau một "treo lủng lẳng khác" kiểu nhập nhằng (tưởng tượng rằng đại diện cho và là viết tắt của và là viết tắt của một số loại khác giảng dạy hoặc khối): Ví dụ, có thể được phân tích cú pháp là hoặc là (đây là từ mơ hồ đơn giản nhất / ngắn nhất cho ngữ pháp này).b c Saif expr thenbelsec aacbc(a(acbc))(a(ac)bc)

SaSbS|aS|c
aacbc(a(acbc))(a(ac)bc)

Cách "tiêu chuẩn" để giải quyết sự mơ hồ "lơ lửng khác" này buộc câu lệnh "khác" ( ) phải ghép với câu "if-then" gần nhất / trong cùng ( ). Điều này có thể được thực hiện như sau: Ngữ pháp này không rõ ràng. Trong ví dụ trên, nó buộc phân tích cú pháp .a Sba (a(acbc))

SaTbS|aS|cTaTbT|c
(a(acbc))

Câu hỏi: Có cách nào tự nhiên khác để giải quyết sự mơ hồ sẽ buộc phân tích của không? Nói cách khác, tôi đang tìm kiếm một ngữ pháp tạo ra cùng một ngôn ngữ như hai ngôn ngữ trên, không rõ ràng và phân tích là .a a c b c a a c b c ( a ( a c ) b c )(a(ac)bc)aacbcaacbc(a(ac)bc)

Lưu ý: Nỗ lực đầu tiên của tôi là như sau: giải quyết sự mơ hồ của theo yêu cầu - nhưng ngữ pháp này vẫn còn mơ hồ: có thể được phân tích thành hoặc như . aacbcaacbacbc(a(ac)b(acbc))(a(acb(ac))bc)

SmộtSbS|mộtBạn|cBạnmộtBạn|c
mộtmộtcbcmộtmộtcbmộtcbc(một(mộtc)b(mộtcbc))(một(mộtcb(mộtc))bc)

1
Và trong ví dụ cuối cùng của bạn, bạn phân tích cái nào trong hai phân tích có thể là "tự nhiên" hay chính xác và tại sao?
rici

@rici Vâng, đây là một câu hỏi khó!, và tôi không biết. Tôi sẽ hài lòng với một ngữ pháp rõ ràng, tạo ra phân tích cú pháp . Những gì tôi chủ yếu quan tâm đến là (với hơn là hơn 's) phù hợp với -thứ cuối cùng với -thứ (và lá trong cùng 's chưa từng có). một một một ... một một một c b c b c ... b c một b k b k một mộtmộtmộtcbmộtcbcmộtmộtmộtGiáo dụcmộtmộtmộtcbcbcGiáo dụcbcmộtbkbkmộtmột
Gro-Tsen

Câu trả lời:


7

Vấn đề này là một sự tương tự chính xác của vấn đề khớp dấu ngoặc trong một biểu thức trong đó một số dấu ngoặc gần đã bị bỏ qua. Ở đây "nếu" (hoặc trong ngữ pháp đại diện) là dấu ngoặc đơn mở và "khác" ( ) là dấu ngoặc đơn gần. (Từ chuỗi và , bạn có thể chèn s một cách cơ học bằng cách đặt một cái trước mỗi và một ở cuối.) Bởi vì nó phù hợp hơn với bộ não cha mẹ của tôi, tôi viết như thể đó là vấn đề trong tay.b a b c bmộtbmộtbcb

Độ phân giải "khớp gần nhất" truyền thống khác khớp với từng độ gần với độ mở gần đây nhất chưa từng có. Điều đó có nghĩa là không bao giờ có một mở (hoặc đóng, đối với vấn đề đó) không bao giờ có giữa một mở phù hợp và gần khớp của nó.

Một giải pháp thay thế khả thi sẽ là khớp từng lần đóng với mức mở khả thi sớm nhất chưa từng có. "Khả thi" ở đây có nghĩa là mở có thể được khớp mà không vi phạm lồng cha mẹ (ví dụ: đầu tiên trong không thể phù hợp với cuối cùng ).( ) ( ) )(()())

Việc khớp này phải được thực hiện từ bên ngoài, do đó, không khớp với nhau cho đến khi tất cả các cặp kèm theo được khớp. Thực tế này làm cho không thể tạo ra một phép phân tích bằng thuật toán nhìn có giới hạn, vì phép phân tích phải hoạt động từ cả hai đầu, sau khi tách chuỗi thành các phân đoạn khớp hoàn toàn (vì chúng hạn chế phạm vi của các kết quả khớp tiềm năng).

Tuy nhiên, thực tế là trình phân tích cú pháp từ trái sang phải trực tuyến không tồn tại không có nghĩa là không có CFG rõ ràng. (Rõ ràng: một ngôn ngữ palindromic phải được phân tích cú pháp từ cả hai đầu về giữa, nhưng thật dễ dàng để viết một ngữ pháp rõ ràng).

Để tạo ra một ngữ pháp cho vấn đề dấu ngoặc đơn "khớp xa nhất", tôi đã dựa vào thực tế là một mở không thể so sánh được có thể được theo sau bởi một mở phù hợp. Nếu đúng như vậy, thì thuộc tính khớp xa nhất sẽ không được áp dụng vì mở không khớp có thể khớp với đóng mở của khớp, do đó, thực tế là nó không phù hợp vi phạm thuộc tính khớp xa nhất.

Vì vậy, đây là ngữ pháp hơi khó hiểu:

SBạn|MBạnT|mộtBạnbT|mộtBạnbc|mộtMbBạnMmộtMbM|cTmộtT|mộtc

M U a T a T T U U TS là ký hiệu bắt đầu; là các câu lệnh khớp hoàn toàn; chắc chắn là các câu lệnh chưa từng có (có nghĩa là chúng bao gồm ít nhất một câu chưa từng có , vì vậy chúng không thể để trống) và là một "cái đuôi" chỉ bao gồm s chưa từng có . Thực tế trên về nhân mở chưa từng có thể được đọc trực tiếp từ ngữ pháp: tất cả chưa từng mở ra có nguồn gốc từ , một chỉ có thể xuất hiện ở phần cuối của một và chỉ có thể được theo sau bởi một .MBạnmộtTmộtTTBạnBạnT

Sự vụng về đến từ việc ngăn khớp với chuỗi rỗng. Điều đó ngăn chặn một loạt những gì tôi cho là mơ hồ giả: Chúng là giả mạo theo nghĩa là sự khớp của mở và đóng là giống nhau trong tất cả các phân tích thay thế. Nếu được phép là null, nó cũng sẽ lấy được một chuỗi hoàn toàn cân bằng. Vì , trên thực tế, , dẫn đến một sự mơ hồ trong đó bạn có thể coi hoàn toàn cân bằng là một chuỗi theo sau là một trống rỗng , hoặc một ít hơn theo sau là hoàn toàn cân bằng .U S M U S M U M UBạnBạnSM*BạnSMBạnMBạn

Có lẽ có một cách giải quyết tốt hơn so với cái tôi đã chọn. Nhưng cái này có vẻ hoạt động và nó chơi tốt với trình phân tích cú pháp GLR của Bison mà tôi đã sử dụng để kiểm tra nó; trình phân tích cú pháp đó phàn nàn về các phân tích mơ hồ trừ khi bạn viết thêm mã để xử lý sự mơ hồ và tôi quá lười để làm điều đó. Tôi đã thử nghiệm nó với chuỗi lên tới 20 lần mở + đóng và dường như nó đã tạo ra một phân tích rõ ràng cho mỗi chuỗi được lồng chính xác, mà không tạo ra các phân tích cú pháp cho các chuỗi được lồng không chính xác.


Chúc mừng bạn đã đạt được những gì tôi đã kết luận có lẽ là không thể! Tôi đã kiểm tra bằng thực nghiệm rằng đối với các từ có độ dài ≤16 thì ngữ pháp này thực sự không rõ ràng và tạo ra các từ giống như các từ trong câu hỏi của tôi. Bây giờ tôi phải hiểu chi tiết cách nó hoạt động!
Gro-Tsen

SmộtSbT|mộtMbST a TMUTmộtT|cBạn

0

Lấy a + b + c + d + e và abcde. Có hai cách rõ ràng làm thế nào một ngữ pháp có thể phân tích những thứ này, nhưng có một cách mà chúng ta sử dụng.

Trong trường hợp "lơ lửng khác", đó không thực sự là cách mọi người nhìn vào nó. Thay vào đó, cú pháp được hiểu là "nếu", theo sau là 0, một hoặc nhiều "khác nếu", theo sau là "khác" tùy chọn.


mộtcbmộtcbmộtcbc
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.