Câu trả lời là có. Tuy nhiên tôi sẽ không làm điều đó với trình phân tích cú pháp Earley vì có những trình đơn giản hơn có cùng khả năng.
Về cơ bản, trình phân tích cú pháp Earley thuộc về một họ các trình phân tích cú pháp không ngữ cảnh chung, tạo ra tất cả các phân tích cú pháp có thể cho một chuỗi nhất định, khi ngữ pháp không rõ ràng.
Có hai cách (ít nhất) để hiểu các trình phân tích cú pháp này:
w|w|+1AGFL(A)∩L(G)FG, lên đến không đổi tên thiết bị đầu cuối (do sản phẩm chéo).
Vì vậy, nếu FA chỉ tạo ra chuỗi đầu vào của bạn, ngữ pháp F
sẽ chỉ tạo ra rằng chuỗi (nếu nó đang trong L ( G ) , nếu không nó sẽ tạo ra ngôn ngữ rỗng ∅ ). Hơn nữa, nó tạo ra nó với tất cả các cây phân tích mà G có thể sử dụng để tạo ra nó.AFL(G)∅G
Ngữ pháp này thường được gọi là rừng phân tích cú pháp chung và tất cả các thuật toán phân tích cú pháp CF chung là phiên bản được tối ưu hóa ít nhiều của cấu trúc sản phẩm chéo, cho dù CYK, Earley, LR tổng quát hoặc LL, hoặc các thuật toán khác. Vì vậy, tất cả những gì tôi đang nói áp dụng cho họ quá.F
Nhưng, như bạn thấy, điều này khái quát để phân tích toàn bộ tập hợp thông thường, nếu có ai quan tâm đến việc đó.
ww
GF
Nếu muốn, điều này có thể được sử dụng để chỉ giữ các chuỗi có khoảng cách tối thiểu.
Tuy nhiên, điều này có thể được cải thiện một chút vì thành phần với các máy trạng thái hữu hạn có liên quan.
GwΣ∗
Có thể dễ dàng cắt tỉa công trình đó để có kết quả như trước, nhưng cách tốt nhất là xây dựng giao lộ được kiểm soát nhiều hơn, chẳng hạn như tổ chức lập trình động được sử dụng bởi hầu hết các trình phân tích cú pháp trong tài liệu, bao gồm cả Earley và sử dụng nó để tránh tạo ra quy tắc vô dụng bằng cách tính toán khoảng cách và hủy bỏ bất kỳ con đường tính toán nào khi vượt quá ngưỡng mong muốn. Lập trình động cũng có thể được sử dụng để tính trực tiếp parse-Forest (hoặc parse-tree) cho chuỗi có khoảng cách ngắn nhất đến đầu vào.