Slide Chương trình dịch - C4 Phân tích cú pháp (P2) - GV Hoàng Anh Việt

LI
lienhejb
0 téléchargements
47
0

Contenu du document

Page 2

Nội dung 1. Vai trò của bộ phân tích cú pháp (PTCP) 2. Văn phạm của ngôn ngữ lập trình 3. Phân tích cú pháp từ trên xuống 4. Phân tích cú pháp từ dưới lên 5. Bộ sinh bộ PTCP 2 goupee.com fb.com/groups/goupee

Page 3

4. Phương pháp phân tích từ dưới lên • Thí dụ 4.6. Cho văn phạm G. S ->aABe A ->Abc|b B ->d Phân tích câu w = abbcde. 3 goupee.com fb.com/groups/goupee

Page 6

Phân tích từ dưới lên (bottom-up parsing) • Kỹ thuật phân tích mạnh hơn • Văn phạm lớp LR có khả năng mô tả mạnh hơn văn phạm lớp LL, có thể mô tả văn phạm đệ quy trái (có trong hầu hết các ngôn ngữ lập trình) • Dễ dàng mô tả các ngôn ngữ lập trình thông thường • Bộ phân tích cú pháp gạt – thu gọn (Shift-Reduce parsing) – Xây dựng cây suy dẫn phải – Tự động xây dựng bộ phân tích cú pháp VD: yacc, CUP – Phát hiện lỗi ngay khi xuất hiện – Cho phép phục hồi khi lỗi xảy ra goupee.com fb.com/groups/goupee

Page 7

Phân tích trên xuống S S + E • Suy dẫn trái E 5 • Toàn bộ cây phía trên ( S ) một kí hiệu được sinh ra • Phải có khả năng đoán S + E trước được sản xuất S + E ( S ) E 2 S + E 1 E 4 3 goupee.com fb.com/groups/goupee

Page 8

Phân tích dưới lên (1) S  S+E | E • Suy dẫn phải E  số | (S) • Cây suy dẫn được xây dựng ngược lại – Bắt đầu từ kí hiệu kết thúc – Kết thúc tại kí hiệu bắt đầu • Ví dụ (1+2+(3+4))+5 (E+2+(3+4))+5 (S+2+(3+4))+5 (S+E+(3+4))+5 (S+(3+4))+5 (S+(E+4))+5 (S+(S+4))+5 (S+(S+E))+5 (S+(S))+5 (S+E)+5 (S)+5 E+5 S+5 S+E S goupee.com fb.com/groups/goupee

Page 9

Phân tích dưới lên (2) (1+2+(3+4))+5 (1+2+(3+4))+5 (E+2+(3+4))+5 (1 +2+(3+4))+5 (S+2+(3+4))+5 (1 +2+(3+4))+5 (S+E+(3+4))+5 (1+2 +(3+4))+5 (S+(3+4))+5 (1+2+(3 +4))+5 (S+(E+4))+5 (1+2+(3 +4))+5 (S+(S+4))+5 (1+2+(3 +4))+5 Suy dẫn(S+(S+phảiE))+5 (1+2+(3+4 ))+5 (S+(S))+5 (1+2+(3+4 ))+5 (S+E)+5 (1+2+(3+4) )+5 (S)+5 (1+2+(3+4) )+5 E+5 (1+2+(3+4)) +5 S+E (1+2+(3+4))+5 S (1+2+(3+4))+5 goupee.com fb.com/groups/goupee

Page 10

Phân tích dưới lên (3) (1+2+(3+4))+5 S (E+2+(3+4))+5 S + E E 5 (S+2+(3+4))+5 ( S ) (S+E+(3+4))+5 … S + E S + E ( S ) • Phân tích dưới lên có nhiều thông tin hơn khi E 2 S + E phân tích 1 E 4 3 goupee.com fb.com/groups/goupee

Page 11

Phân tích dưới lên và phân tích trên xuống • Phân tích dưới lên không cần sinh ra toàn bộ cây suy dẫn trong quá trình phân tích Phân tích trên xuống Phân tích dưới lên Đã đọc Chưa đọc Đã đọc Chưa đọc goupee.com fb.com/groups/goupee

Page 12

4.1 Phân tích gạt – thu gọn (1) • Phân tích bằng một dãy thao tác: gạt và thu gọn • Mỗi thời điểm, trạng thái của bộ phân tích là ngăn xếp các kí hiệu kết thúc và không kết thúc • Cấu hình tại mỗi thời điểm gồm: ngăn xếp + xâu các kí hiệu chưa đọc Suy dẫn Ngăn xếp Chưa đọc (1+2+(3+4))+5 (1+2+(3+4))+5 (E+2+(3+4))+5 (E +2+(3+4))+5 (S+2+(3+4))+5 (S +2+(3+4))+5 (S+E+(3+4))+5 (S+E +(3+4))+5 goupee.com fb.com/groups/goupee

Page 13

4.1 Phân tích gạt – thu gọn (2) • Gạt: Đọc và đưa một kí hiệu kết thúc của xâu vào stack Ngăn xếp Chưa đọc Thao tác ( 1+2+(3+4))+5 Gạt 1 (1 +2+(3+4))+5 • Thu gọn: Thay thế một xâu ở đỉnh của ngăn xếp bằng kí hiệu không kết thúc X với X  (pop , push X) Ngăn xếp Chưa đọc Thao tác (S+E +(3+4))+5 Thu gọn: S  S+E (S +(3+4))+5 goupee.com fb.com/groups/goupee

Page 14

4.1 Phân tích gạt – thu gọn (3) Suy dẫn Ngăn xếp Chưa đọc Thao tác (1+2+(3+4))+5 (1+2+(3+4))+5 gạt ( (1+2+(3+4))+5 ( 1+2+(3+4))+5 gạt 1 (1+2+(3+4))+5 (1 +2+(3+4))+5 thu gọn E1 (E+2+(3+4))+5 (E +2+(3+4))+5 thu gọn SE (S+2+(3+4))+5 (S +2+(3+4))+5 gạt + (S+2+(3+4))+5 (S+ 2+(3+4))+5 gạt 2 (S+2+(3+4))+5 (S+2 +(3+4))+5 thu gọn E2 (S+E+(3+4))+5 (S+E +(3+4))+5 thu gọn SS+E (S+(3+4))+5 (S +(3+4))+5 gạt + (S+(3+4))+5 (S+ (3+4))+5 gạt ( (S+(3+4))+5 (S+( 3+4))+5 gạt 3 (S+(3+4))+5 (S+(3 +4))+5 thu gọn E3 (S+(E+4))+5 (S+(E +4))+5 thu gọn SE (S+(S+4))+5 (S+(S +4))+5 gạt + (S+(S+4))+5 (S+(S+ 4))+5 gạt 4 goupee.com ... ... ... fb.com/groups/goupee...

Page 15

Các vấn đề nảy sinh • Cần xác định khi nào gạt hoặc thu gọn hoặc thu gọn với sản xuất nào? • Thu gọn sản xuất rỗng X → ε • Có nhiều cách thu gọn S  E hay S  S+E goupee.com fb.com/groups/goupee

Page 16

Lựa chọn thao tác • Tại mỗi thời điểm, từ cấu hình <S – ngăn xếp, a – từ tố nhìn trước> • Xác định – Gạt a, ngăn xếp trở thành <Sa> – Thu gọn X , nếu S = , ngăn xếp trở thành < X> • Nếu S = , cần lựa chọn gạt a hoặc thu gọn X dựa vào tiền tố – Với mỗi khả năng thu gọn X có một – Cần tìm cách đánh dấu các khả năng thu gọn goupee.com fb.com/groups/goupee

Page 17

Trạng thái của bộ phân tích gạt – thu gọn • Mục tiêu: Xác định khả năng thu gọn hợp lệ tại từng thời điểm • Ý tưởng: gộp các khả năng có thể có của tiền tố thành trạng thái của bộ phân tích • Các vấn đề nảy sinh: – Tính toán các trạng thái của bộ phân tích – Tính toán các trạng thái kết thúc – Phân tích tất định (loại văn phạm nào) – Kích cỡ của bộ phân tích (số lượng trạng thái) goupee.com fb.com/groups/goupee

Page 18

4.2 Bộ phân tích cú pháp LR Phân tích cú pháp LR(k): • L (left - to - right): Duyệt chuỗi nhập từ trái sang phải. • R (rightmost derivation): Xây dựng chuỗi dẫn xuất phải nhất đảo ngược. • k : Số lượng ký hiệu nhập được xét tại mỗi thời điểm dùng để đưa ra quyết định phân tích. Khi không đề cập đến k, hiểu ngầm là k = 1. 18 goupee.com fb.com/groups/goupee

Page 19

4.2 Bộ phân tích cú pháp LR Các tính chất của phương pháp phân tích LR(k): • Bộ phân tích LR có thể nhận dạng được cấu trúc cú pháp của các ngôn ngữ lập trình do văn phạm phi ngữ cảnh tạo ra. • Phương pháp LR là phương pháp tổng quát nhất của phương pháp phân tích gạt và thu gọn, không bị quay lui. • Lớp văn phạm có thể dùng phương pháp LR là một lớp rộng lớn hơn lớp văn phạm có thể sử dụng phương pháp dự đoán. • Bộ phân tích cú pháp LR cũng có thể xác định lỗi cú pháp nhanh ngay trong khi duyệt dòng nhập từ trái sang phải. Nhược điểm? 19 goupee.com fb.com/groups/goupee

Affichage des 19 premières pages. Téléchargez le document pour le voir en entier.

Commentaires (0)

Se connecter pour rejoindre la discussion

Aucun commentaire pour le moment. Soyez le premier !