Thuật toán phân tích mã hóa chương trình ClassifiedR (1)
Các IELR thuật toán (1) phân tích cú pháp đã được phát triển vào năm 2008 bởi Joel E. Denny như một phần của tiến sĩ nghiên cứu dưới sự giám sát của Brian A. Malloy tại Đại học Clemson. Thuật toán ClassifiedR (1) là một biến thể của thuật toán gọi là "tối thiểu" LR (1) được phát triển bởi David Pager vào năm 1977 , bản thân nó là một biến thể của thuật toán phân tích cú pháp LR (k) được phát minh bởi Donald Knuth vào năm 1965 . IE trong ClassifiedR (1) là viết tắt của loại bỏ bất cập (xem phần cuối).
Thuật toán LR (1)
Phần LR (1) của ClassifiedR (1) là viết tắt của L eft sang phải, R dẫn xuất cực đại với 1 mã thông báo nhìn. Trình phân tích cú pháp LR (1) cũng được gọi là trình phân tích cú pháp chính tắc. Lớp thuật toán phân tích cú pháp này sử dụng chiến lược phân tích cú pháp từ dưới lên, giảm ca với một ngăn xếp và bảng chuyển trạng thái xác định hành động tiếp theo sẽ thực hiện trong quá trình phân tích cú pháp.
Trong lịch sử, các thuật toán LR (1) đã bị bất lợi bởi các yêu cầu bộ nhớ lớn cho các bảng chuyển tiếp của chúng. Cải tiến của Pager là phát triển phương pháp kết hợp các trạng thái chuyển tiếp khi bảng chuyển tiếp được tạo, giảm đáng kể kích thước của bảng. Do đó, thuật toán của Pager làm cho trình phân tích cú pháp LR (1) cạnh tranh với các chiến lược phân tích cú pháp khác liên quan đến hiệu quả không gian và thời gian. Cụm từ "trình phân tích cú pháp tối thiểu LR (1)" dùng để chỉ kích thước tối thiểu của bảng chuyển đổi được giới thiệu bởi thuật toán của Pager.
Hạn chế của thuật toán của Pager
Các thuật toán tối thiểu LR (1) tạo ra bảng chuyển đổi dựa trên một ngữ pháp đầu vào cụ thể cho ngôn ngữ được phân tích cú pháp. Các ngữ pháp khác nhau có thể tạo ra cùng một ngôn ngữ. Thật vậy, một ngữ pháp không phải là LR (1) có thể tạo ra một ngôn ngữ có thể phân tích cú pháp LR (1). Trong thực tế, các trình tạo bộ phân tích cú pháp LR (1) chấp nhận các ngữ pháp không phải là LR (1) với một đặc điểm kỹ thuật để giải quyết xung đột giữa hai lần chuyển trạng thái có thể ("xung đột giảm ca") để phù hợp với thực tế này. Denny và Malloy nhận thấy rằng thuật toán của Pager không tạo ra các trình phân tích cú pháp đủ mạnh để phân tích các ngôn ngữ LR (1) khi được cung cấp một số ngữ pháp không phải là LR (1) mặc dù ngữ pháp không phải là LR (1) tạo ra ngôn ngữ LR (1).
Denny và Malloy cho thấy giới hạn này không chỉ đơn thuần là học thuật bằng cách chứng minh rằng Gawk và Gpic, cả hai phần mềm trưởng thành, được sử dụng rộng rãi, thực hiện các hành động phân tích cú pháp không chính xác.
Những cải tiến của ClassifiedR (1)
Denny và Malloy đã nghiên cứu nguồn gốc của sự thiếu sót của thuật toán của Pag bằng cách so sánh bảng chuyển đổi được tạo bởi thuật toán của Pager với bảng chuyển đổi của một ngữ pháp LR (1) tương đương và xác định hai nguồn của những gì họ gọi là bất cập xuất hiện trong bảng chuyển đổi từ Bảng chuyển đổi thuật toán nhưng không có trong bảng chuyển tiếp LR (1). Thuật toán ClassifiedR (1) (Inadequacy Elimination LR (1)) của Denny và Malloy là một thuật toán được thiết kế để loại bỏ những bất cập này khi tạo bảng chuyển đổi có kích thước gần giống với thuật toán của Pager.