Có bất kỳ thuật toán phân tích CFG không chung nào nhận ra EPAL không?


23

EPAL, ngôn ngữ của các palindromes, được định nghĩa là ngôn ngữ được tạo bởi ngữ pháp không ngữ cảnh rõ ràng sau đây:

Smộtmột

Sbb

SmộtSmột

SbSb

EPAL là 'nguyên nhân' của nhiều thuật toán phân tích cú pháp: Tôi chưa gặp phải bất kỳ thuật toán phân tích cú pháp nào cho các CFG rõ ràng có thể phân tích bất kỳ ngữ pháp nào mô tả ngôn ngữ. Nó thường được sử dụng để chỉ ra rằng có những CFG rõ ràng không thể được phân tích cú pháp bởi một trình phân tích cú pháp cụ thể. Điều này truyền cảm hứng cho câu hỏi của tôi:

Có một số thuật toán phân tích chỉ chấp nhận các CFG rõ ràng hoạt động trên EPAL không?

Tất nhiên, người ta có thể thiết kế một trình phân tích cú pháp hai chiều đặc biệt cho ngữ pháp phân tích ngôn ngữ theo thời gian tuyến tính. Tôi quan tâm đến các phương pháp phân tích cú pháp chưa được thiết kế riêng cho EPAL.


1
Tôi gần như sợ hỏi: điều gì sai với LL (1) bởi dòng dõi đệ quy?
Raphael

3
Hậu duệ không đệ quy không thể xử lý EPAL vì ngôn ngữ không phải là LL (k) cho bất kỳ k. Hậu duệ với quay lui có thể xử lý ngữ pháp trong thời gian , nhưng đó là một thuật toán chung với hành vi trường hợp xấu nhất theo cấp số nhân, đó không phải là điều tôi đang tìm kiếm. Ôi(n2)
Alex ten Brink

không theo cấp số nhân, nó là bậc hai. O ( 2 N ) là cấp số nhân. O(N2)O(2N)
Victor Stafusa

1
@Victor: quay lui có hành vi theo cấp số nhân đối với một số ngữ pháp, chỉ không dựa trên ngữ pháp cụ thể này. Tuy nhiên, nó là một thuật toán hoạt động trên các ngữ pháp mơ hồ giảm giá nó như là một câu trả lời cho câu hỏi của tôi.
Alex ten Brink

1
@jmad: ý định của tôi không phải là phân tích ngôn ngữ (bạn có thể làm điều đó một cách tầm thường trong thời gian tuyến tính), mà là để thỏa mãn sự tò mò của tôi: Tôi đã thấy nó được sử dụng như một ví dụ về ngôn ngữ không thể phân tích cú pháp bằng phương pháp phân tích cú pháp rất nhiều lần tôi tò mò nếu có một số phương pháp phân tích cú pháp nhận ra nó.
Alex ten Brink

Câu trả lời:


14

Hãy xem xét bản phác thảo sau đây về một chiến lược phân tích rủi ro của riêng bạn.

Thay vì chỉ đọc đầu vào từ một đầu, chúng tôi đọc từ cả hai phía và tìm kiếm các quy tắc phù hợp. Chúng ta có thể làm điều này trong phong cách gốc đệ quy; trong một cuộc gọi đến , tìm tiền tố w và hậu tố v cho đầu vào sao cho có quy tắc A w B v , hạ xuống B ( ) trên từ còn lại. Nếu không có quy tắc phù hợp, từ chối từ.Một()wvMộtwBvB()

Thuật toán này phân tích tất cả các ngữ pháp tuyến tính, rõ ràng. Phải mất thời gian tuyến tính nếu tất cả các cặp quy tắc A w ' B ' v 'w p w ' hoặc v s v ' ¹. Điều này bao gồm EPAL. Nếu không chúng ta cần phải nhìn về phía trước vì vậy chúng tôi có thể mất Θ ( n 2 ) thời gian.MộtwBvMộtw'B'v'wpw'vSv'Θ(n2)

Ý tưởng này hoàn toàn không hoạt động đối với các ngữ pháp phi tuyến tính. Các ngữ pháp tuyến tính nhưng mơ hồ nói chung có thể không được phân tích cú pháp mà không quay lại (ít nhất là đối với các đầu vào phủ định).


  1. có nghĩa ở đây là w v v w , tức là không từ nào là tiền tố của từ kia. s cũng tương tự như đối với hậu tố.wpvwvvwS

1
Xuất sắc! Chính xác những gì tôi đang tìm kiếm. Thật tuyệt khi một ngôn ngữ không phải là cho bất kỳ k nào có thể phân tích cú pháp bằng thuật toán đơn giản như vậy. NLR(k)k
Alex ten Brink

1
Sau khi suy nghĩ thêm, tôi phát hiện ra một lỗi nhỏ trong mô tả của bạn: ngữ pháp tuyến tính không rõ ràng, nhưng không có tiền tố duy nhất như bạn mô tả. Vẫn còn một tiền tố duy nhất, nhưng bạn có thể phải nhìn vào bên trong nonterminal để lấy nó và thời gian chạy của bạn trở thành O ( n 2SmộtMộtb|mộtBb,Mộtmột,Bb . Thuật toán của bạn không hoạt động trên E P A L mặc dù. Ôi(n2)EPMộtL
Alex ten Brink

@AlextenBrink Bắt tốt. Tôi đã chỉnh sửa để giải thích cho việc này.
Raphael
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.