này không chính xác bài tập về nhà nhưng nó có liên quan đến nghiên cứu của tôi:Chuyển đổi một ngữ pháp vào LL (1) ngữ pháp: một số vấn đề
Một ngữ pháp ví dụ như:
E -> E + E | E * E | -E | (E) | id
Sau khi loại bỏ sự mơ hồ nó trở thành (bắt đầu từ điều hành ưu tiên thấp nhất)
E->-F|F
F->F+G|G
G->G*H|H
H->(E)|id
Và sau khi loại bỏ các đệ quy trái và thanh toán trái (không cần thiết trong trường hợp này) các LL1 ngữ pháp cuối cùng là:
E->-F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
Mà cho một lỗi bảng phân tích cú pháp miễn phí mà hoạt động tốt. Bây giờ về vấn đề này tôi đang phải đối mặt, cho rằng ngữ pháp là như thế này:
E -> E + E | E * E | id = E | (E) | id
Bây giờ tôi không thể tạo ra một bảng phân tích cú pháp mà không có xung đột, có nghĩa là ngữ pháp cuối cùng của tôi không phải là LL1. Dưới đây là các bước:
sau khi loại bỏ sự mơ hồ:
E->id=F|F
F->F+G|G
G->G*H|H
H->(E)|id
Và sau khi loại bỏ các đệ quy trái và thanh toán trái, ngữ pháp trở thành:
E->id=F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
Nhưng có sự mâu thuẫn trong bảng Parser mà tôi không thể loại bỏ, có nghĩa là có một số bước mà tôi đã bỏ lỡ, hoặc có một số sai lầm trong các bước mà tôi không thể tìm thấy. Xin vui lòng cho tôi biết những gì tôi đã làm sai, và làm thế nào để sửa lỗi này. Tôi đã làm việc về vấn đề này trong một thời gian dài.
Ưu tiên toán tử Unary Minus không thấp nhất, nó luôn cao nhất trên các toán tử nhị phân khác – ammar26