Tôi đã sử dụng lex/yacc và bây giờ tôi đang cố chuyển sang ANTLR. Mối quan tâm chính là ANTLR là một trình phân tích cú pháp LL (*) không giống yacc là LALR. Tôi đã từng suy nghĩ từ dưới lên và tôi không biết chính xác lợi thế của ngữ pháp LL là gì. Mọi người nói rằng ngữ pháp LL dễ hiểu hơn và phổ biến hơn trong những ngày này. Nhưng có vẻ như các trình phân tích cú pháp LR mạnh hơn, ví dụ: Các trình phân tích cú pháp LL không có khả năng xử lý các cuộc truy tìm trái, mặc dù dường như có một số cách giải quyết.LALR vs LL parser
Câu hỏi đặt ra là lợi thế của ngữ pháp LL đối với LALR là gì? Tôi sẽ đánh giá cao nếu ai đó có thể cho tôi một số ví dụ. Liên kết đến các bài viết hữu ích cũng sẽ tuyệt vời.
Cảm ơn sự giúp đỡ của bạn trước!
(Tôi thấy đây là một nguồn lực lớn:. What advantages do LL parsers have over LR parsers?, nhưng nó sẽ đã tốt hơn với một số ví dụ)
Nếu ai đó đưa cho bạn trình tạo trình phân tích cú pháp, theo định nghĩa, nó sẽ "dễ thực hiện". Trong trường hợp đó, bạn chọn trình tạo trình phân tích cú pháp dễ dàng xử lý các lớp ngôn ngữ lớn nhất, để giảm thiểu các nỗ lực của bạn. Từ quan điểm, IMHO, LR thắng LL khá dễ dàng. GLR thắng trên LR khá dễ dàng. –
Tôi đồng ý, nhưng dù sao LL vẫn dễ thực hiện. Tôi đã chỉ ra rằng LR thường yêu cầu sử dụng một công cụ. Tôi thấy nó rất hấp dẫn mà bạn có thể viết tay đệ quy gốc và mã và ngữ pháp đi tay trong tay. –
Có, các trình phân tích cú pháp hấp dẫn và mọi người nên biết về chúng. Khi ngữ pháp của bạn trở nên lớn, nó là bất tiện để ép nó vào hình dạng LL, và tại một số (khá nhỏ) điểm thuận tiện của LR thắng hơn sự đơn giản khái niệm trong đầu của bạn. LR là khá dễ hiểu nếu bạn không xây dựng trình tạo trình phân tích cú pháp, và nó không giống như không có nhiều người xung quanh. –