Bài giảng Nhập môn chương trình dịch - Chương 2 gồm có những nội dung chính sau: các thành phần cấu tạo nên chương trình dịch đơn giản, hoạt động và cài đặt các giai đoạn của kỳ đầu của chương trình dịch cơ bản - Phân tích từ vựng, phân tích cú pháp và sinh mã trung gian, sử dụng máy ảo kiểu stack. Mời các bạn cùng tham kho nội dung chi tiết.
Bài Chương Trình Dịch Đầu Tiên 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 thành phần cấu tạo nên chương trình dịch đơn giản – Hoạt động cài đặt giai đoạn kỳ đầu trình biên dịch đơn giản: Phân tích từ vựng, phân tích cú pháp sinh mã trung gian – Sử dụng máy ảo kiểu stack Điều kiện • Kiến thức cần có: – Sử dụng ngôn ngữ: C, Pascal để hiểu cách cài đặt trình Biên dịch – Cấu trúc liệu giải thuật để hiểu cách tổ chức liệu cài đặt 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] Trình Biên Dịch - Phan Thị Tươi (Trường Ðại học kỹ thuật Tp.HCM) – NXB Giáo dục, 1998 [4] Compilers course, CS 143 summer 2010, Standford University Nội dung Định nghĩa cú pháp Dịch trực tiếp cú pháp Phân tích cú pháp Một chương trình dịch biểu thức đơn giản Phân tích từ vựng Xây dựng bảng ký hiệu Máy ảo kiểu stack Kết nối kỹ thuật Định nghĩa cú pháp 1.1 Định nghĩa ngơn ngữ hình thức 1.2Văn phạm phi ngữ cảnh 1.3 Cây phân tích cú pháp 1.4 Sự nhập nhằng văn phạm 1.5 Sự kết hợp toán tử 1.6 Thứ tự ưu tiên tốn tử 1.1 Định nghĩa ngơn ngữ hình thức • Bảng chữ • Xâu kí tự • Ngơn ngữ 1.1 Định nghĩa ngơn ngữ hình thức Bảng chữ cái: • Cho ∑ tập hữu hạn, khác rỗng ký hiệu mà ta gọi bảng chữ Mỗi phần tử ∑ gọi ký tự • Ví dụ ∑={a,b,c,d,….,y} ∑={1,2,3} ; 1.1 Định nghĩa ngôn ngữ hình thức Xâu ký tự: • Là dãy ký tự bảng chữ ∑ viết liền • Độ dài xâu: số ký tự xâu • Ví dụ ∑={a,b,c} s= “baccba” xâu bảng chữ ∑ Xâu s có độ dài • Xâu rỗng: xâu khơng có ký tự nào, độ dài Ký hiệu: λ 1.1 Định nghĩa ngơn ngữ hình thức Ngơn ngữ • Mỗi tập từ bảng chữ ∑ gọi ngơn ngữ bảng chữ • ∑*: tập tất từ bảng chữ kể xâu rỗng • ∑+ =∑*- {λ} 3.1 Phân tích cú pháp từ xuống (Top - Down Parsing) • Phân tích xuống bắt đầu nút gốc, nhãn ký hiệu chưa kết thúc bắt đầu lặp lại việc thực hai bước sau đây: – Tại nút n, nhãn ký hiệu chưa kết thúc A, chọn luật sinh A xây dựng n cho ký hiệu vế phải luật sinh – Tìm nút mà xây dựng 45 3.1 Phân tích cú pháp từ xuống (Top - Down Parsing) Minh họa trình phân tích cú pháp từ xuống 46 3.2 Phân tích cú pháp dự đốn (Predictive Parsing) • Dạng đặc biệt phân tích cú pháp từ xuống phương pháp đoán nhận trước Phương pháp nhìn trước ký hiệu nhập để định chọn thủ tục cho ký hiệu không kết thúc tương ứng • Ví dụ Cho văn phạm G: P: S -> xA A -> z |yA • Dùng văn phạm G để phân tích câu nhập xyyz 47 3.2 Phân tích cú pháp dự đoán (Predictive Parsing) S -> xA A -> z |yA 48 3.2 Phân tích cú pháp dự đốn (Predictive Parsing) • Ví dụ Cho văn phạm với luật sinh sau: S -> A |B A -> xA|y B -> xB|z 49 3.2 Phân tích cú pháp dự đoán (Predictive Parsing) S -> A |B A -> xA|y B -> xB|z 50 3.2 Phân tích cú pháp dự đoán (Predictive Parsing) 51 3.3 Loại bỏ đệ quy trái • Một phân tích cú pháp đệ quy xuống dẫn đến vịng lặp vô tận gặp luật sinh đệ qui trái dạng E → E + T Thêm vào ký hiệu chưa kết thúc • Ví dụ: A → Aα | β, thêm R: •A→ β R •R → α R | ε 52 3.3 Loại bỏ đệ quy trái • Ví dụ: Xét luật sinh đệ quy trái : E → E + T | T • Sử dụng quy tắc khử đệ quy trái nói với : A ≅ E, α ≅ + T, β≅ T Luật sinh biến đổi tương đương thành tập luật sinh : •E → T R •R → + T R | ε 53 Một Chương trình dịch Biểu thức đơn giản • Xây dựng dịch trực tiếp cú pháp mà dịch biểu thức số học đơn giản từ trung tố sang hậu tố • Biểu thức xét chữ số viết cách + – 54 Một Chương trình dịch Biểu thức đơn giản • Khử đệ quy trái: ký hiệu chưa kết thúc rest 55 Một Chương trình dịch Biểu thức đơn giản 56 Phân tích từ vựng • Loại bỏ khoảng trắng dịng thích • Nhận biết • Nhận dạng danh biểu từ khóa 57 Phân tích từ vựng • Giao diện phân tích từ vựng 58 Phân tích từ vựng 59 ... Trong đó: - id danh biểu (tên biến) -Ký hiệu chưa kết thúc opt_stmts sinh danh sách (có thể rỗng) 28 lệnh phân cách dấu chấm phẩy (;) 2. Dịch Trực tiếp cú pháp • • • • • 2. 1 Ký pháp hậu tố 2. 2 Định... biểu thức dạng E1 op E2 ký pháp hậu tố E E1’E2’op Nếu E biểu thức dạng (E1) ký pháp hậu tố E ký pháp hậu tố E1 Ví dụ: Dạng hậu tố ( 5-3 ) +4 5 3-4 + Dạng hậu tố 6-( 3+5) 635 +- 30 2. 2 Định nghĩa trực tiếp... không tường minh: P : string -> string + string |string –string |0 |1 | |9 Câu – + cho hai phân tích: 20 1.4 Sự nhập nhằng văn phạm 21 1.4 Sự nhập nhằng văn phạm 22 1.5 Sự kết hợp tốn tử • Biểu