1. Trang chủ
  2. » Kỹ Năng Mềm

Bài giảng môn học Trình biên dịch - Chương 8: Tổ chức bảng danh biểu

7 12 0

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

THÔNG TIN TÀI LIỆU

Nội dung

loc (haøm) n := loc (id) Khi caàn truy xuaát moät danh bieåu, loc seõ tìm treân baûng danh bieåu töø phaân töû môùi nhaát cuûa taàm vöïc môùi nhaát ñeán phaân töû cuõ nhaát cuûa taàm vöï[r]

(1)

CHƯƠNG 8

TỔ CHỨC BẢNG DANH BIỂU

8.1 Giới thiệu

Có bốn phương pháp truy xuất bảng danh biểu: Tìm kiếm tuyến tính (linear search)

2 Tìm kiếm nhị phân (binary search) Tìm kiếm (tree search) Mã hóa băm (hash coding)

(2)

Bảng 8.1 Các tác vụ bảng danh biểu

Tên chương trình

con Cách gọi Hành vi thực thi

Enter Enter (id) Khi gặp danh biểu khai báo, thủ tục kiểm tra xem danh biểu có trùng với tên tầm vực? Nếu không, thủ tục enter đưa danh biểu vào bảng danh biểu Ngược lại enter thông báo lỗi việc khai báo danh biểu nhiều lần tầm vực

loc (hàm) n := loc (id) Khi cần truy xuất danh biểu, loc tìm bảng danh biểu từ phân tử tầm vực đến phân tử cũ tầm vực cũ để tìm vị trí id trả thơng qua tên loc hàm

(3)

Scopeexit Scopeexit Khi trình biên dịch hết tầm vực scopeenxit thải hồi tên biến khơng cịn có ý nghĩa tái lập tầm vực gần

8.3 Bảng danh biểu tuyến tính (linear symbol table) Thí dụ 8.1 Cho đoạn chương trình ngơn ngữ Algol.

begin real A, B; begin real C, A; .

(4)

5

4 A

3 C

2 B

1 A

I =

Hình 8.1 Bảng danh biểu tuyến tính thí dụ 8.1

Các tác vụ bảng danh biểu tuyến tính trình bày sau: Giải thuật:

const tab lim = … ; btablim = … ;

3

2

1

B =

(5)

type tabinden = tablim; item = record

key: alfa; /* alfa kiểu chuỗi ký tự */ end;

var btab: array [1 btablim] of integer;

tab: array [1 Tablim] of item; b: • • tablim;

t: tabindex; procedure enter (id: alfa)

var sb: tabindex;

(6)

Tìm kiếm bảng TAB từ vị trí sb đến vị trí t – 1, xem có phần tử mang key id khơng? Nếu có, thủ tục error thơng báo lỗi lỗi có hai danh biểu tên tầm vực Ngược lại, if t = tablim then error (12)

else begin tab [t] key := id; t := t +

end; end;

function loc (id: alfa): tabindex; begin

(7)

end;

Procedure scopeentry;

begin if b = btablim then error (14)

else begin btab [b] := t; b := b + end;

end;

Procedure Scope exit;

begin b := b – 1; t := btab [b] end;

Ngày đăng: 09/03/2021, 05:36

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN