Bạn không bao giờ cần CNF. Nó có nhược điểm là thay đổi cấu trúc ngữ pháp. Nhưng bạn cần phải giới thiệu các thiết bị đầu cuối trung gian để không có phía bên phải dài hơn 2 (dạng 2) vì độ dài RHS xác định độ phức tạp. Nỗ lực tốt nhất để giải thích điều đó bằng trực giác là, nếu bộ nhớ phục vụ, một bài báo của Beau Shiel, "Quan sát về phân tích cú pháp tự do bối cảnh", được xuất bản năm 1976 trong một hội nghị ngôn ngữ học tính toán. Thuật toán của Earley sử dụng 2 hình thức ngầm. Nó chỉ được ẩn trong thuật toán. Về phục hồi và xử lý rừng phân tích, bạn nên xem web tại "phân tích rừng giao cắt". Nó thực sự rất đơn giản. Nhiều bài viết trên web, nếu bạn nhận được (từ trích dẫn hoặc bảng nội dung) các tiêu đề hoặc tác giả để tìm kiếm chúng trực tiếp.
Trên thực tế, bạn có thể làm được nhiều hơn CF và vẫn có được các khu rừng phân tích trong thời gian đa thức. Câu hỏi là, đôi khi: bạn có thể làm gì với nó một khi bạn có nó?
Một mục đích của bài viết cuối cùng mà bạn đề cập là chỉ ra rằng các thuật toán phức tạp (như GLR) không nhất thiết phải mua bất cứ thứ gì trong thời gian hoặc không gian và có thể thay đổi khu rừng phân tích của bạn.
Một nhận xét về giảng dạy. Tôi nghĩ Earley, như vậy, rất phức tạp cho việc giảng dạy và có thể được thay thế bằng các thuật toán đơn giản hơn với cùng một nội dung giáo dục. Dạy là về khái niệm hoặc công nghệ. Trong thuật toán của Earley, các khái niệm thiết yếu được ẩn giấu trong sự phức tạp của các chi tiết và theo quan điểm công nghệ, nó đã lỗi thời. Đó là một bài báo tuyệt vời, nhưng điều đó không có nghĩa đó là cách tiếp cận sư phạm tốt nhất.
Có thể có nhiều thông tin trong tài liệu ngôn ngữ học tính toán hơn trong các kênh khoa học máy tính thông thường. Tôi không có cuốn sách Ceriel-Grune-Jacobs, nhưng tôi sẽ ngạc nhiên nếu họ không có tất cả các tài liệu tham khảo phù hợp (mặc dù tôi không chắc về tiêu chí lựa chọn của họ).
Bổ sung sau một yêu cầu trong một bình luận (tháng 7, 2013)
Điều này bổ sung cho thấy sự tồn tại của các thuật toán đơn giản hơn Earley.
Như tôi đã nói, tìm kiếm trang web tại "phân tích rừng giao lộ" sẽ nhanh chóng cung cấp cho bạn các tài liệu tham khảo, từ đó bạn có thể đào sâu hơn.
Ý tưởng cơ bản là tất cả các con đường phân tích cú pháp với việc xây dựng một khu rừng chung không gì khác ngoài việc xây dựng giao lộ cũ của Bar Hillel, Perles và Shamir cho một ngôn ngữ thông thường và ngôn ngữ không ngữ cảnh, sử dụng một máy tự động hữu hạn và ngữ pháp không ngữ cảnh. Đưa ra ngữ pháp CF, bạn áp dụng cấu trúc cho một máy tự động tầm thường chỉ nhận ra chuỗi đầu vào của bạn. Đó là tất cả. Khu rừng được chia sẻ chỉ là ngữ pháp cho giao lộ. Nó có liên quan đến ngữ pháp gốc thông qua một phép đồng hình, chỉ nhận ra chuỗi đã cho, nhưng với tất cả các cây phân tích của ngữ pháp gốc cho đến sự đồng hình đó (nghĩa là đổi tên đơn giản của các đầu cuối không).
Ngữ pháp kết quả chứa rất nhiều nội dung vô dụng, không phải là thiết bị đầu cuối và quy tắc, không thể truy cập được từ tiên đề (không được tìm thấy trong một chuỗi có nguồn gốc từ ký hiệu ban đầu) hoặc không có năng suất (không thể xuất phát từ thiết bị đầu cuối chuỗi).
Sau đó, hoặc bạn phải làm sạch nó bằng một bàn chải tốt ở cuối (có thể dài nhưng đơn giản về mặt thuật toán), hoặc bạn có thể cố gắng cải thiện cấu trúc để cuối cùng có ít lông tơ vô dụng hơn.
Ví dụ, cấu trúc CYK chính xác là như vậy, nhưng được tổ chức sao cho tất cả các quy tắc và các thiết bị đầu cuối được tạo ra đều có hiệu quả, mặc dù nhiều quy tắc có thể không truy cập được. Điều này được mong đợi từ một kỹ thuật từ dưới lên.
Các kỹ thuật từ trên xuống (chẳng hạn như các kỹ thuật dựa trên LR (k)) sẽ tránh các quy tắc không thể truy cập và các thiết bị đầu cuối, nhưng sẽ tạo ra các quy tắc không hiệu quả.
Tôi nghĩ rằng rất nhiều việc đánh răng có thể đạt được bằng cách sử dụng đầy đủ các con trỏ, nhưng tôi đã không xem xét điều này trong một thời gian dài.
Tất cả các thuật toán hiện có thực sự theo mô hình đó. Vì vậy, đó thực sự là trung tâm của vấn đề, và nó rất đơn giản. Vậy thì tại sao lại chôn nó trong sự phức tạp?
Nhiều "tối ưu hóa" được đề xuất trong phân vùng thường dựa trên gia đình trình phân tích cú pháp LR (k), LL (k), có thể với một số bao thanh toán tĩnh của các công trình này (Earley không có bao thanh toán tĩnh). Nó thực sự có thể được áp dụng cho tất cả các kỹ thuật đã biết, bao gồm các trình phân tích cú pháp ưu tiên cũ. Tôi đặt "tối ưu hóa" giữa các trích dẫn bởi vì nó thường không rõ ràng những gì bạn đang tối ưu hóa, hoặc thậm chí liệu bạn có thực sự tối ưu hóa nó hay không, liệu lợi ích của việc cải thiện có đáng để tăng độ phức tạp của trình phân tích cú pháp của bạn hay không. Bạn sẽ tìm thấy ít dữ liệu khách quan, chính thức hoặc thử nghiệm, về điều này (có một số), nhưng nhiều tuyên bố khác. Tôi không nói rằng không có gì quan tâm. Có một số ý tưởng thông minh.
Bây giờ, khi bạn đã biết ý tưởng cơ bản, "tối ưu hóa" hoặc cải tiến thường có thể được giới thiệu tĩnh (có thể tăng dần) bằng cách xây dựng một máy tự động đẩy xuống từ ngữ pháp, theo loại kỹ thuật xây dựng trình phân tích cú pháp mà bạn quan tâm, sau đó áp dụng cấu trúc sản phẩm chéo cho giao điểm với máy tự động đó (gần giống như thực hiện với ngữ pháp) hoặc với ngữ pháp bắt nguồn từ máy tự động đó.
Sau đó, bạn có thể giới thiệu chuông và còi, nhưng đó chủ yếu là các chi tiết công nghệ.
Philosophiæ Naturalis Principia Mathematica của Isaac Newton được cho là một phần lớn của vật lý và toán học. Tôi không nghĩ nó nằm trong danh sách đọc của nhiều sinh viên. Tất cả những thứ khác đều bằng nhau, tôi không nghĩ rằng nó rất hữu ích để dạy thuật toán của Earley, mặc dù nó là một phần lịch sử quan trọng. Học sinh có đủ để học như nó là. Có nguy cơ bị nhiều người bắn hạ, tôi nghĩ rất giống với bài báo Knuth LR (k). Nó là một phần tuyệt vời của phân tích lý thuyết, và có lẽ là một bài đọc quan trọng cho một nhà lý luận. Tôi hoàn toàn nghi ngờ rằng nó rất cần thiết cho việc xây dựng các trình phân tích cú pháp với tình trạng hiện tại của công nghệ, cả phần cứng và phần mềm. Thời gian đã qua khi phân tích cú pháp là một phần quan trọng của thời gian biên dịch, hoặc khi tốc độ của trình biên dịch là một vấn đề quan trọng (tôi biết một tập đoàn đã chết vì biên dịch chi phí khoảng 30 năm trước). Chuyên gia phân tích cú pháp có thể muốn học kiến thức chuyên ngành đó tại một số điểm, nhưng sinh viên trung bình về khoa học máy tính, lập trình hoặc kỹ thuật không cần nó.
Nếu sinh viên phải dành nhiều thời gian hơn cho việc phân tích cú pháp, có những phần mở rộng khác có thể hữu ích hơn và có tính hình thức hơn, chẳng hạn như những phần mở rộng được sử dụng trong ngôn ngữ học tính toán. Vai trò đầu tiên của việc dạy học là trích xuất những ý tưởng đơn giản cấu trúc kiến thức khoa học, không buộc sinh viên phải chịu đựng những gì các nhà khoa học nghiên cứu phải chịu (sinh viên tiến sĩ ngoại trừ: đó là một nghi thức của đoạn văn :-).
Giấy phép CC BY-SA 3.0 từ tác giả