Slide trình biên dịch chương 5 phân tích ngữ nghĩa

24 27 0
Slide trình biên dịch chương 5 phân tích ngữ nghĩa

Đ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

Bài PHÂN TÍCH NGỮ NGHĨA Hồng Anh Việt Viện CNTT&TT - ĐHBKHN CuuDuongThanCong.com https://fb.com/tailieudientucntt Tổng kết • Trước đây: tự viết phân tích cú pháp • Hiện nay: sử dụng trình sinh phân tích cú pháp VD: yacc, cup, bison • Ưu điểm: – Sử dụng phương pháp phân tích LALR(1) – Cho phép khai báo thứ tự ưu tiên, kết hợp phép tốn – Tự động sinh code phân tích cú pháp (kể bảng phân tích LALR(1)) CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung Những vấn đề ngữ nghĩa Kiểm tra kiểu – Hệ thống kiểu ngôn ngữ lập trình Bảng ký hiệu CuuDuongThanCong.com https://fb.com/tailieudientucntt Phân tích ngữ nghĩa Chương trình nguồn Phân tích từ vựng Lỗi từ vựng dãy từ tố Lỗi cú pháp Phân tích cú pháp cú pháp Phân tích ngữ nghĩa CuuDuongThanCong.com Chương trình đúng: cú pháp điều khiển Lỗi ngữ nghĩa https://fb.com/tailieudientucntt Những vấn đề ngữ nghĩa • Tìm lỗi sau giai đoạn phân tích cú pháp – Kiểm tra tương ứng kiểu – Kiểm tra tương ứng việc sử dụng hàm, biến với khai báo chúng – Xác định phạm vi ảnh hưởng biến chương trình • Phân tích ngữ nghĩa thường sử dụng cú pháp CuuDuongThanCong.com https://fb.com/tailieudientucntt Kiểm tra kiểu • Kiểm tra xem chương trình có tn theo luật kiểu ngơn ngữ khơng • Trình biên dịch quản lý thơng tin kiểu • Việc kiểm tra kiểu thực kiểm tra kiểu (type checker), phận trình biên dịch CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ kiểm tra kiểu • Tốn tử % C thực toán hạng số ngun • Chỉ có mảng có số kiểu số phải số nguyên • Một hàm phải có số lượng tham số định tham số phải kiểu • Các phép tốn địi hỏi tốn hạng phải phù hợp kiểu • Các hàm địi hỏi tham số phù hợp kiểu • Lệnh return phải trả kiểu trả hàm • Lệnh gán địi hỏi kiểu vế phải phù hợp với kiểu vế trái • Lệnh khai báo kiểu: typedef, class CuuDuongThanCong.com https://fb.com/tailieudientucntt Kiểm tra kiểu • Có hai phương pháp tĩnh động • Phương pháp áp dụng thời gian dịch tĩnh • Trong ngơn ngữ C hay Pascal, kiểm tra kiểu tĩnh dùng để kiểm tra tính đắn chương trình trước thực • Kiểm tra kiểu tĩnh sử dụng xác định dung lượng nhớ cần thiết cho biến • Bộ kiểm tra kiểu xây dựng dựa trên: – Các biểu thức kiểu ngôn ngữ – Bộ luật để định kiểu cho cấu trúc CuuDuongThanCong.com https://fb.com/tailieudientucntt 2.1 Biểu thức kiểu • Biểu diễn kiểu cấu trúc ngôn ngữ • Một biểu thức kiểu kiểu liệu chuẩn xây dựng từ kiểu liệu khác cấu trúc kiểu (Type Constructor) – Kiểu liệu chuẩn (int, real, boolean, char) biểu thức kiểu – Biểu thức kiểu liên hệ với tên Tên kiểu biểu thức kiểu – Cấu trúc kiểu ứng dụng vào biểu thức kiểu tạo biểu thức kiểu CuuDuongThanCong.com https://fb.com/tailieudientucntt 2.1 Biểu thức kiểu • • • • Mỗi ngơn ngữ lập trình có hệ thống kiểu riêng Mỗi kiểu giới hạn liệu VD: int = [-231, 231], char = [-128, 127] Các kiểu liệu phức hợp tạo từ kiểu đơn giản biểu thức kiểu (type expressions, type contructors) • VD: int, string, Array[int], Object CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: C++ • Kiểu bản: int, char, … • Kiểu phức hợp: int[100], struct {int a, char b} • Biểu thức kiểu: T kiểu T[ ] kiểu với T CuuDuongThanCong.com https://fb.com/tailieudientucntt Định nghĩa kiểu • Một số ngơn ngữ cho phép người lập trình tự định nghĩa kiểu • VD: C++ typedef int int_array[ ]; class cView { … }; • int_array kiểu giống với int[ ] • Có thể có nhiều định nghĩa kiểu kiểu CuuDuongThanCong.com https://fb.com/tailieudientucntt Biểu thức kiểu: Mảng • Mỗi ngơn ngữ có cách định nghĩa mảng • Mảng khơng giới hạn: – C/C++: T[ ] • Mảng có giới hạn – C/C++/Java: T[L] – L phần tử kiểu T • Mảng có giới hạn trên, – Pascal: T[L, U] – đánh số từ L đến U • Mảng nhiều chiều – C/C++/Java/Pascal CuuDuongThanCong.com https://fb.com/tailieudientucntt Biểu thức kiểu: Cấu trúc • Là biểu thức kiểu phức tạp • Biểu thức kiểu có dạng {id1: T1, id2: T2, …} với id T tên kiểu trường • Ví dụ – C/C++: struct { int a; float b; } tương ứng với biểu thức kiểu {a: int, b: float} • Các kiểu lớp (Class) mở rộng kiểu struct (cho phép thành viên hàm) CuuDuongThanCong.com https://fb.com/tailieudientucntt Biểu thức kiểu: Hàm • Hàm cho phép nhận nhiều tham số trả giá trị • Tham số thứ i có kiểu Ti, kiểu trả T • Biểu thức kiểu: T1 x T2 x … Tn  T • Ví dụ: int f(int, char) tương ứng với biểu thức kiểu int x char  int • Trong C++/Java, cần mở rộng biểu thức kiểu hàm để trả lại ngoại lệ CuuDuongThanCong.com https://fb.com/tailieudientucntt 2.1 Biểu thức kiểu (a) Mảng (Array).Nếu T biểu thưc kiểu array(I,T) biểu thức kiểu biểu diễn mảng với phần tử kiểu T số miền I – Ví dụ : array [10] of integer có kiểu array(1 10,int); (b) Tích Descarter Nếu T1và T2 biểu thức kiểu tích Descarter T1 T2 biểu thức kiểu (c) Bản ghi (Record) Tương tự tích Descarter chứa tên khác cho kiểu khác CuuDuongThanCong.com https://fb.com/tailieudientucntt 16 2.1 Biểu thức kiểu • Ví dụ: struct { double r; int i; } Có kiểu ((r x double) x (i x char)) (e) Hàm Nếu D miền xác định R miền giá trị hàm kiểu biểu diễn là: D : R Ví dụ hàm C int f(char a, b) Có kiểu: char char : int CuuDuongThanCong.com https://fb.com/tailieudientucntt 17 2.2 Hệ thống kiểu • Hệ thống kiểu sưu tập quy tắc để gán biểu thức kiểu vào phần chương trình • Được định nghĩa thơng qua dịch trực tiếp cú pháp • Bộ kiểm tra kiểu cài đặt hệ thống kiểu CuuDuongThanCong.com https://fb.com/tailieudientucntt 18 2.3 Đặc tả kiểm tra kiểu • Văn phạm sau sinh chương trình, biểu diễn ký hiệu chưa kết thúc P chứa chuỗi khai báo D biểu thức đơn giản E • Các kiểu sở: char, integer type-error • Mảng Chẳng hạn array[256] of char biểu thức kiểu (1 256, char) • Kiểu trỏ ↑T biểu thức kiểu pointer(T) CuuDuongThanCong.com https://fb.com/tailieudientucntt 19 Kiểm tra kiểu định danh CuuDuongThanCong.com https://fb.com/tailieudientucntt 20 ... https://fb.com/tailieudientucntt Phân tích ngữ nghĩa Chương trình nguồn Phân tích từ vựng Lỗi từ vựng dãy từ tố Lỗi cú pháp Phân tích cú pháp cú pháp Phân tích ngữ nghĩa CuuDuongThanCong.com Chương trình đúng: cú... biến chương trình • Phân tích ngữ nghĩa thường sử dụng cú pháp CuuDuongThanCong.com https://fb.com/tailieudientucntt Kiểm tra kiểu • Kiểm tra xem chương trình có tuân theo luật kiểu ngôn ngữ không... sinh code phân tích cú pháp (kể bảng phân tích LALR(1)) CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung Những vấn đề ngữ nghĩa Kiểm tra kiểu – Hệ thống kiểu ngơn ngữ lập trình Bảng

Ngày đăng: 29/07/2021, 08:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan