Bài giảng Nhập môn chương trình dịch: Chương 4 (tt) - Hoàng Anh Việt

47 7 0
Bài giảng Nhập môn chương trình dịch: Chương 4 (tt) - Hoàng Anh Việt

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng chương 4 trình bày vai trò của bộ phân tích cú pháp, văn phạm của ngôn ngữ lập trình, phân tích cú pháp từ trên xuống, phân tích cú pháp từ dưới lên, sinh bộ phân tích cú pháp. Mời các bạn cùng tham khảo.

Bài PHÂN TÍCH CÚ PHÁP Hồng Anh Việt Viện CNTT&TT - ĐHBKHN Nội dung Vai trị phân tích cú pháp (PTCP) Văn phạm ngơn ngữ lập trình Phân tích cú pháp từ xuống Phân tích cú pháp từ lên Bộ sinh PTCP Phương pháp phân tích từ 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 Phương pháp phân tích từ lên 4 Phương pháp phân tích từ lên Phân tích từ lên (bottom-up parsing) • Kỹ thuật phân tích mạnh • Văn phạm lớp LR có khả mơ tả mạnh văn phạm lớp LL, mơ tả văn phạm đệ quy trái (có hầu hết ngơn ngữ lập trình) • Dễ dàng mơ tả 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 suy dẫn phải – Tự động xây dựng phân tích cú pháp VD: yacc, CUP – Phát lỗi xuất – Cho phép phục hồi lỗi xảy Phân tích xuống • Suy dẫn trái • Tồn phía kí hiệu sinh • Phải có khả đốn trước sản xuất S S + E S E E ( S S + E + E ( S ) S + E E ) Phân tích lên (1) • Suy dẫn phải • Cây suy dẫn xây dựng ngược lại – Bắt đầu từ kí hiệu kết thúc – Kết thúc 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 S  S+E | E E  số | (S) Phân tích lên (2) Suy dẫn phải (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+E S (1+2+(3+4))+5 (1 +2+(3+4))+5 (1 +2+(3+4))+5 (1+2 +(3+4))+5 (1+2+(3 +4))+5 (1+2+(3 +4))+5 (1+2+(3 +4))+5 (1+2+(3+4 ))+5 (1+2+(3+4 ))+5 (1+2+(3+4) )+5 (1+2+(3+4) )+5 (1+2+(3+4)) +5 (1+2+(3+4))+5 (1+2+(3+4))+5 Phân tích lên (3) S (1+2+(3+4))+5 (E+2+(3+4))+5 (S+2+(3+4))+5 (S+E+(3+4))+5 … • Phân tích lên có nhiều thơng tin phân tích S + E S E E ( S ) S + + E ( S ) S + E E E Ví dụ Nếu I tập hợp gồm văn phạm { E'→ • E } closure(I) bao gồm: E' → • E E→•E+T E→•T T→•T*F T→•F F → • (E) F → • id 33 Giải thuật tính goto • Goto(I, X), I tập mục X ký hiệu văn phạm, bao đóng tập hợp mục A → αX•β cho A → α•Xβ € I • Cách tính goto(I, X): Tạo tập I' = ∅ Nếu A → α•Xβ € I đưa A→ αX•β vào I', tiếp tục trình xét hết tập I Goto(I, X) = closure(I') 34 Ví dụ • Giả sử I = { E' → E•, E → E • + T } Tính goto (I, +) ? • Ta có I' = { E→ E + • T } ( goto (I, +) = closure(I') bao gồm mục : E → E + • T (Luật 1) T → • T * F (Luật 2) T→ •F (Luật 2) F → • (E) (Luật 2) F → • id (Luật 2) 35 Giải thuật tính tập tuyển tập thực thể Procedure items (G’); begin C := {closure ({S’->•S}}} repeat for với tập thực thể I C với ký hiệu văn phạm X cho phép goto(I, X) không rỗng khơng có C thêm goto(I, X) vào C; until thêm tập thực thể vào C; end; 36 Ví dụ • Xét văn phạm: E' → E E→E+T|T G’ T→T*F|F G F → (E) | id • C:= Closure({E’->•E}): 37 Ví dụ(2) 38 Ví dụ (3) 39 Xây dựng bảng phân tích  Nhập: văn phạm gia tố G’  Xuất: bảng phân tích SLR với hàm action goto cho văn phạm G’  Phương pháp: Xây dựng C = {Io, I1, …In} i trạng thái đại diện cho tập thực th Ii 2.1 Nu A -> ãaò l thc th Ii goto(Ii, a) = Ij phần tử action[i, a] = shift(j), với a phải ký hiệu kết thúc 2.2 Nếu A -> • Ii action[i, a] = reduce(A -> ) với a tất ký hiệu nằm follow(A) A S’(ký hiệu mục tiêu mới) 2.3 Nếu S’->S• Ii action [i, $] = accept 40 Xây dựng bảng phân tích (2) Cho tất ký hiệu không kết thúc A Nếu goto[Ii, A] = Ij hàm goto[i, A] = j Tất phần tử bảng phân tích khơng xác định quy tắc 3, coi lỗi Trạng thái bắt đầu phân tích tập thực thể có chứa thực thể S’-> •S 41 Ví dụ xây dựng bảng phân tích • Xét văn phạm: 42 Ví dụ xây dựng bảng phân tích(1) • Trước tiên xét tập mục I0 : Mục F → • (E) cho action[0, (] = "shift 4", mục F → • id cho action[0, id] = "shift 5" Các mục khác I0 khơng sinh hành động • Bây xét I1 : Mục E'→ E • cho action[1, $] = "accept", mục E → E • + T cho action[1, +] = "shift 6" 43 Ví dụ xây dựng bảng phân tích(2) • Kế đến xét I2 : E → T • T→T•*F • Vì FOLLOW(E) = {+, ), $}, làm cho action[2, $] = action[2,+] = action[2,)] = "reduce 2" Mục thứ hai làm cho action[2,*] = "shift 7" • Tiếp tục theo cách này, ta thu bảng phân tích cú pháp SLR trình bày 44 Tổng kết Bài • Các kiến thức cần nhớ: – Phân tích từ xuống – Phân tích dự đốn – Phân tích từ lên 45 Bài học phần sau Bài 5: Phân tích ngữ nghĩa 46 Thảo luận 47 ... (1+2+(3 +4) )+5 (1+2+(3 +4) )+5 (1+2+(3 +4) )+5 (E+2+(3 +4) )+5 (S+2+(3 +4) )+5 (S+2+(3 +4) )+5 (S+2+(3 +4) )+5 (S+E+(3 +4) )+5 (S+(3 +4) )+5 (S+(3 +4) )+5 (S+(3 +4) )+5 (S+(3 +4) )+5 (S+(E +4) )+5 (S+(S +4) )+5 (S+(S +4) )+5... (S+(S (S+(S+ Chưa đọc (1+2+(3 +4) )+5 1+2+(3 +4) )+5 +2+(3 +4) )+5 +2+(3 +4) )+5 +2+(3 +4) )+5 2+(3 +4) )+5 +(3 +4) )+5 +(3 +4) )+5 +(3 +4) )+5 (3 +4) )+5 3 +4) )+5 +4) )+5 +4) )+5 +4) )+5 4) )+5 Thao tác gạt gạt thu thu... (1+2+(3 +4) )+5 (1+2+(3 +4) )+5 (1+2+(3 +4) )+5 (1+2+(3 +4 ))+5 (1+2+(3 +4 ))+5 (1+2+(3 +4) )+5 (1+2+(3 +4) )+5 (1+2+(3 +4) ) +5 (1+2+(3 +4) )+5 (1+2+(3 +4) )+5 Phân tích lên (3) S (1+2+(3 +4) )+5 (E+2+(3 +4) )+5

Ngày đăng: 10/05/2021, 13:35

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan