Những ký hiệu tốt nào cho các ngôn ngữ đẩy xuống rõ ràng theo ngữ cảnh và rõ ràng tồn tại?


10

Ngôn ngữ xác định ngữ cảnh (DCFL) và ngôn ngữ đẩy xuống rõ ràng (VPL) là cả hai bộ ngôn ngữ chính thức giữa ngôn ngữ không ngữ cảnh (CFL) và ngôn ngữ thông thường (REG). Có một ký hiệu dễ đọc nào có thể được thể hiện bằng ASCII đơn giản như Backus-Naur-Form cho CFL và các biểu thức chính quy cho REG không?


1
Nó có thể hữu ích để làm rõ ý nghĩa của tốt Goodv trong tiêu đề của câu hỏi. Có gì sai khi sử dụng BNF để mô tả DCFL?
Tsuyoshi Ito

1
Nói tốt, ý tôi là nó phải dễ đọc và viết cho con người, vì vậy nó nên dựa trên ASCII. BNF là tuyệt vời - biểu thức chính quy là một tập hợp con nhỏ gọn của BNF. Nhưng tập hợp con nào của BNF định nghĩa DCFL và định nghĩa VPL nào?
Jakob

Câu trả lời:


5

Về DCFL, tôi không thấy ký hiệu nào tốt hơn chức năng chuyển đổi của máy tự động đẩy xuống xác định, tức là viết các quy tắc rõ ràng có dạng với các trạng thái trong , một ngăn xếp biểu tượng, một chuỗi các ngăn xếp biểu tượng, và biểu tượng một đầu vào hoặc chuỗi rỗng. Bản thân ký hiệu không thi hành tính xác định, nhưng nó dễ dàng được kiểm tra. Sử dụng một loại ký hiệu ngữ pháp không ngữ cảnh (như BNF), bạn sẽ gặp vấn đề vì DCFL là một lớp con CFL thích hợp, và như đã lưu ý bởi DaniCL, bạn không thể quyết định nói chung về CFG cho dù ngôn ngữ của nó có xác định hay không.q , q ' Q z γ mộtq,z,aq,γq,qQzγa

Về VPLS, một trong ngoặc vuông / ngoặc kiểu cho CFGs sẽ là đủ tốt, với các quy tắc của hình thức nơi là không thuộc đầu cuối, biểu tượng cuộc gọi, là biểu tượng trở lại, và một chuỗi các thường xuyên biểu hiện trên các biểu tượng nội bộ hỗn hợp và nonterminals. Vì bất kỳ VPL nào cũng là CFL (D), bạn cũng có thể sử dụng lại ký hiệu trên cho automata đẩy xuống và kiểm tra xem các hoạt động ngăn xếp có khớp với các cuộc gọi và trả lại hay không, hoặc ghi lại mối quan hệ chuyển đổi của một từ tự động lồng nhau (sẽ ít dư thừa hơn) .A a b αAaαbAabα

Chỉnh sửa: hãy nghĩ về nó, một ký hiệu cho các lược đồ XML, như cú pháp rút gọn của RelaxNG --- là ký hiệu ASCII ---, có thể dễ dàng được sử dụng cho VPL. Bạn sẽ chỉ cần thi hành một số quy ước đặt tên cho thẻ, ví dụ như một thẻ mở "<ab>" cho một cuộc gọi biểu tượng phù hợp với một thẻ đóng "</ ab>" cho một biểu tượng trở lại .bab


Cảm ơn! Về DCFL tôi nghĩ rằng đây là một hướng đi đúng đắn. Một cú pháp cụ thể sẽ có một số chữ viết tắt tiện dụng cho các tập hợp con được phân tích cú pháp bởi các biểu thức thông thường. Về VPL tôi chưa chắc chắn, vì một VLP được phép có các ký hiệu gọi và trả lại lủng lẳng trái ngược với các mô hình cây như XML. Bạn có thể so sánh nó tốt hơn với một chuỗi các sự kiện SAX tùy ý từ một cây XML tùy ý. Tôi nghi ngờ rằng RelaxNG có thể mô tả điều này.
Jakob

Nhận xét Sử dụng ... là xác định. nằm bên cạnh vấn đề - nó không nói gì về việc liệu có một lớp con của CFG mô tả rất rõ ràng tất cả các DCFL và không có gì khác. Chẳng hạn như ngữ pháp LR (k).
Revierpost

@reinerpost: đúng, nhưng (để bảo vệ tôi) tôi sẽ không xem xét ngữ pháp LR (1) để cung cấp một ký hiệu cú pháp , bởi vì người ta cần kiểm tra điều kiện LR ​​(1).
Sylvain

3

Để tìm một biểu diễn chính tắc, hãy xem xét các vấn đề sau: lớp DCFL tương đương với lớp ngôn ngữ được tạo bởi các ngữ pháp LR (k), một lần nữa tương đương với LR (1). Điều này có nghĩa là bạn có thể tìm thấy một ngữ pháp LR (1) cho mỗi DCFL. Tất nhiên, một ngữ pháp LR (1) vẫn là một ngữ pháp không ngữ cảnh, nhưng với một thuộc tính đặc biệt: từ các ngữ pháp LR (1), chúng ta có thể dễ dàng xây dựng các bảng phân tích cú pháp để hướng dẫn một trình phân tích cú pháp xác định (với biểu tượng là 1 ký hiệu (1)). Các bảng phân tích cú pháp sẽ là một đại diện khác, mặc dù hơi khó đọc.

Nhân tiện, hãy nhớ rằng không thể tin được liệu một ngôn ngữ không có ngữ cảnh nhất định có mang tính quyết định hay không (Định lý Greibach).

Tôi phải thừa nhận tôi chưa bao giờ nghe nói về VPL.


Vâng, đại diện kinh điển hiếm khi dễ đọc, nhưng cảm ơn cho các hướng dẫn. Nếu Định lý của Greibach nói rằng có những ngôn ngữ trong CFL không thể được quyết định là trong DCFL - làm thế nào để bạn chỉ định ngôn ngữ này? Nếu bạn có một ngữ pháp, bạn có thể diễn đạt nó trong Backus Naur Form (BNF), vì vậy Định lý của Greibach dường như ngụ ý rằng không có tập hợp con BNF nào thể hiện chính xác DCFL? Các ngôn ngữ đẩy xuống rõ ràng còn được gọi là "các từ lồng nhau". Lớp ngôn ngữ này tương đối mới nhưng có liên quan để phân tích cây theo thứ tự và các cấu trúc tương tự.
Jakob

Về vấn đề không thể giải quyết: ngôn ngữ là CFL nếu tồn tại ngữ pháp không ngữ cảnh (CFG) tạo ra nó. Nếu bạn được cấp CFG, bạn có thể quyết định liệu ngữ pháp này có phải là LR (k) hay không, do đó mang tính quyết định. (Điều tương tự cũng áp dụng cho automata đẩy xuống - thật dễ dàng để kiểm tra xem một PDA đã cho có xác định hay không.) Tuy nhiên, giả sử bạn có CFG không phải là LR (k) - điều này không có nghĩa là ngôn ngữ không phải là DCFL ; bạn chỉ có thể không thể tìm thấy một ngữ pháp LR (k) cho nó.
DaniCL

"Bạn có thể quyết định liệu ngữ pháp này có phải là LR (k)" cho k cố định hay không.
Sylvain

@Jakob: Định lý của Greibach không nói rõ điều đó, và ngay cả khi nó xảy ra, điều đó chỉ có nghĩa là các CFG tùy tiện không phải là một hình thức ký hiệu phù hợp cho DCFG, giống như chúng không phải là một hình thức ký hiệu tốt cho các ngôn ngữ thông thường (cho dù là CFG mô tả một ngôn ngữ thông thường là không thể giải quyết được). Tuy nhiên, không có gì sai khi chọn một lớp con của CFG (ví dụ: các ngữ pháp thông thường cho các ngôn ngữ thông thường).
Revierpost

Có một truyền thống về cách diễn đạt cẩu thả trong sách giáo khoa ở đây: họ có xu hướng đưa ra những tuyên bố như "không thể chắc chắn liệu CFL có thường xuyên / xác định hay không" khi điều đó thực sự có nghĩa là "không thể xác định được liệu CFG có mô tả chính xác / xác định hay không ngôn ngữ ".
Revierpost
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.