Làm thế nào để chứng minh rằng một ngữ pháp là không rõ ràng?


25

Vấn đề của tôi là làm thế nào tôi có thể chứng minh rằng một ngữ pháp không rõ ràng? Tôi có ngữ pháp sau:

Sstatementif expression then Sif expression then S else S

và làm cho nó thành một ngữ pháp rõ ràng, tôi nghĩ rằng nó chính xác:

  • SS1S2

  • S1if expression then Sif expression then S2 else S1

  • S2if expression then S2 else S2statement

Tôi biết rằng một ngữ pháp rõ ràng có một cây phân tích cho mỗi thuật ngữ.

Câu trả lời:


20

Có (ít nhất) một cách để chứng minh unambiguity của một văn phạm G=(N,T,δ,S) cho ngôn ngữ L . Nó bao gồm hai bước:

  1. Chứng minh LL(G) .
  2. Chứng minh [zn]SG(z)=|Ln|.

Bước đầu tiên khá rõ ràng: cho thấy rằng ngữ pháp tạo ra (ít nhất) các từ bạn muốn, đó là tính chính xác.

Bước thứ hai cho thấy có nhiều cây cú pháp cho các từ có độ dài nL có các từ có độ dài n - với 1. điều này hàm ý không rõ ràng. Nó sử dụng hàm cấu trúc của G , quay trở lại Chomsky và Schützenberger [1], cụ thể làGnLnG

SG(z)=n=0tnzn

với số lượng cây cú pháp G có cho các từ có độ dài n . Tất nhiên bạn cần phải có | L n | để làm việc nàytn=[zn]SG(z)Gn|Ln|

Điều tuyệt vời là (thường) dễ dàng có được cho các ngôn ngữ không ngữ cảnh, mặc dù việc tìm một dạng đóng cho t n có thể khó khăn. Biến đổi G thành một hệ phương trình của các hàm với một biến trên nonterminal:SGtnG

[A(z)=(A,a0ak)δ i=0k τ(ai) :AN] with τ(a)={a(z),aNz,aT.

Điều này có thể trông đáng ngại nhưng thực sự chỉ là một chuyển đổi cú pháp như sẽ trở nên rõ ràng trong ví dụ. Ý tưởng là tạo ra những biểu tượng thiết bị đầu cuối được tính theo số mũ của và vì hệ thống có dạng tương tự như G , z n xảy ra thường xuyên trong tổng như n thiết bị đầu cuối có thể được tạo ra bởi G . Kiểm tra Kuich [2] để biết chi tiết.zGznnG

Giải hệ phương trình này (đại số máy tính!) Thu được ; bây giờ bạn "chỉ" phải kéo hệ số (ở dạng đóng, chung). Các TCS Cheat Sheetđại số máy tính thường có thể làm như vậy.S(z)=SG(z)


Thí dụ

Hãy xem xét ngữ pháp đơn giản với các quy tắcG

.SaSabSbε

Rõ ràng là (bước 1, chứng minh bằng quy nạp). Có 2 nL(G)={wwRw{a,b}} palindromes có độ dàinnếunchẵn,0nếu không.2n2nn0

Thiết lập hệ số phương trình mang lại

S(z)=2z2S(z)+1

giải pháp của ai

.SG(z)=112z2

Các hệ số của trùng với số lượng palindromes, do đó G không rõ ràng.SG G


  1. Lý thuyết đại số về ngôn ngữ không ngữ cảnh của Chomsky, Schützenberger (1963)
  2. Về entropy của các ngôn ngữ không ngữ cảnh của Kuich (1970)

3
Như bạn đã biết @Raphael, sự mơ hồ là không thể quyết định, do đó, ít nhất một trong các bước của bạn không thể được cơ giới hóa. Bất cứ ý tưởng nào? Lấy một hình thức đóng cho ? tn
Martin Berger

2
Hệ thống phương trình có thể không thể giải được bằng thuật toán nếu mức độ quá cao và việc kéo các hệ số chính xác ra khỏi các hàm tạo có thể rất khó. Tuy nhiên, trong "thực hành", người ta thường xử lý các ngữ pháp có "độ" nhỏ - lưu ý rằng, dạng bình thường của Chomsky dẫn đến các hệ phương trình ở mức độ nhỏ - và có các phương pháp để có ít nhất -asymptotics cho các hệ số ; điều này có thể đủ để thiết lập sự mơ hồ. Lưu ý rằng để chứng minh sự rõ ràng, hiển thị mà không kéo hệ số là đủ; việc chứng minh danh tính này có thể khó khăn, mặc dù. SL(z)=SG(z)
Raphael

Cảm ơn bạn @Raphael. Bạn có biết bất kỳ văn bản nào phát triển chi tiết về mức độ không ổn định xuất hiện ngay cả khi người ta sử dụng ví dụ như hình thức bình thường của Chomsky không? (Tôi không thể nắm giữ Kuich.)
Martin Berger

@MartinBerger Tôi vừa khám phá lại nhận xét của bạn trong danh sách việc cần làm của tôi; xin lỗi vì sự im lặng dài Có ba bước mà (tôi nghĩ) không tính toán nói chung: 1) Xác định . 2) Tính toán | L n | . 3) Xác định [ z n ] S g ( z ) . Cụ thể, đại diện nào của L để sử dụng cho 2)? SG|Ln|[zn]Sg(z)L
Raphael

Tại sao đại diện của là một vấn đề? Ví dụ, chúng ta có thể sử dụng bất kỳ cách nào để thể hiện CFG cho trình biên dịch. Có lẽ bạn có nghĩa là làm thế nào để đại diện cho LL ? Ln
Martin Berger

6

Đây là một câu hỏi hay, nhưng một số Googling sẽ nói với bạn rằng không có phương pháp chung nào để quyết định sự mơ hồ , vì vậy bạn cần làm cho câu hỏi của mình cụ thể hơn.


2
OP yêu cầu các kỹ thuật chứng minh, không phải thuật toán.
Raphael

Tôi cũng nghĩ thế; nó có thể được đề cập trong câu hỏi
rebierpost

1
Google không phải là một lời tiên tri của sự thật, bởi vì kiến ​​thức không dân chủ và kết quả của Google là như vậy. Tôi sẽ không dựa vào Google trong trường hợp này, bởi vì mọi người thường sao chép con mèo này từ con khác mà không kiểm tra tính chính xác của những gì chúng sao chép. Nếu không đưa ra một bằng chứng, họ có thể sai.
SasQ

5
@SasQ: Bạn đọc những lời của tôi quá đúng theo nghĩa đen. Những gì Google cung cấp cho tôi là các URL đến các nguyên tử giải thích mọi thứ.
reinierpost

4

Đối với một số ngữ pháp, một bằng chứng bằng cảm ứng (trên độ dài từ) là có thể.


Ví dụ, hãy xem xét một ngữ pháp trên Σ = { a , b } được đưa ra bởi các quy tắc sau:GΣ={a,b}

SaSabSbε

Tất cả các từ có độ dài trong L ( G ) - chỉ có ε - chỉ có một trái nguồn gốc.1L(G)ε

Giả sử rằng tất cả các từ có độ dài đối với một số n N chỉ có một dẫn xuất trái.nnN

Bây giờ xem xét tùy ý đối với một số n >w=w1wwnL(G)Σn . Rõ ràng, w 1Σ . Nếu w 1 = a , chúng ta biết rằng quy tắc đầu tiên trong mọi đạo hàm trái phải là S a S a ; nếu w 1 = b , nó phải là S n>0w1Σw1=aSaSaw1=bSbSb. Điều này bao gồm tất cả các trường hợp. Bằng cách giả thuyết cảm ứng, chúng ta biết rằng có đúng một trái nguồn gốc cho . Kết hợp lại, chúng tôi kết luận rằng có chính xác một đạo hàm trái cho w .ww


Điều này trở nên khó khăn hơn nếu

  • có nhiều thiết bị đầu cuối,
  • ngữ pháp không tuyến tính và / hoặc
  • ngữ pháp là đệ quy trái.

Nó có thể giúp củng cố yêu cầu đối với tất cả các hình thức cảm tính (nếu ngữ pháp không có các thiết bị đầu cuối không sinh sản) và "gốc" không đầu cuối.

Tôi nghĩ rằng việc chuyển đổi sang hình thức bình thường Greibach duy trì sự mơ hồ (un), để áp dụng bước này trước tiên có thể xử lý đệ quy trái độc đáo.

Điều quan trọng là xác định một tính năng của mỗi từ sửa chữa (ít nhất) một bước phái sinh. Phần còn lại theo quy nạp.


3

Về cơ bản, đó là một vấn đề thế hệ trẻ em. Bắt đầu với biểu thức đầu tiên và tạo ra các phần tử con .... Tiếp tục thực hiện đệ quy (DFS) và sau một vài lần lặp lại, hãy xem liệu bạn có thể tạo cùng một biểu thức mở rộng từ hai đứa trẻ khác nhau không. Nếu bạn có thể làm điều đó, nó mơ hồ. Không có cách nào để xác định thời gian chạy của thuật toán này. Giả sử nó an toàn, sau khi có thể tạo ra 30 cấp độ cho trẻ em :) (Tất nhiên là nó có thể đánh bom vào ngày 31)


1
OP yêu cầu các kỹ thuật chứng minh, không phải thuật toán.
Raphael

2
đó không thể là một cách để chứng minh liệu một ngữ pháp có mơ hồ hay không. Như một vấn đề thực tế khi vụ đánh bom đó xảy ra là không thể giải quyết được.
Sнаđошƒаӽ
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.