Chuyển đổi PEG sang BNF


7

Các ngữ pháp biểu thức phân tích cú pháp (PEG) không rõ ràng và có cú pháp tương tự bề ngoài với BNF , nhưng bao gồm ba điểm khác biệt quan trọng:

  1. Các toán tử lựa chọn ra lệnh e1 / e2 / e3.
  2. Các vị ngữ và vị ngữ &.
  3. Các nhà điều hành không !.

Tôi có một vài câu hỏi:

  1. Các ngôn ngữ được PEG công nhận có phải không có ngữ cảnh không?
  2. Nếu câu trả lời cho (1) là không, có bất kỳ hình thức ngữ pháp biểu cảm nào được đảm bảo chỉ tạo ra các ngữ pháp không rõ ràng không? Cụ thể, sẽ giảm &!chỉ mang lại ngữ pháp không ngữ cảnh?
  3. Nếu tất cả các PEG không có ngữ cảnh, chúng có thể chuyển đổi thành BNF tương đương thông qua thuật toán không?

Bối cảnh là tôi muốn tính toán các hàm tạo cho thư viện PEG bằng định lý liệt kê Chomsky Thẻ Schützenberger . Điều này dường như đòi hỏi một đặc điểm kỹ thuật của ngữ pháp ở dạng chuẩn tương tự BNF.

Câu trả lời:


6
  1. Các ngôn ngữ được PEG công nhận có phải không có ngữ cảnh không?

Không, như Brian Ford đã chỉ ra trong bài viết giới thiệu PEG năm 2004 của mình , từ đó là trích dẫn ngắn sau đây:

Định lý: Lớp PEL bao gồm các ngôn ngữ không ngữ cảnh.

Bằng chứng: Ngôn ngữ ví dụ cổ điển không có ngữ cảnh, nhưng chúng ta có thể nhận ra nó bằng PEG , trong đó R chứa các định nghĩa sau: anbncnG=({A,B,D},{a,b,c},R,D)

AaAb/ε
BbBc/ε
D&(A!b)aB!.

 

  1. Nếu câu trả lời cho (1) là không, có bất kỳ hình thức ngữ pháp biểu cảm nào được đảm bảo chỉ tạo ra các ngữ pháp không rõ ràng không? Đặc biệt, sẽ giảm vàchỉ mang lại ngữ pháp không ngữ cảnh?&!

Ngay cả khi không có(và do đó không có , vì nó được định nghĩa chính thức theo thuật ngữ ), bạn vẫn sẽ phải đối phó với phần bù ngầm ẩn trong định nghĩa của lựa chọn theo thứ tự. Tôi không có ví dụ cụ thể về lựa chọn theo thứ tự dẫn đến không phải CFL, nhưng tôi sẽ cố gắng tìm một bằng cách bắt đầu với hai CFG và có sự khác biệt không phải là CFL và có thể được chuyển đổi thành PEG và . Bây giờ, nếu là một số ký hiệu không có trong một ngôn ngữ, thì PEG sẽ nhận ra , không phải là CFL.!&!L1L2P1P2cP2/P1cL2(L1L2)c

  1. Nếu tất cả các PEG không có ngữ cảnh, chúng có thể chuyển đổi thành BNF tương đương thông qua thuật toán không?

Nếu phỏng đoán của tôi ở trên là chính xác, thì câu hỏi này không thể áp dụng được, nhưng trong mọi trường hợp không có thuật toán nào tôi biết để chuyển đổi giữa PEG và CFG, và tôi tin rằng sự tương đương của PEG và CFG là không thể giải quyết được. Thực tế này làm phức tạp các thủ tục bằng chứng tôi đề xuất ở trên. :)


Tôi không chắc chắn tôi làm theo ví dụ . Từ bài báo "PEG sử dụng toán tử lựa chọn ưu tiên '/'. Toán tử này liệt kê các mẫu thay thế sẽ được kiểm tra theo thứ tự, sử dụng vô điều kiện bằng cách sử dụng khớp đầu tiên thành công." Bất kỳ chuỗi nào bao gồm sẽ không thành công điều kiện đầu tiên, vì vậy ngôn ngữ được nhận dạng là , rõ ràng không có ngữ cảnh. P1/P2CCL1(L2C)
Đệ quy

"Tôi tin rằng sự tương đương của PEG và CFG là không thể giải quyết được" Điều đó có thể đúng nhưng không liên quan. Nhiều thủ tục tạo ra các thông số kỹ thuật tương đương (ví dụ: chuyển đổi sang Chomsky Bình thường) ngay cả khi quyết định sự tương đương của các ngữ pháp tùy ý là không thể giải quyết được.
Đệ quy

1
@recursively: đó không phải là cách PEG ra lệnh lựa chọn hoạt động. Dự phòng cho chỉ xảy ra nếu không khớp. Nếu nó phù hợp, thực tế là mô hình sau đó không thành công không gây ra dự phòng. Lựa chọn theo thứ tự không chỉ là một cách phân biệt các phân tích cú pháp. L2cL1
rici

1
À, TIL. Ngôn ngữ sau đó sẽ không phải là ? Trong mọi trường hợp, điểm cơ bản của bạn có vẻ đúng, vì vậy định lý Chomsky tầm Schützenberger không áp dụng. Tôi sẽ cần chuyển dự án của mình để hỗ trợ thư viện phân tích cú pháp chuẩn hơn dựa trên CFG. Cảm ơn! L1(L2L1)c
RecursivelyIronic

@RecursivelyIronic: Vâng, bạn nói đúng, tôi nên viết nó dưới dạng khác biệt đã đặt và tôi đã sửa câu trả lời. Cảm ơn. (Cá nhân tôi thấy ngữ nghĩa PEG khó lý giải, nhưng một số điều đó thiếu kinh nghiệm. Tất cả đều rất tuần hoàn. Nhưng tôi sẽ không sử dụng chúng trong ngữ cảnh mà tôi muốn phân tích hoặc biến đổi ngữ pháp, chính xác là vì khó khăn trong việc phân tích và / hoặc chuyển đổi các ngữ pháp PEG.)
rici
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.