Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin
Trang 1Bài giảng 4 - Phân tích cú pháp
và các phương pháp phân tích cơ bản
Nguyễn Phương Thái
Bộ môn Khoa học Máy tính
Trang 2Bài toán
văn phạm và biểu diễn cấu trúc này
bằng một cây (gọi là cây phân tích)
hoặc theo một cấu trúc nào đó tương đương với cây.
Trang 3Băi toân (tiếp)
Phân tích từ vự ng
Phân tích cú pháp
cây phân tích Phân tích
ngữ nghĩa
Bảng ký
yêu cầ u lấ y từ tố
từ tố
Chương
trình
nguồ n
Trang 4Văn phạm
Mọi ngôn ngữ lập trình đều có các luật mô tả các cấu trúc cú pháp.
Một chương trình nguồn viết đúng phải tuân theo các luật mô tả này - tức là viết đúng văn phạm (hay
đúng ngữ pháp)
Văn phạm của một ngôn ngữ lập trình có cấu trúc có
thể mô tả bằng văn phạm phi ngữ cảnh và biểu
diễn theo ký pháp BNF hoặc đồ thị chuyển.
Trang 5Các phương pháp phân tích
Cơ sở của phân tích cú pháp đối với lớp VPPNC
là định lý Bài toán thành viên với ngôn ngữ phi ngữ cảnh Người ta đã chứng minh được định lý này bằng cách đưa ra các giải thuật cài đặt trên thực tế, ví dụ như:
Thuật toán phân tích Top-Down
Thuật toán phân tích Bottom - Up
Thuật toán phân tích CYK
(Coke-Younger-Kasami)
Thuật toán phân tích Earley
Trang 6Các phương pháp phân tích
(tiếp)
hoặc xây dựng suy dẫn sinh ra nó, do
đó ta sẽ dựng được cây suy dẫn.
phân tích, ta hay tiến hành từ một phía của câu, kiểm tra lần lượt các thành
phần của câu đó cho đến hết (đa số từ trái sang phải).
Trang 7Hai chiến lược phân tích chính
Chiến lược phân tích top-down (trên xuống): cho một văn phạm phi ngữ cảnh G = (, , P, S) và một câu cần phân tích w Ta xuất phát từ điểm khởi đầu,
nghĩa là từ S, áp dụng các suy dẫn trái, tiến từ trái qua phải thử tạo ra câu đưa vào phân tích w.
Chiến lược phân tích bottom-up (dưới lên): Quá trình ngược lại với phân tích top-down, xuất phát từ chính câu vào phân tích w, bằng cách áp dụng thu gọn các suy dẫn phải, tiến hành từ trái qua phải để đi tới ký hiệu đầu S của văn phạm.
Trang 8Hai chiến lược phân tích chính (tiếp)
Điều kiện để các thuật toán trên là dừng như sau:
Phân tích top-down (phân tích trái) là dừng khi và chỉ khi G không có đệ quy trái
Phân tích bottom-up (phân tích phải) là dừng khi và chỉ khi G không chứa suy dẫn A=>+ A
và không có sản xuất B (sản xuất rỗng)
Trang 9Khó khăn khi phân tích
Gặp các luật có nhiều lựa chọn ở vế phải như:
A 1 | 2 | 3 | k , k 2
Giải quyết: có hai chiến lược:
1 Phân tích quay lui (backtrack): ta thử lần lượt các i
(1 i k ) để tìm i thích hợp Rất tốn thời gian.
2 Phân tích không quay lui (without-backtrack) Trong việc tìm sản xuất thích hợp, ta biết cách xác định sản xuất duy nhất thích hợp mà không cần phải thử các sản xuất khác Các phương pháp phân tích như vậy gọi là phân tích tất định (deterministic parsing).
Trang 10Phân tích Top-Down
Chuẩn bị:
Với một VPPNC cho trước, đánh dấu mọi lựa chọn trong từng sản xuất Ví dụ: nếu các sản xuất dạng SaSbS | aS | c thì aSbS là lựa
chọn thứ nhất, aS là lựa chọn thứ hai và c là lựa chọn cuối của sản xuất S
Dùng một con trỏ chỉ đến xâu vào Ký hiệu trên xâu vào do con trỏ chỉ đến gọi là ký hiệu vào hiện tại Vị trí đầu tiên của con trỏ là ký hiệu bên trái nhất của xâu vào
Trang 11Phân tích Top-Down (tiếp)
Tiến hành các bước đệ quy sau:
Nếu nút đang xét là một nút ký hiệu không kết thúc A thì lấy lựa chọn đầu tiên, ký hiệu là X1 Xk Lại lấy
nút X1 làm nút đang xét Trường hợp k = 0 (sản xuất
) thì lấy nút ngay bên phải A làm nút đang xét.
Nếu nút đang xét là nút ký hiệu kết thúc a, thì so
sánh nó với ký hiệu vào hiện tại:
Nếu giống nhau thì lấy nút ngay bên trái a làm nút đang xét
và chuyển con trỏ xâu vào sang bên phải một ký hiệu.
Nếu a không giống thì quay lại nút do sản xuất trước tạo ra, điều chỉnh lại con trỏ xâu vào nếu cần thiết, sau đó ta lại thử lựa chọn tiếp theo Nếu không còn lựa chọn nào nữa thì lại
Trang 12Ví dụ
VPPNC G=(, , P, S)
P: SaSbS | aS | c
S (a)
Trang 13Ví dụ
VPPNC G=(, , P, S)
P: SaSbS | aS | c
S
c
c
Trang 14Hà nộ i Lạ ng Sơn
Cao Bằ ng Hà Giang
Lai Châu
Sơn La Thái Nguyên
Hải Phòng Nam Định Thanh Hoá
Phan Thiế t Phan Rang Nha Trang
Vinh
Đồ ng Hới
Huế Đà Nẵ ng
Quảng Ngãi Qui Nhơn
Trang 15Phân tích Bottom-Up
bắt đầu từ lá cố gắng xây dựng thành cây bằng cách hướng lên gốc.
tích gạt thu gọn (shift-reduce parsing).
Trang 16Ví dụ
SAB, Aab,
Baba
ababa
S
Trang 17Thời gian, bộ nhớ và độ phức tạp của top-down & bottom-up
Với xâu vào w có độ dài n, độ phức tạp của thuật toán cn
Hình dung:
c = 3, n = 20
3 n = 3 20 = trên 3 tỷ.
Với máy tính có khả năng thực hiện được 1000
phép xét từ tố mỗi giây, tổng thời gian cần để
phân tích mỗi một câu lệnh này là 3tỷ
/1000/60/60 > 80 giờ.
Trang 18Phát hiện lỗi
Nếu một chương trình dịch chỉ phải dịch các chương trình máy tính viết đúng thì thiết kế
và hoạt động của nó sẽ rất đơn giản
Một chương trình dịch tốt phải phát hiện,
định vị, phân loại được tất cả các lỗi để giúp
đỡ người viết
Người thiết kế chương trình dịch phải tự
quyết định bắt và báo lỗi như thế nào
Trang 19Phát hiện lỗi (tiếp)
Giai đoạn phân tích cú pháp phát hiện và khắc phục được khá nhiều lỗi do:
Nhiều loại lỗi khác nhau đồng thời cũng là lỗi
cú pháp Ví dụ lỗi do chuỗi từ tố từ bộ phân tích từ vựng không theo thứ tự của luật văn phạm của ngôn ngữ lập trình
Nhờ sự chính xác của các phương pháp phân tích
Trang 20Các chiến lược phục hồi lỗi