1. Trang chủ
  2. » Công Nghệ Thông Tin

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

85 2 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 85
Dung lượng 1,02 MB

Nội dung

Mục đích của bài giảng Nhập môn chương trình dịch - Chương 4: Phân tích cú pháp gồm có những nội dung chính sau: Các phương pháp phân tích cú pháp, cánh cài đặt một bộ phân tích cú pháp từ một Văn phạm phi ngữ cảnh, các khái niệm và sử dụng công cụ sinh bộ PTCP - Yacc. 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 Mục đích • Sau học xong chương này, sinh viên nắm được: – Các phương pháp phân tích cú pháp – Cách cài đặt PTCP từ Văn phạm phi ngữ cảnh – Các khái niệm sử dụng công cụ sinh PTCP: Yacc Điều kiện • Kiến thức cần có: – Kiến thức Automat – Kiến thức văn phạm phi ngữ cảnh CFG Tài liệu tham khảo [1] Slide giảng [2] Compilers : Principles, Technique and Tools - Alfred V.Aho, Jeffrey D.Ullman - Addison - Wesley Publishing Company, 1986 [3] Automata and Formal Language, An Introduction- Dean Kelley- Prentice Hall, Englewood Cliffs, New Jersey 07632 [4] Compilers course, CS 143 summer 2010, Standford University [5] Compiler Design – Reinhard Wilhelm, Dieter Maurer Addison – Wesley Publishing Company, 1996 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 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 Vai trị phân tích cú pháp • Bộ phân tích cú pháp nhận chuổi token từ phân tích từ vựng để tạo cấu trúc cú pháp chương trình nguồn • Tồn ba loại phân tích cú pháp: • Phương pháp tổng qt: • Cocke-Younger-Kasami • Earley • Phương pháp thơng dụng: Phân tích từ xuống hay phân tích từ lên Vai trị phân tích cú pháp Mã nguồn (dãy kí tự) Phân tích từ vựng If (a == 0) = a; Dãy từ tố (token) If ( Id:a == ) Id:min = Id:a ; if Cây cú pháp == a = ; Phân tích cú pháp a Phân tích ngữ nghĩa Vai trị phân tích cú pháp { • Mã nguồn if (b == (0)) a = b; while (a != 1) { stdio.print(a); a = a - 1; block } } • Cây cú pháp …… bin_op == if_stmt variable const != b while_stmt bin_op block variable const expr_stmt … b call variable • stdio print a Vai trị phân tích cú pháp • Kiểm tra tính đắn cú pháp chương trình nguồn • Xác định chức thành phần chương trình nguồn I gave him the book câu chủ ngữ vị ngữ I gave bổ ngữ trực tiếp bổ ngữ gián tiếp cụm danh từ him quán từ danh từ the book 3.2.3 Văn phạm LL(1) • Ví dụ 4.5 (tiếp) Ðây văn phạm mơ hồ mơ hồ thể qua việc chọn luật sinh gặp ký hiệu e Ơ vị trí M [S', e] gọi đa trị • Văn phạm khơng có phần tử bảng phân tích M có nhiều trị gọi văn phạm LL(1): – L: Left-to-right parse (mô tả hành động quét chuỗi nhập từ trái sang phải) – L: Leftmost-derivation (biểu thị việc sinh dẫn xuất trái cho chuỗi nhập) – 1: 1-symbol lookahead (tại bước, đầu đọc đọc trước token để thực định phân tích cú pháp) 73 3.2.3 Văn phạm LL(1) • Tính chất VP LL(1): – Không VP đệ quy trái hay mơ hồ – Với luật sinh phân biệt: A ->α|β : Khơng có ký hiệu kết thúc a mà α β dẫn xuất chuỗi bắt đầu a Tối đa có α có β dẫn xuất chuỗi rỗng Nếu β ⇒* ε α khơng dẫn xuất chuỗi bắt đầu ký hiệu kết thúc thuộc tập FOLLOW(A) Biến Văn phạm mơ hồ/đệ quy => LL(1) ? 74 3.2.4 Khắc phục lỗi • Lỗi xuất trường hợp sau: • Một ký hiệu kết thúc stack không trùng với ký hiệu nhập đọc • Hai A ký hiệu không kết thúc đỉnh stack, a chuỗi nhập đọc, mà M[A, a] trống • Một số heuristics áp dụng cho việc khắc phục lỗi • Ta cho tất ký hiệu follow(A) vào tập token đồng A (synch) Chúng ta làm cho ký hiệu khơng kết thúc A 75 3.2.4 Khắc phục lỗi • Ví dụ 4.5: Xét VP G: E -> TE’ E’-> +TE’ | ε T -> FT’ T’ ->*FT’| ε F -> (E) | id =>FOLLOW(E) = FOLLOW(E') = { $, )} FOLLOW(T) = FOLLOW(T') = { +,$, )} FOLLOW(F) = {*,+, $, )} 76 3.2.4 Khắc phục lỗi Bảng phân tích cú pháp M phục hồi lỗi 77 3.2.4 Khắc phục lỗi • Bảng sử dụng sau: – Nếu M[A,a] rỗng bỏ qua token a – Nếu M[A,a] "synch" lấy A khỏi Stack nhằm tái hoạt dộng q trình phân tích – Nếu token đỉnh Stack không phù hợp với token dịng nhập lấy token khỏi Stack • Với chuỗi nhập: + id * + id, phân tích cú pháp chế phục hồi lỗi thực hiện: 78 3.2.4 Khắc phục lỗi 79 3.2.4 Khắc phục lỗi • Bài tập: Phân tích khắc phục lỗi cho chuỗi nhập: W = )id*+id 80 Kiểm tra Bài Bài • Cho văn phạm G chứa luật sinh sau: • Cho Văn phạm G chứa luật sinh: S → xAB A → Ayz | y B→ t Khử đệ quy trái Xây dựng bảng phân tích M Sử dụng phân tích cú pháp để xây dựng suy dẫn (chỉ rõ bước): xyyzt E  E op E | (E) | num op  + | * | ^ Khử đệ quy trái Xây dựng bảng phân tích M Sử dụng phân tích cú pháp để xây dựng suy dẫn (chỉ rõ bước): 2^3+4*5 81 Kiểm tra (2) Bài 3: Xét ngôn ngữ sử dụng thẻ (tags) mô tả sau: • Ký hiệu kết thúc: { < , > , / , = , word } • Mỗi thẻ bắt đầu < kết thúc > • Có hai loại thẻ: thẻ mở thẻ đóng • Thẻ mở có dạng , tức bắt đầu word, cặp word nối với dấu =, thể thuộc tính thẻ • Thẻ đóng có dạng • Mỗi thẻ mở phải có thẻ đóng tương ứng phía sau Giữa cặp thẻ mở đóng có dãy word dài tuỳ ý • Ví dụ: xâu word word word thuộc ngôn ngữ a, Hãy viết văn phạm phi ngữ cảnh cho ngơn ngữ b, Tìm kí hiệu triệt tiêu c, Tính tập FIRST, FOLLOW cho văn phạm d, Lập bảng phân tích M, vị trí xung đột bảng e, Hãy nguyên nhân khiến văn phạm LL(1) 82 Xây dựng PTCP xuống Viết văn phạm ngôn ngữ Viết văn phạm LL(1) Bảng phân tích LL(1) Phân tích đệ quy xuống Phân tích đệ quy xuống kết hợp xây dựng cú pháp 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 84 Tổng kết Bài • Các kiến thức cần nhớ: • Về nhà đọc thêm: 85 Bài học phần sau Bài 86 Thảo luận 87 ... Đã đọc / Chưa đọc ( ( 1 2 ( ( (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 43 3.1 Phân tích cú pháp đệ quy xuống... (1+2+(3 +4) )+S (1+2+(3 +4) )+E (1+2+(3 +4) )+5 • Suy dẫn phải S E+S E+E E+5 (S)+5 (E+S)+5 (E+E+S)+5 (E+E+E)+5 (E+E+(S))+5 (E+E+(E+S))+5 (E+E+(E+E))+5 (E+E+(E +4) )+5 (E+E+(3 +4) )+5 (E+2+(3 +4) )+5 (1+2+(3 +4) )+5... đắn cú pháp chương trình nguồn • Xác định chức thành phần chương trình nguồn I gave him the book câu chủ ngữ vị ngữ I gave bổ ngữ trực tiếp bổ ngữ gián tiếp cụm danh từ him quán từ danh từ the

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

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN