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

Chương 2 Tổng quan về trình biên dịch

32 360 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 32
Dung lượng 401,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

2.1 Trình biên dịch tt Mô hình phân tích - tổng hợp – Quy trình của chương trình dịch thường bao gồm hai quá trình: phân tích và tổng hợp cấu thành và tạo ra một dạng biểu diễn trung gi

Trang 1

Chương 2

TỔNG QUAN VỀ TRÌNH BIÊN DỊCH

http://slide-giaotrinh.tk

Trang 2

Nội dung Chương 2

2.2.3 Các giai đoạn phân tích 2.2.4 Sinh mã trung gian

2.2.5 Tối ưu mã 2.2.6 Sinh mã

2.3 Gộp các giai đoạn

Trang 3

2.1 Trình biên dịch

 Trình biên dịch đọc một chương trình được viết bằng ngôn ngữ nguồn (source language) rồi dịch sang ngôn ngữ đích (target languague)

 Quá trình dịch ghi nhận và thông báo các lỗi có trong chương trình nguồn

Chương trình nguồn

Trình biên dịch

Chương trình đích

Trang 4

2.1 Trình biên dịch (tt)

 Mô hình phân tích - tổng hợp

– Quy trình của chương trình dịch thường bao gồm hai quá trình: phân tích và tổng hợp

cấu thành và tạo ra một dạng biểu diễn trung gian

ngôn ngữ đích

Chương trình nguồn

Đặc tả trung gian

Chương trình đích

Trang 5

2.1 Trình biên dịch (tt)

 Mô hình phân tích - tổng hợp (tt)

– Trong quá trình phân tích: phân rã chương trình nguồn thành

một cấu trúc phân cấp dạng cây cú pháp (syntax tree), mỗi nút

là một toán tử và các nhánh con là các toán hạng

Trang 6

2.1 Trình biên dịch (tt)

 Môi trường của trình biên dịch

– Ngoài trình biên dịch, cần dùng nhiều chương trình khác để tạo chương trình đích có thể thực thi (executable)

Trang 8

2.1 Trình biên dịch (tt)

 Trình dịch hợp ngữ

– Chương trình đích được tạo ra bởi trình biên dịch có thể cần phải được xử lý thêm trước khi chúng có thể chạy được

– Thông thường, trình biên dịch chỉ tạo ra mã lệnh hợp ngữ (assembly code)

– Trình dịch hợp ngữ (assembler) dịch thành dạng mã

máy

Trang 9

2.1 Trình biên dịch (tt)

 Bộ tải và soạn thảo liên kết

– Dạng mã máy được liên kết

với một số thủ tục (hàm, lớp,

…) trong thư viện hệ thống thành các mã thực thi được

 Một quá trình biên dịch điển

hình được cho như hình

Mã máy tuyệt đối

Thư viện, tập tin đối tượng khả tái định vị

Trang 10

2.2 Các giai đoạn biên dịch

 Biên dịch được chia thành nhiều giai đoạn

 Mỗi giai đoạn chuyển chương trình nguồn từ một dạng biểu diễn này sang một dạng biểu diễn khác

 Việc quản lý bảng ký hiệu và xử lý lỗi được thực hiện xuyên suốt qua tất cả các giai đoạn

Trang 11

2.2 Các giai đoạn biên dịch (tt)

thể phân từ vựng Chương trình nguồn

thể phân cú pháp

thể phân ngữ nghĩa

thể sinh mã trung gian

thể tối ưu hoá mã

thể sinh mã

Chương trình đích thể quản lý bảng ký hiệu thể xử lý lỗi

s

Một cách phân rã điển hình trình biên dịch như sau:

Trang 12

2.2 Các giai đoạn biên dịch (tt)

 Quản lý bảng ký hiệu

– Bảng ký hiệu (symbol table) là một cấu trúc dữ liệu mà mỗi phần tử là một mẩu tin dùng để lưu trữ một định danh, bao gồm các trường lưu giữ ký hiệu và các thuộc tính của nó

– Những thuộc tính cung cấp thông tin về vị trí lưu trữ của định danh, kiểu và tầm vực

– Bảng ký hiệu cho phép tìm kiếm, truy xuất định danh một cách nhanh chóng

– Trong quá trình phân tích từ vựng, định danh được tìm thấy

và nó được đưa vào bảng ký hiệu nhưng nói chung các thuộc tính của nó có thể chưa xác định được trong giai đoạn này

Trang 13

2.2 Các giai đoạn biên dịch (tt)

 Xử lý lỗi

– Mỗi giai đoạn đều có thể gặp lỗi

– Tùy thuộc vào trình biên dịch mà có các cách xử lý khác nhau

 Dừng và thông báo lỗi khi gặp lỗi đầu tiên (Pascal)

 Ghi nhận lỗi và tiếp tục quá trình dịch (C)

Trang 14

2.2 Các giai đoạn biên dịch (tt)

Trang 15

2.2 Các giai đoạn biên dịch (tt)

 Các giai đoạn phân tích

– Giai đoạn phân tích từ vựng (phân tích tuyến tính)

 Các dòng ký tự tạo ra chương trình nguồn sẽ được đọc từ trái sang phải

và được nhóm lại thành các token (thẻ từ)

 Token từ là các chuỗi ký tự được hợp lại để tạo ra một nghĩa chung, chẳng hạn một định danh, từ khóa, một ký hiệu,

Trang 16

2.2 Các giai đoạn biên dịch (tt)

 Các giai đoạn phân tích (tt)

– Giai đoạn phân tích từ vựng (tt)

 Ví dụ: Quá trình phân tích từ vựng cho câu lệnh gán a = b + c *5 sẽ tách thành các token như sau:

– 1 Định danh a (id1) – 2 Ký hiệu phép gán = – 3 Định danh b (id2) – 4 Ký hiệu phép cộng (+) – 5 Định danh c (id3)

– 6 Ký hiệu phép nhân (*) – 7 Số 5

Trong quá trình phân tích từ vựng các khoảng trắng (blank) sẽ bị bỏ qua,

Sau giai đoạn này câu lệnh a = b + c * 5 sẽ trở thành id1 = id2 + id3*5

Trang 17

2.2 Các giai đoạn biên dịch (tt)

 Các giai đoạn phân tích (tt)

– Giai đoạn phân tích cú pháp

Nhóm các thẻ từ của chương trình nguồn thành các ngữ đoạn văn

phạm (grammatical phrase), mà sau đó sẽ được trình biên dịch tổng

hợp ra thành phẩm

 Thông thường, các ngữ đoạn văn phạm này được biểu diễn bằng

dạng cây phân tích cú pháp (parse tree) với :

– Ngôn ngữ được đặc tả bởi các luật sinh – Phân tích cú pháp dựa vào luật sinh để xây dựng cây phân tích cú pháp

Trang 18

2.2 Các giai đoạn biên dịch (tt)

 Các giai đoạn phân tích (tt)

– Giai đoạn phân tích cú pháp (tt)

 Ví dụ: Sau giai đoạn này câu lệnh a = b + c * 5 có cây phân tích cú pháp được xây dựng như sau :

assignment statemeent identifier

Trang 19

2.2 Các giai đoạn biên dịch (tt)

 Các giai đoạn phân tích (tt)

– Giai đoạn phân tích ngữ nghĩa

 Giai đoạn phân tích ngữ nghĩa sẽ thực hiện việc kiểm tra xem chương trình nguồn có chứa lỗi về ngữ nghĩa hay không và tập hợp thông tin

về kiểu cho giai đoạn sinh mã về sau

Một phần quan trọng trong giai đoạn phân tích ngữ nghĩa là kiểm tra

kiểu (type checking) và ép chuyển đổi kiểu

Trang 20

2.2 Các giai đoạn biên dịch (tt)

 Các giai đoạn phân tích (tt)

– Giai đoạn phân tích ngữ nghĩa (tt)

 Ví dụ: Trong câu lệnh a = b + c * 5, giả sử các định danh (biến) a,b,c được khai báo là số thực (real), còn 5 là số nguyên (int), vì vậy trình biên dịch sẽ đổi số nguyên 5 thành số thực 5.0

a

b

c

Trang 21

2.2 Các giai đoạn biên dịch (tt)

 Sinh mã trung gian

– Sau khi phân tích ngữ nghĩa, một số trình biên dịch sẽ tạo ra một dạng biểu diễn trung gian của chương trình nguồn

– Có thể xem dạng biểu diễn này như một chương trình dành cho một máy trừu tượng

– Chúng có hai đặc tính quan trọng: dễ sinh và dễ dịch thành chương trình đích

Trang 22

2.2 Các giai đoạn biên dịch (tt)

 Sinh mã trung gian (tt)

– Thường sử dụng dạng mã máy 3 địa chỉ, tương tự hợp ngữ cho một máy, mỗi vị trí nhớ đóng vai trò như một thanh ghi

– Mã máy 3 địa chỉ là một dãy các lệnh liên tiếp, mỗi lệnh có thể

có tối đa 3 đối số

– Ví dụ:

t1 := inttoreal (5) t2 := id3 * t1

t3 := id2 + t2 id1 := t3

Trang 23

2.2 Các giai đoạn biên dịch (tt)

 Các tính chất của mã trung gian

– Mỗi lệnh chỉ chứa nhiều nhất một toán tử

– Do đó khi tạo ra lệnh này, trình biên dịch phải xác định được thứ tự các phép toán, ví dụ * thực hiện trước +

– Trình biên dịch phải tạo ra một biến tạm để lưu trữ giá trị tính toán cho mỗi lệnh

– Một số lệnh có ít hơn 3 toán hạng

Trang 24

2.2 Các giai đoạn biên dịch (tt)

 Tối ưu mã

– Cải thiện mã trung gian để có thể có mã máy thực hiện nhanh hơn

– Ví dụ:

t1 := inttoreal (5) t2 := id3 * t1

t3 := id2 + t2 id1 := t3

 Việc đổi số nguyên 5 thành số thực 5.0 có thể thực hiện một lần lúc biên dịch

→ có thể loại bỏ phép toán inttoreal

 t3 chỉ được dùng để chuyển giá trị cho id1 nên có thể bỏ

 Có thể tối ưu thành:

t1 := id3 * 5.0 id1 := id2 + t1

Trang 25

2.2 Các giai đoạn biên dịch (tt)

Trang 26

2.2 Các giai đoạn biên dịch (tt)

 Sinh mã

– Giai đoạn cuối cùng của biên dịch là sinh mã đích

– Thường là mã máy hoặc mã hợp ngữ

– Các vị trí vùng nhớ được chọn lựa cho mỗi biến được chương trình sử dụng

– Các chỉ thị trung gian được dịch lần lượt thành chuỗi các chỉ thị mã máy

– Vấn đề quyết định là việc gán các biến cho các thanh ghi

Trang 27

2.2 Các giai đoạn biên dịch (tt)

 Sinh mã (tt)

– Ví dụ: Sử dụng các thanh ghi (chẳng hạn R1, R2) cho việc

sinh mã đích như sau:

MOVF id3, R2 MULF #5.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1

– Toán hạng thứ nhất và thứ hai của mỗi chỉ thị tương ứng mô

tả đối tượng nguồn và đích– Dấu # để xác định số 5.0 xem như một hằng số

id1 = id2 +id3 * 5.0

Trang 28

2.2 Các giai đoạn biên dịch (tt)

 Quá trình dịch một câu lệnh: position:=initial + rate*60

Trang 29

 Thường được nhóm thành hai nhóm cơ bản

– Kỳ đầu (Front end)

– Kỳ sau (Back end)

Trang 30

2.3 Gộp các giai đoạn (tt)

 Kỳ đầu (Front end)

– Bao gồm các giai đoạn phụ thuộc nhiều vào ngôn ngữ nguồn

và độc lập với máy đích, thường chứa các giai đoạn sau:

 Phân tích từ vựng

 Phân tích cú pháp

 Phân tích ngữ nghĩa

 Sinh mã trung gian

– Một phần của việc tối ưu hóa mã được thực hiện ở kỳ này

– Nó cũng bao gồm cả việc xử lý lỗi xuất hiện trong từng giai đoạn

Trang 31

2.3 Gộp các giai đoạn (tt)

– Kỳ sau bao gồm một số phần nào đó của trình biên dịch

– Phụ thuộc vào máy đích

– Nói chung các phần này không phụ thuộc vào ngôn ngữ nguồn mà là ngôn ngữ trung gian

– Còn có một số vấn đề tối ưu hoá mã, phát sinh mã đích cùng với việc xử lý lỗi và các thao tác trên bảng ký hiệu

Trang 32

2.4 Câu hỏi ôn tập

 1 Trình bày các giai đoạn của trình biên dịch và chức năng của từng giai đoạn

 2 Trình biên dịch có thể nhóm lại thành các giai đoạn

cơ bản nào ? Nêu nhiệm vụ của các giai đoạn đó

 3 Trình bày các giai đoạn của quá trình dịch các câu lệnh sau:

 a/ m = (n + k )*10, với m,n,k là các số thực

 b/ a = (b+c) * (d+e)

 c/ y = x*y + z *12

Ngày đăng: 19/10/2014, 09:19

HÌNH ẢNH LIÊN QUAN

Hình  được  cho  như  hình - Chương 2 Tổng quan về trình biên dịch
nh được cho như hình (Trang 9)

TỪ KHÓA LIÊN QUAN

w