Semantic analysis

Một phần của tài liệu Principles of compilers (Trang 29 - 34)

Bài 1 Giới thiệu về chương trình dịch

1.3.3. Semantic analysis

Ngữ nghĩa: Trong phạm vi của một PL liên quan đến:  Kiểu, phạm vi của hằng và biến (type checking)

 Phân biệt và sử dụng đúng tên hằng, tên biến, tên hàm

Phân tích ngữ nghĩa: Sử dụng cấu trúc phân cấp của giai đoạn parser để xác định các toán tử, toán hạng của các biểu thức và câu lệnh, Phân tích các đặc tính khác của chương trình mà không phải đặc tính cú pháp. Kiểm tra chương trình nguồn để tìm lỗi cú pháp và sự hợp kiểu.

CTD phải kiểm tra tính đúng đắn trong sử dụng các đại lượng. Ví dụ: không cho gán giá trị cho hằng, kiểm tra tính đúng đắn trong gán kiểu, kiểm tra phạm vi, kiểm tra sử dụng tên (tên không được khai báo trùng, dùng cho gọi hàm phải là tên có thuộc tính hàm)...

1.3.3. Semantic analysis

VD: Giả sử các biến rate, initial và position được khai báo

là real, 60 là số integer vì vậy trình biên dịch sẽ đổi số nguyên 60 thành số thực 60.0 bằng hàm inttoreal := 60 + b a * c := inttoreal + b a * c 60

Bài 1. Giới thiệu về chương trình dịch

1.1. Khái niệm về compiler

1.2. Vị trí của compiler trong LPS

1.3. Các giai đoạn làm việc của compiler

1.3.1. Phân tích từ vựng (lexical analysis) 1.3.2. Phân tích cú pháp (syntax analysis) 1.3.2. Phân tích cú pháp (syntax analysis)

1.3.3. Phân tích ngữ nghĩa (semantic analysis)

1.3.4. Sinh mã trung gian (ICG)

1.3.5. Tối ưu mã (code optimition) 1.3.6. Sinh mã đích (code generation) 1.3.6. Sinh mã đích (code generation) 1.4. Vấn đề quản lý bảng ký tự

1.3.4. Sinh mã trung gian (ICG)

 Sau khi phân tích cấu trúc và 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

IC thông thường được biểu diễn dưới dạng "mã máy 3 địa

chỉ" (three-address code), tương tự như dạng hợp ngữ cho một máy mà trong đó mỗi vị trí bộ nhớ có thể đóng vai trò như một thanh ghi.

Sinh mã trung gian: Sinh chương trình trong IL nhằm:

 dễ sinh và tối ưu mã;

1.3.4. Sinh mã trung gian (ICG)

VD: Với chuỗi nhập:

a= b+c*60

sau giai đoạn phân tích thì IC sinh ra có dạng như sau:

temp1 := 60

temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3

Bài 1. Giới thiệu về chương trình dịch

1.1. Khái niệm về compiler

1.2. Vị trí của compiler trong LPS

1.3. Các giai đoạn làm việc của compiler

1.3.1. Phân tích từ vựng (lexical analysis) 1.3.2. Phân tích cú pháp (syntax analysis) 1.3.2. Phân tích cú pháp (syntax analysis)

1.3.3. Phân tích ngữ nghĩa (semantic analysis) 1.3.4. Sinh mã trung gian (ICG) 1.3.4. Sinh mã trung gian (ICG)

Một phần của tài liệu Principles of compilers (Trang 29 - 34)

Tải bản đầy đủ (PDF)

(48 trang)