CHƯƠNG TRÌNH DỊCH bài 10 PHÂN TÍCH NGỮ NGHĨA

9 594 4
CHƯƠNG TRÌNH DỊCH   bài 10 PHÂN TÍCH NGỮ NGHĨA

Đang tải... (xem toàn văn)

Thông tin tài liệu

21/1/2010 Nội dung Bài 10 Phân tích ngữ nghĩa Những vấn đề ngữ nghĩa „ Kiểm tra kiểu (Type checking) „ … Hệ thống kiểu ngôn ngữ lập trình tả kiểm tra kiểu … Chuyển đổi kiểu … Đặc „ Bảng ký hiệu … Luật … Các Phân tích 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 ới kh khaii bá báo ủ chúng hú … 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 phạm vi ảnh hưởng biến sơ đồ dịch để xây dựng bảng ký hiệu Khái niệm 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 „ 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 „ 21/1/2010 Ví dụ kiểm tra kiểu Kiểm tra kiểu „ Toán tử % C thực toán hạng số nguyên „ Chỉ có mảng có số kiểu số phải nguyên „ Một hàm phải có số lượng tham số định tham số phải 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 đươ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 … Các biểu thức kiểu ngôn ngữ … Bộ luật để định kiểu cho cấu trúc Biểu thức kiểu (Type Expression) 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) 1.Kiểu liệu chuẩn (int, real, boolean, char) biểu thức kiểu 2.Biểu thức kiểu liên hệ với tên Tên kiểu biểu thức 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 Cấu trú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 nhau, Ví dụ struct { double r; int i; } Có kiểu ((r x int) x (i x char)) 21/1/2010 Cấu trúc kiểu (tiếp) (d) Con trỏ: Nêu T biểu thức kiểu pointer(T) biểu thức kiểu (e) Hàm Nếu D miền xác định R miền giá trị hàm kiểu biểu diễn biểu_ thức : D : R Ví dụ hàm C int f(char a, b) Có kiểu: char × char : int Đặc tả kiểm tra kiểu Ngôn ngữ đơn giản với tên liên kết với kiểu „ Văn phạm thuộc tính để khai báo biểu thức Hệ thống kiểu (Type System) Tập luật để xây dựng biểu thức kiểu phần khác chương trình „ Được định nghĩa thông qua định nghĩa tựa cú pháp „ Bộ kiểm tra kiểu thực hệ thống kiểu „ Ngôn ngữ định kiểu mạnh: Chương trình dịch kiểm soát hết lỗi kiểu „ Thuộc tính „ P → D;E D → D;D | id : T T → char | int | array[num] of T | ↑T E → literal | num | id | E mod E | E[E] | E↑ „ Thuộc tính khái niệm trừu tượng biểu diễn đại lượng , chẳng hạn số, xâu, vị trí g ộ nhớ „ Thuộc tính gọi tổng hợp giá trị nút xác định từ giá trị nút „ Thuộc tính kế thừa thuộc tính nút mà giá trị định nghĩa dựa vào giá trị nút cha và/hoặc nút anh em 21/1/2010 Định nghĩa tựa cú pháp (syntax directed definition) „ „ Định nghĩa tựa cú pháp dạng tổng quát văn phạm phi ngữ cảnh để đặc tả cú pháp ngôn ngữ vào Mỗi ký hiệu văn phạm liên kết với tập thuộc tính , Mỗi sản xuất A → α liên hệ với tập quy tắc ngữ nghĩa để tính giá trị thuộc tính liên kết với ký hiệu xuất sản xuất Tập quy tắc ngữ nghĩa có dạng b= f (c1, c2, , cn) f hàm b thoả hai yêu cầu sau: … b thuộc tính tổng hợp A c1 , , cn thuộc tính liên kết với ký hiệu vế phải sản xuất A → α … b thuộc tính thừa kế ký hiệu xuất α, c1 , , cn thuộc tính ký hiệu vế phải sản xuất A → α Cây phân tích cú pháp có giải Ví dụ Sản xuất Quy tắc ngữ nghĩa L → E return Print (E.val) E → E1+T E.val = E1.val + T.val E→T E.val = T.val T → T1 * F T.val = T1.val * F.val T→F T.val = F.val F → (E) F.val = E.val F → digit F.val = digit.Lexval • Các ký hiệu E, T, F liên hệ với thuộc tính tổng hợp val •Từ tố digit có thuộc tính tổng hợp lexval ( Được phân tích từ vựng đưa ) Ví dụ „Cây cú pháp có giá t ị trị thuộc th ộ tính tí h t i ỗi nút gọi cú pháp có giải 21/1/2010 Bộ kiểm tra kiểu định danh Bộ kiểm tra kiểu biểu thức Bộ kiểm tra kiểu lệnh Bộ kiểm tra kiểu hàm 21/1/2010 Hàm kiểm tra biểu thức kiểu tương đương function sequiv(s, t): boolean; begin if s t kiểu liệu chuẩn then return true; y( s2)) and t = array(t1, y( t2)) then else if s = array(s1, return sequiv(s1, t1) and sequiv(s2, t2) else if s = s1 x s2 and t = t1 x t2) then return sequiv(s1, t1) and sequiv(s2, t2) else if s = pointer(s1) and t = pointer(t1) then return sequiv(s1, t1) else if s = s1→ s2 and t = t1→ t2 then return sequiv(s1, t1) and sequiv(s2, t2) else return false; end; Áp đặt kiểu biểu thức Chuyển đổi kiểu „ Kiểu x+i với x kiểu real i kiểu int Khi dịch sang lệnh máy, phép cộng với kiểu real kiểu int có mã lệnh khác „ Tùy ngôn ngữ luật chuyển đổi quy đổi toán hạng hai kiểu Bảng ký hiệu Lưu trữ thông tin tên, kiểu, phạm vi kích cỡ nhớ cần phân phối „ Bổ sung g liệu tìm kiếm nhanh chóng g „ Thích hợp với cấu trúc liệu động „ … Thường dùng danh sách tuyến tính bảng băm … Mỗi lối vào có dạng ghi với trường cho loại thông tin 21/1/2010 Lưu trữ tên Bảng ký hiệu luật phạm vi sử dụng „ „ Khối ngôn ngữ lập trình tập cấu trúc ngôn ngữ có chứa khai báo Một ngôn ngữ có cấu trúc khối … Các Cá khối đ lồng lồ bê bên ttrong hữ khối khác vi khai báo khối khối khối chứa … Phạm „ Luật lồng gần … Cho nhiều khai báo tên Khai báo có hiệu lực khai báo nằm khối gần Giải pháp nhiều bảng ký hiệu „ Các bảng cần kết nối từ phạm vi phạm vi ngược lại Các luật phạm vi lồng „ „ „ Toán tử insert vào bảng ký hiệu không ghi đè khai báo trước Toán tử lookup vào bảng ký hiệu luôn tham chiếu luật phạm vi gần Toán tử delete xóa khai báo gần Bảng ký hiệu hoạt động stack 21/1/2010 Xây dựng giai đoạn phân tích cú pháp „ „ Tính địa biến toàn cục offset Chỉ bắt đầu nhập thông tin vào bảng ký hiệu từ phân tích từ vựng ngôn ngữ lập trình không cho khai báo tên trùng Nếu ế cho phép phạm vi, phân tích từ vựng trả tên định danh với token … Định danh thêm vào bảng ký hiệu vai trò cú pháp định danh phát Địa liên quan „ Địa liên quan: Thông tin phân phối nhớ logic Biến toàn cục offset lưu vết địa rỗi „ Trước khai báo đầu tiên, offset gán giá trị „ Mỗi ỗ tìm thấy ấ định danh, offset tăng lên „ 21/1/2010 Lưu trữ thông tin phạm vi lồng „ „ „ Xử lý khai báo thủ tục lồng Xét thủ tục lồng nhau: Khi thủ tục nằm thủ tục khác gọi, khai báo thủ tục bên tạm dừng hoạt động Dùng stack để ể lưu trữ dấu ấ vết ế thủ tục lồng Tạo bảng ký hiệu cho thủ tục … Khi thêm định danh vào bảng ký hiệu, cần rõ bảng ký hiệu cần thêm Lưu trữ dấu vết phạm vi „ „ „ „ „ „ mktable(previous) Tạo bảng ký hiệu trả lại trỏ bảng ký hiệu Tham số previous trỏ tới thủ tục chứa Stack tblptr chứa trỏ tới bảng ký hiệu thủ tục chứa Stack offset chứa dấu vết địa ị tương g ứng g mức lồng enter(table,name,type,offset) tạo lối vào cho định danh name bảng ký hiệu mà table trỏ tới , đồng thồi thuộc tính type offset addwidth(table,width) ghi giá trị width lối vào table vào header bảng ký hiệu enterproc(table,name,newtable) Tạo lối vào cho thủ tục name bảng ký hiệu table Tham số newtable tới bảng ký hiệu cho thủ tục name ... hoạt động stack 21/1/2 010 Xây dựng giai đoạn phân tích cú pháp „ „ Tính địa biến toàn cục offset Chỉ bắt đầu nhập thông tin vào bảng ký hiệu từ phân tích từ vựng ngôn ngữ lập trình không cho khai... khác chương trình „ Được định nghĩa thông qua định nghĩa tựa cú pháp „ Bộ kiểm tra kiểu thực hệ thống kiểu „ Ngôn ngữ định kiểu mạnh: Chương trình dịch kiểm soát hết lỗi kiểu „ Thuộc tính „ P → D;E... giá trị định nghĩa dựa vào giá trị nút cha và/hoặc nút anh em 21/1/2 010 Định nghĩa tựa cú pháp (syntax directed definition) „ „ Định nghĩa tựa cú pháp dạng tổng quát văn phạm phi ngữ cảnh để đặc

Ngày đăng: 11/11/2015, 22:59

Từ khóa liên quan

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

Tài liệu liên quan