1 / 46

BÀI GIẢNG CHƯƠNG TRÌNH DỊCH

BÀI GIẢNG CHƯƠNG TRÌNH DỊCH. Bộ môn khoa học máy tính. NỘI DUNG. Chương 1: Các kiến thức cơ sở Chương 2: Phân tích từ vựng Chương 3: Phân tích cú pháp Chương 4: Phân tích ngữ nghĩa Chương 5: Môi trường thực thi Chương 6: Sinh mã trung gian Chương 7: Sinh mã đích Thực hành: PL0. Mở đầu.

ramya
Download Presentation

BÀI GIẢNG CHƯƠNG TRÌNH DỊCH

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BÀI GIẢNGCHƯƠNG TRÌNH DỊCH Bộ môn khoa học máy tính

  2. NỘI DUNG • Chương 1: Các kiến thức cơ sở • Chương 2: Phân tích từ vựng • Chương 3: Phân tích cú pháp • Chương 4: Phân tích ngữ nghĩa • Chương 5: Môi trường thực thi • Chương 6: Sinh mã trung gian • Chương 7: Sinh mã đích • Thực hành: PL0

  3. Mở đầu • Mục đích: • Cung cấp các nguyên lý, kĩ thuật cơ bản để xây dựng một chương trình dịch • Nâng cao khả năng lập trình • Tài liệu tham khảo • Thực hành kĩ thuật biên dịch, Nguyễn Văn Ba • Chương trình dịch, Vũ Đình Hòa, Đỗ Thị Bích Ngọc • Bài giảng chương trình dịch, Vũ Hồng Nguyên

  4. Chương 1: Các kiến thức cơ sở • Khái niệm chương trình dịch • Định nghĩa • Biên dịch và thông dịch • Cấu trúc một chương trình dịch • Cấu trúc tĩnh (cấu trúc logic) • Cấu trúc động • Vị trí một chương trình dịch trong hệ thống dịch thực sự

  5. 1.a. Định nghĩa chương trình dịch • Trước đây, con người ra lệnh cho máy móc tính bằng nút bấm, công tắc, cần gạt. • Ngày nay, con người ra lệnh cho máy tính bằng một dãy các câu lệnh. • Máy tính chỉ hiểu ngôn ngữ 0, 1 • Ngôn ngữ của con người dài dòng, có chỗ mập mờ, nhiều cách diễn đạt…

  6. 1.a. Định nghĩa chương trình dịch • Tạo ra ngôn ngữ trung gian là ngôn ngữ lập trình (NNLT) • NNLT phỏng theo ngôn ngữ tự nhiên nên dễ dàng cho con người sử dụng • NNLT có cấu trúc rõ ràng nên có thể tự động chuyển dang ngôn ngữ máy nhờ “người phiên dịch”

  7. 1.a. Định nghĩa chương trình dịch • Định nghĩa: chương trình dịch là một chương trình thực hiện việc chuyển đổi một chương trình hay một đoạn chương trình con từ ngôn ngữ nguồn một cách tương đương sang ngôn ngữ đích • Ngôn ngữ nguồn là NNLT bậc cao (Pascal, Java, C…) • Ngôn ngữ đích là NNLT bậc thấp như Assembly hoặc ngôn ngữ máy

  8. 1.a. Định nghĩa chương trình dịch • Tương đương là chương trình đích sẽ thực hiện chính xác các công việc mà được thể hiện trong chương trình nguồn.

  9. 1.b. Biên dịch và thông dịch • Trong hệ thống biên dịch, toàn bộ chương trình nguồn được chuyển sang chương trình đích ở dạng mã máy. • Khi thực hiện chương trình đích chạy độc lập trên máy mà không cần hệ thống biên dịch nữa. • Ví dụ: Borland C, Turbo Pascal

  10. 1.b. Biên dịch và thông dịch • Ưu điểm: chương trình chạy nhanh • Nhược điểm: việc thiết kế cài đặt phức tạp

  11. 1.b. Biên dịch và thông dịch • Trong hệ thống thông dịch, chia thành 2 kiểu: • Kiểu 1: Chương trình dịch đọc chương trình nguồn theo từng lệnh và phân tích rồi thực hiện nó. Ví dụ: Foxpro, dos • Kiểu 2: • Ngôn ngữ nguồn chuyển sang ngôn ngữ dạng trung gian. • Một chương trình sẽ có nhiệm vụ đọc chương trình ở ngôn ngữ trung gian và thực hiện từng câu lệnh (interpreter) • Chương trình đọc ngôn ngữ trung gian được gọi là một máy ảo.

  12. 1.b. Biên dịch và thông dịch

  13. 2. Cấu trúc một chương trình dịch • Gồm 2 pha, 6 giai đoạn: • Giai đoạn phân tích: • Phân tích từ vựng • Phân tích cú pháp • Phân tích ngữ nghĩa • Giai đoạn tổng hợp • Sinh mã trung gian • Tối ưu mã trung gian • Sinh mã đích

  14. Chương trình nguồn Phân tích từ vựng Phân tích cú pháp Phân tích ngữ nghĩa Quản lý bảng ký hiệu Xử lý lỗi Sinh mã trung gian Tối ưu mã Sinh mã Chương trình đích

  15. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Phân tích từ vựng: • Đọc chương trình nguồn, lấy ra các từ vựng, xác định loại từ tố cho từng vựng đó • Từ tố là dạng cú pháp của từ vựng trong phân tích cú pháp (tên, từ khóa, phép toán…). • Mỗi loại từ tố có một luật mô tả, qua đó ta phân loại từ vựng thuộc từ tố nào.

  16. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Ví dụ: if a > b then max := a

  17. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Phân tích cú pháp: • Dựa vào luật cú pháp của NNLT, tìm cấu trúc cú pháp của chương trình nguồn. • Các cấu trúc cú pháp: biểu thức, phép gán, khai báo, câu lệnh… • Kiểm tra sự kết hợp các cú pháp đã đúng hay chưa

  18. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Phân tích cú pháp: • Ví dụ: trong Pascal câu lệnh rẽ nhánh dạng khuyết If <biểu thức điều kiện> then <câu lệnh> • If a > b then a := b  đúng cú pháp • If a := b then a > b  sai cú pháp

  19. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Phân tích ngữ nghĩa: • Kiểm tra lỗi ngữ nghĩa: kiểu dữ liệu, phạm vi hằng, biến, sử dụng tên… • Thu nhận thông tin thuộc tính cho từ tố: số - giá trị, tên – hằng, biến, hàm, thủ tục, … • Quan trọng: kiểm tra kiểu trong phép gán, tính toán.

  20. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Phân tích ngữ nghĩa: • Ví dụ: trong Pascal • Var i : byte; • i := 2000; {lỗi phạm vi giá trị} • Ví dụ: trong C • int a, b; float c; • a := b + 10*c; {lỗi kiểu trong phép gán}

  21. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Sinh mã trung gian: tạo ra dạng biểu diễn trung gian của chương trình nguồn • Ví dụ: dạng mã ba địa chỉ: • Lệnh a := b + 10*c được chuyển thành • temp1 := 10 • temp2 := id3*temp1 • temp3:= id2 + temp2 • id1 := temp3

  22. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Tối ưu mã trung gian: cải thiện mã trung gian để tạo ra các mã máy chạy nhanh hơn. • Ví dụ: tối ưu 4 câu lệnh trên thành: temp1 := 10 temp2 := id3*temp1 temp3:= id2 + temp2 id1 := temp3 temp2 := 10*id3 id1 := id2 + temp2

  23. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Sinh mã đích: thông thường tạo ra mã máy hoặc mã assembly • Ví dụ: MOV id3, R2 MUL #10, R2 MOV id2, R1 ADD R2, R1 MOV R1, id1 temp2 := 10*id3 id1 := id2 + temp2

  24. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Quản lí bảng ký hiệu: • Bảng ký hiệu có cấu trúc bảng dùng để lưu thông tin về tên • Thông tin: kiểu, loại, phạm vi

  25. 2.a. Cấu trúc tĩnh (cấu trúc logic) • Xử lý lỗi: đưa ra thông báo lỗi • Gặp ký tự lạ khi phân tích từ vựng • Sai cú pháp câu lệnh trong phân tích cú pháp • Sai kiểu trong phân tích ngữ nghĩa • Tràn ô nhớ trong sinh mã

  26. 2.b. Cấu trúc động • Cấu trúc động (cấu trúc theo thời gian) cho biết quan hệ giữa các pha khi hoạt động. • Sáu pha có thể hoạt động độc lập hoặc hoạt động đồng thời. • Mỗi khi một pha nào đó đọc xong toàn bộ chương trình nguồn hoặc chương trình trung gian thì được gọi là một lầnduyệt

  27. 2.b. Cấu trúc động • Chương trình dịch được chia thành 2 loại: • Duyệt đơn • Duyệt nhiều lần

  28. Phân tích cú pháp Phân tích từ vựng Phân tích ngữ nghĩa Chương trình nguồn Sinh mã trung gian Tối ưu Sinh mã Luồng dữ liệu Hướng điều khiển Chương trình đích Chương trình đích Sơ đồ chương trình dịch duyệt đơn

  29. Chương trình nguồn Phân tích từ vựng Lưu bộ nhớ ngoài Phân tích cú pháp Lưu bộ nhớ ngoài Phân tích ngữ nghĩa Lưu bộ nhớ ngoài Sinh mã trung gian Tối ưu Sinh mã Chương trình đích Sơ đồ chương trình dịch duyệt nhiều lần

  30. 2.b. Cấu trúc động • So sánh giữa cấu trúc duyệt một lượt và nhiều lượt

  31. 2.c.

  32. Tại sao cần nghiên cứu chương trình dịch • Về lý thuyết: nghiên cứu chương trình dịch giúp • Hiểu sâu hơn từng ngôn ngữ lập trình • Biết lựa chọn các chương trình dịch phù hợp • Hiểu kỹ hơn về các lựa chọn trong chương trình dịch • Nâng cao trình độ hiểu biết và tay nghề • Về vận dụng: • Thực hiện các dự án xây dựng chương trình dịch • Áp dụng vào các ngành như bộ đọc, chuyển đổi các văn bản, xử lý ngôn ngữ tự nhiên

  33. Kiến thức cơ bản về ngôn ngữ • Bộ chữ (Vocabulation) • Là một tập hữu hạn các phần tử, mà mỗi phần tử gọi là một kí hiệu • Ví dụ: - 0 – 9, a – z là bộ chữ của ngôn ngữ tự nhiên - Từ điển tiếng Anh: là bộ chữ của ngôn ngữ tiếng Anh - Từ khóa, tên biến: là bộ chữ của ngôn ngữ lập trình

  34. Kiến thức cơ bản về ngôn ngữ • Xâu • Là một dãy liên tiếp, hữu hạn các kí hiệu. Ví dụ:  = 01101 • Xâu rỗng () là xâu không chứa kí hiệu nào • Độ dài của xâu , ||, l() là số kí hiệu có mặt trong xâu • Ghép xâu , : , . là cách viết các kí hiệu trong xâu  rồi tới . Chú ý:  ≠ ;  = 

  35. Kiến thức cơ bản về ngôn ngữ • Xâu • Xâu con: v là xâu con của xâu w nếu như nó được tạo thành từ các kí kiệu liên tiếp trong xâu w. • Nếu v nằm ở đầu w thì v được gọi là tiền tố • Nếu v nằm ở cuối w thì v được gọi là hậu tố

  36. Kiến thức cơ bản về ngôn ngữ • Xâu Các phép toán: Cho A và B là hai tập xâu của một bộ chữ nào đó. • AB = {x | x  A or x  B} • AB = {x | x  A and x  B} • AxB = {(x, y) | x  A and y B} • AB = {z = xy | x  A and y  B} • Lũy thừa:  nếu n = 0 An = AAn-1 nếu n > 0

  37. Kiến thức cơ bản về ngôn ngữ • Xâu • Bao đóng dương: • Ví dụ: A = {0, 1} A2 = {00, 01, 10, 11} A* = {w | w là xâu nhị phân, gồm cả }

  38. Kiến thức cơ bản về ngôn ngữ • Văn phạm và ngôn ngữ • Văn phạm (Grammar) • Văn phạm G = {VT, VN, P, S} trong đó: VT : tập các kí hiệu kết thúc của bộ chữ (a, b, …) VN: tập các kí hiệu không kết thúc (A, B, …) S  VN: kí hiệu bắt đầu P: tập các sản xuất có dạng    (  V*VV*,   V*)

  39. Kiến thức cơ bản về ngôn ngữ • Văn phạm và ngôn ngữ • Câu: Cho văn phạm G = {VT, VN, P, S} • Xâu  được suy dẫn ra từ kí hiệu bắt đầu S được gọi là một dạng câu (dạng cú pháp) • Câu: là một dạng câu chỉ gồm các kí hiệu kết thúc  là câu  S +  và   VT* • Ví dụ: P = {S  aAS | b; A bA | c } ta có: S  aAS abAS abcS  abcb

  40. Kiến thức cơ bản về ngôn ngữ • Văn phạm và ngôn ngữ • Ngôn ngữ: Cho văn phạm G = {VT, VN, P, S} • Ngôn ngữ được sinh ra bởi G, kí hiệu là L(G), là tập tất cả các câu trong văn phạm. • Kí hiệu: L(G) = {w | S + w và w  VT* }

  41. Kiến thức cơ bản về ngôn ngữ • Văn phạm và ngôn ngữ • Đệ quy: A  VN • A gọi là đệ quy nếu tồn tại suy dẫn: A + A với ,   V*. • Nếu  =  thì A + A : đệ quy trái Nếu có A A thì A gọi là đệ quy trái trực tiếp • Nếu  =  thì A + A : đệ quy phải Nếu có A A thì A gọi là đệ quy phải trực tiếp • Nếu ,    ta có đệ quy trong

  42. Kiến thức cơ bản về ngôn ngữ • Văn phạm và ngôn ngữ • Văn phạm tương đương Cho hai văn phạm G1 = {V1T, V1N, P1, S1} G2 = {V2T, V2N, P2, S2} G1 gọi là tương đương với G2 L(G1) = L(G2)

  43. Kiến thức cơ bản về ngôn ngữ • Văn phạm và ngôn ngữ • Văn phạm phi ngữ cảnh Cho hai văn phạm G = {VT, VN, P, S} G được gọi là VP PNC nếu tất cả các sản xuất trong P đều có dạng A   với   V* • Cây suy dẫn: là một cây có thứ tự • Các nút có nhãn là các kí hiệu trong V  {} • Các nút trong có nhãn là kí hiệu trong VN • Nút lá có nhãn là kí hiệu trong VT • Gốc có nhãn S (kí hiệu bắt đầu)

  44. Kiến thức cơ bản về ngôn ngữ • Văn phạm và ngôn ngữ • Cây suy dẫn: là một cây có thứ tự • Nếu A  VN là nút nhãn của một nút trong trên cây và X1, X2, …, Xn là các nút con của nó, ta có: AX1X2…Xn  P • Nếu nối các kí hiệu nằm trên các lá của cây từ trái qua phải, thu được một câu. • VD1: P = {E E+E | E*E | (E) | a}; w = a+a*a • VD2: P = {SaAB |BA; ABBB | a; B AS | b } w = abaaabbb

  45. Kiến thức cơ bản về ngôn ngữ • Văn phạm và ngôn ngữ • Văn phạm đơn nghĩa • Văn phạm G được gọi là đơn nghĩa nếu với mọi w  L(G), chỉ tồn tại duy nhất một cây suy dẫn. • Ngược lại, ta gọi đó là văn phạm đa nghĩa (nhập nhằng)

More Related