Hai cách kiểm tra kiểu là kiểm tra tĩnh được thực hiện trong thời gian biên dịch chương trình nguồn và kiểm tra động được thực hiện trong thời gian thực thi chương trình đích. Trong chương này ta tập trung vào phần xử lý ngữ nghĩa bằng cách kiểm tra tĩnh mà cụ thể là kiểm tra kiểu. Phần đầu của chương trình bày các khái niệm về hệ thống kiểu, các biểu thức kiểu. Phần còn lại mô tả cách tạo ra một bộ kiểm tra kiểu đơn giản. | CHƯƠNG VI KIỂM TRA KIỂU Nội dung chính: Hai cách kiểm tra kiểu là kiểm tra tĩnh được thực hiện trong thời gian biên dịch chương trình nguồn và kiểm tra động được thực hiện trong thời gian thực thi chương trình đích. Trong chương này ta tập trung vào phần xử lý ngữ nghĩa bằng cách kiểm tra tĩnh mà cụ thể là kiểm tra kiểu. Phần đầu của chương trình bày các khái niệm về hệ thống kiểu, các biểu thức kiểu. Phần còn lại mô tả cách tạo ra một bộ kiểm tra kiểu đơn giản. Mục tiêu cần đạt: Sau khi học xong chương này, sinh viên phải nắm được: • Hệ thống kiểu với các biểu thức kiểu (kiểu cơ sở và kiểu có cấu trúc) thường gặp ở bất cứ một ngôn ngữ lập trình nào. • Dịch trực tiếp cú pháp cài đặt bộ kiểm tra kiểu đơn giản từ đó có thể mở rộng để cài đặt cho những ngôn ngữ phức tạp hơn. Kiến thức cơ bản: Sinh viên phải biết một số ngôn ngữ lập trình cấp cao như Pascal, C++, Java, hoặc đã được học môn ngôn ngữ lập trình (phần đề cập đến các kiểu cơ sở và kiểu có cấu trúc). Tài liệu tham khảo: [1] Compilers : Principles, Technique and Tools - Alfred , Jeffrey - Addison - Wesley Publishing Company, 1986. [2] Modern Compiler Implementation in C - Andrew W. Appel - Cambridge University Press, 1997. [3] Compiler Design – Reinhard Wilhelm, Dieter Maurer - Addison - Wesley Publishing Company, 1996. I. HỆ THỐNG KIỂU Trong các ngôn ngữ nói chung đều có kiểu cơ sở và kiểu có cấu trúc. Chẳng hạn trang Pascal, kiểu cơ sở là: boolean, char, integer, real, kiểu miền con và kiểu liệt kê. Các kiểu có cấu trúc như mảng, mẩu tin, tập hợp, . 1. Biểu thức kiểu Biểu thức kiểu bao gồm: 1. Kiểu cơ sở là một biểu thức kiểu: boolean, char, integer, real. Ngoài ra còn có các kiểu cơ sở đặc biệt như: kiểu type_error: chỉ ra một lỗi trong quá trình kiểm tra kiểu; kiểu void, “không có giá trị”, cho phép kiểm tra kiểu đối với lệnh. 135 2. Vì biểu thức kiểu có thể được đặt tên, tên kiểu là một biểu thức kiểu. 3. Cấu trúc kiểu là một biểu thức kiểu, các cấu trúc bao gồm: a. Mảng (array):