Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay Mô phỏng symbol table bằng cây splay
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Cấu trúc liệu giải thuật - CO2003 Bài tập lớn MÔ PHỎNG SYMBOL TABLE BẰNG CÂY SPLAY Tác giả: ThS Trần Ngọc Bảo Duy TP HỒ CHÍ MINH, THÁNG 08/2021 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH ĐẶC TẢ BÀI TẬP LỚN Phiên 1.0 Chuẩn đầu Sau hoàn thành tập lớn này, sinh viên ơn lại sử dụng thành thục: • Thiết kế sử dụng đệ quy • Lập trình hướng đối tượng • Các cấu trúc liệu Dẫn nhập Symbol table (tạm gọi bảng ghi đối tượng) cấu trúc liệu quan trọng tạo ra, trì sử dụng trình biên dịch (compiler) nhằm lưu vết ngữ nghĩa danh hiệu (identifiers) lưu thông tin tên (name), thông tin kiểu (type), thông tin tầm vực (scope), v.v Trong tập lớn trước, sinh viên yêu cầu thực mô bảng ghi đối tượng sử dụng cấu trúc liệu danh sách Tuy nhiên, tốc độ truy xuất dùng để kiểm tra loại cấu trúc liệu khơng cao Khi chương trình nguồn có q nhiều biến lưu thành nhiều tầm vực khác nhau, chương trình trở nên thiếu hiệu Mặt khác, thực tế, lập trình viên thường có xu hướng sử dụng danh hiệu vừa khai báo danh hiệu vừa sử dụng gần để tiếp tục sử dụng cho dòng lệnh làm cho trình truy xuất danh hiệu trở nên phổ biến Trong tập lớn, sinh viên yêu cầu thực mô bảng ghi đối tượng sử dụng cấu trúc liệu splay để đáp ứng nhược điểm nêu 3.1 Mô tả Đầu vào Mỗi testcase tập tin đầu vào bao gồm dòng lệnh tương tác với bảng ghi đối tượng Các dịng lệnh mơ tả mơ tả mục 3.5 Sinh viên thấy ví dụ testcase Bài tập lớn mơn Cấu trúc liệu giải thuật - HK năm học 2021 - 2022 Trang 1/10 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH thơng qua mục 3.2 u cầu Để hoàn thành tập lớn này, sinh viên phải: Đọc tồn tập tin mơ tả Tải xuống tập tin initial.zip giải nén Sau giải nén, sinh viên nhận tập tin: main.h, main.cpp, SymbolTable.h, SymbolTable.cpp, error.h, đó, sinh viên khơng phép sửa đổi tập tin không nằm danh mục dùng để nộp Sửa đổi file SymbolTable.h, SymbolTable.cpp để hoàn thành tập lớn đảm bảo hai yêu cầu sau: • Ít có lớp SymbolTable có phương thức đối tượng (instance method) public void run(string testcase) phương thức đầu vào cho lời giải Đối với testcase, đối tượng lớp tạo phương thức run đối tượng gọi với tham số tên file tập tin văn (chứa đoạn tương tác với bảng ghi đối tượng) • Chỉ có lệnh include file SymbolTable.h #include "main.h" include file SymbolTable.cpp #include "SymbolTable.h" Ngồi ra, khơng cho phép có #include khác tập tin Sinh viên yêu cầu thiết kế sử dụng cấu trúc liệu dựa cấu trúc liệu splay học Sinh viên phải giải phóng tồn vùng nhớ xin cấp phát động chương trình kết thúc 3.3 Thơng tin đối tượng bảng ghi Thông tin đối tượng (symbol) bao gồm: Tên danh hiệu (identifier) Mức khối mà danh hiệu thuộc (level of block) Kiểu tương ứng danh hiệu (type) Trên nhị phân tìm kiếm, việc so sánh khóa nút diễn thường xuyên Để so sánh khóa đối tượng, ta so sánh: Bài tập lớn môn Cấu trúc liệu giải thuật - HK năm học 2021 - 2022 Trang 2/10 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH • So sánh mức khối mà danh hiệu thuộc về, lớn khóa nút xem lớn ngược lại • Trong trường hợp mức khối mà danh hiệu thuộc nhau, ta so sánh tên danh hiệu (chuỗi) theo bước: – Bằng tên danh hiệu trùng hoàn toàn – Lớn ký tự không trùng chuỗi thứ lớn ký tự tương ứng chuỗi thứ hai – Nhỏ cho trường hợp ngược lại Sinh viên nên sử dụng phương thức compare thư viện lớp string để thực so sánh chuỗi 3.4 Các lỗi ngữ nghĩa Trong trình tương tác, kiểm tra số lỗi ngữ nghĩa ném (thông qua lệnh throw ngơn ngữ lập trình C/C++) tìm thấy: Lỗi không khai báo Undeclared Lỗi khai báo lại Redeclared Lỗi khai báo không hợp lệ InvalidDeclaration Lỗi không kiểu TypeMismatch Lỗi không đóng lại khối UnclosedBlock kèm với mức khối khơng đóng (được mơ tả mục 3.5.3) Lỗi khơng tìm thấy khối tương ứng UnknownBlock Các lỗi kèm lệnh tương ứng chuỗi kí tự tập tin đầu vào trừ lỗi UnclosedBlock UnknownBlock Chương trình dừng lại khơng tiếp tục tương tác có lỗi xảy 3.5 Các lệnh tương tác Một lệnh viết dịng ln bắt đầu mã Ngồi ra, lệnh khơng có có hai tham số Tham số lệnh, có, cách mã khoảng trắng (space) Tham số thứ hai mã, có, cách với tham số khoảng trắng Ngồi ra, khơng có ký tự phân cách theo sau khác Ngược với quy định trên, lệnh sai, mô ném lỗi InvalidInstruction kèm với dòng lệnh sai kết thúc Bài tập lớn môn Cấu trúc liệu giải thuật - HK năm học 2021 - 2022 Trang 3/10 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH 3.5.1 Thêm đối tượng vào bảng ghi hoạt động - INSERT • Định dạng chung: INSERT đó: – tên danh hiệu, chuỗi ký tự bắt đầu ký tự chữ thường ký tự bao gồm ký tự chữ thường, in hoa, ký tự gạch _ ký tự số – kiểu tương ứng danh hiệu Có ba loại kiểu number string kiểu hàm để khai báo kiểu số kiểu chuỗi ký tự Kiểu hàm chia thành hai phần: kiểu danh sách rỗng tham số kiểu trả phân cách với dấu mũi tên -> Kiểu danh sách tham số bắt đầu dấu ngoặc tròn, danh sách kiểu number string phân cách với dấu phẩy Kiểu trả hai kiểu number string Kiểu hàm phép khai báo khối toàn cục (mức 0) Ví dụ kiểu hàm: (number,number)->string tức hàm có hai tham số đầu vào kiểu number hàm trả giá trị kiểu string – giá trị true false Nếu nhận giá trị true danh hiệu vừa thêm thuộc tầm vực toàn cục (global scope), tức mức khối mà danh hiệu thuộc ln • Ý nghĩa: Đưa danh hiệu vào bảng ghi đối tượng So sánh với C/C++, tương tự việc khai báo biến • Giá trị in hình: số phép so sánh với nút có cây, số thao tác splay phải thực thêm thành công vào bảng, ngược lại ném lỗi tương ứng • Các lỗi xảy ra: – Redeclared khai báo lại danh hiệu khai báo trước – InvalidDeclaration khai báo hàm khối có mức khác Bài tập lớn môn Cấu trúc liệu giải thuật - HK năm học 2021 - 2022 Trang 4/10 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Ví dụ 1: Với tập tin đầu vào gồm dòng: INSERT a1 number false INSERT b2 string false INSERT b1 (number,number)->string false Cây splay thể bảng ghi tương ứng: b1//0 Do lỗi trùng tên (khai báo lại) nên chương trình in ra: a1//0 0 b2//0 1 Ví dụ 2: Với tập tin đầu vào gồm dòng: INSERT x number false INSERT y string false Cây splay thể INSERT x string false bảng ghi tương ứng Do thêm danh hiệu x dòng số mà tiếp tục thêm (trước bị bắt lỗi): danh hiệu x dòng số nên gây lỗi Redeclared nên chương y//0 trình in ra: 0 x//0 1 Redeclared: INSERT x string false 3.5.2 Gán giá trị cho đối tượng - ASSIGN • Định dạng chung: ASSIGN đó: – tên danh hiệu phải tuân theo luật nêu mục 3.5.1 – giá trị gán vào biến, bao gồm ba dạng: ∗ Hằng số: dãy số Ví dụ: 123, 456, 789 số đúng, cịn 123a, 123.5, 123.8.7 khơng số Hằng số xem có kiểu số (number) ∗ Hằng chuỗi: bắt đầu dấu nháy đơn (’), chuỗi bao gồm ký tự số, ký tự chữ, khoảng trắng kết thúc dấu nháy đơn Ví dụ: ’abc’, ’a 12 C’ chuỗi, cịn ’abc_1’, ’abC@u’ khơng chuỗi Bài tập lớn môn Cấu trúc liệu giải thuật - HK năm học 2021 - 2022 Trang 5/10 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Hằng chuỗi xem có kiểu chuỗi (string) ∗ Một danh hiệu khác khai báo trước ∗ Một lời gọi hàm bao bắt đầu tên danh hiệu kiểu hàm, dấu mở ngoặc trịn, danh sách rỗng tham số thực (chỉ số, chuỗi danh hiệu khai báo trước đó) phân cách với một dấu phẩy kết thúc dấu đóng ngoặc trịn Ví dụ, foo(1, 2) hay baz(a, 1) cách lời gọi hàm hợp lệ • Ý nghĩa: Kiểm tra phù hợp cho việc gán giá trị đơn giản cho danh hiệu Quá trình kiểm tra diễn trước sau • Giá trị in hình: số phép so sánh với nút có cây, số thao tác splay phải thực thành công, ngược lại ném lỗi tương ứng • Các lỗi xảy ra: – Undeclared danh hiệu chưa khai báo xuất phần – TypeMismatch nếu: ∗ Kiểu giá trị gán danh hiệu khác ∗ Lời gọi hàm có tên danh hiệu khơng phải kiểu hàm ∗ Các kiểu tham số thực không tương ứng với kiểu tham số hình thức khai báo Ví dụ 3: Với tập tin đầu vào gồm dòng: INSERT x number false INSERT sum (number,number)->number false ASSIGN x sum(1,1) ASSIGN z sum(12,’abc’) Việc gán dòng thứ gây lỗi TypeMismatch, nên chương trình in sau: 0 1 TypeMismatch: ASSIGN z sum(12,’abc’) Mặc dù chưa có danh hiệu z khai báo sum(12,’abc’) có tham số thực thứ chuỗi ’abc’ không phù hợp kiểu khai báo number Bài tập lớn môn Cấu trúc liệu giải thuật - HK năm học 2021 - 2022 Trang 6/10 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH 3.5.3 Mở đóng khối (block) - BEGIN/ END • Định dạng chung: BEGIN/ END • Ý nghĩa: Mở đóng khối tương tự với việc mở đóng { } C/C++ Khi mở khối mới, có số quy tắc sau: – Được phép khai báo lại tên danh hiệu khai báo trước – Khi tìm kiếm danh hiệu, ta phải tìm với khối Nếu khơng tìm tìm khối cha làm gặp khối tồn cục – Các khối có mức (level) xác định với khối toàn cục xác định mức tăng dần với khối – Khi khỏi khối, ta phải xóa hết danh hiệu không khai báo static khỏi bảng ghi danh hiệu theo thứ tự xuất chúng • Giá trị in ra: Chương trình khơng in với việc đóng mở block • Các lỗi xảy ra: UnclosedBlock ném ta khơng đóng lại khối mở UnknownBlock đóng lại khơng tìm dược khối bắt đầu Ví dụ 4: Với tập tin đầu vào gồm dòng: Sau thêm z dòng thứ 6, splay thể bảng ghi sau: INSERT x number false z//0 INSERT y string false BEGIN y//0 x//1 INSERT x number false BEGIN x//0 INSERT z string true END Sau khỏi khối có mức dòng 7, z danh hiệu END khai báo static nên z khơng bị xóa khỏi Khi rời khỏi khối có mức dịng 8, x//1 khơng phải Chương trình in ra: danh hiệu static nên bị xóa khỏi cây: 0 1 z//0 1 y//0 x//0 Bài tập lớn môn Cấu trúc liệu giải thuật - HK năm học 2021 - 2022 Trang 7/10 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH 3.5.4 Tìm đối tượng tương ứng với danh hiệu - LOOKUP • Định dạng chung: LOOKUP đó, tên danh hiệu phải tuân theo luật nêu mục 3.5.1 • Ý nghĩa: Tìm kiếm danh hiệu có nằm bảng hoạt động hay khơng So sánh với C/C++, tương tự tìm sử dụng biến • Giá trị in hình: mức block chứa danh hiệu tìm thấy, ngược lại ném lỗi tương ứng • Các lỗi xảy ra: Undeclared khơng tìm thấy danh hiệu tất tầm vực bảng ghi đối tượng Ví dụ 5: Với tập tin đầu vào gồm dòng: INSERT x number false INSERT y string false BEGIN INSERT x number false Sau tìm y dòng 5, splay thể LOOKUP y bảng ghi đối tượng: END y//0 Chương trình in ra: 0 x//0 x//1 1 1 3.5.5 In tiền thứ tự splay thể bảng ghi hoạt động - PRINT • Định dạng chung: PRINT • Ý nghĩa: In tiền thứ tự splay thể bảng ghi hoạt động • Giá trị in ra: danh hiệu kèm theo mức khối tương ứng in cách khoảng trắng dịng khơng có khoảng trắng cuối dịng Bài tập lớn mơn Cấu trúc liệu giải thuật - HK năm học 2021 - 2022 Trang 8/10 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Ví dụ 6: Với tập tin đầu vào gồm dòng: INSERT x number false INSERT y string false BEGIN INSERT x number false INSERT z number false Sau thực tìm kiếm y dòng 6, LOOKUP y splay thể bảng ghi hoạt động là: PRINT END Chương trình in ra: y//0 x//0 x//1 0 1 z//1 1 1 y//0 x//0 x//1 z//1 Nộp Sinh viên nộp tập tin: SymbolTable.h SymbolTable.cpp, trước thời hạn đưa đường dẫn "Assignment - Submission" Có số testcase đơn giản sử dụng để kiểm tra làm sinh viên nhằm đảm bảo kết sinh viên biên dịch chạy Sinh viên nộp lần tùy ý có nộp cuối tính điểm Vì hệ thống khơng thể chịu tải q nhiều sinh viên nộp lúc, sinh viên nên nộp sớm tốt Sinh viên tự chịu rủi ro nộp sát hạn chót Khi thời hạn nộp bài, hệ thống đóng nên sinh viên khơng thể nộp Bài nộp qua phương thức khác không chấp nhận Bài tập lớn môn Cấu trúc liệu giải thuật - HK năm học 2021 - 2022 Trang 9/10 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Other regulations • Sinh viên phải tự hồn thành tập lớn này phải ngăn không cho người khác đánh cắp kết Nếu khơng, sinh viên bị xử lý theo quy định trường gian lận • Mọi định giảng viên phụ trách tập lớn định cuối • Sinh viên không cung cấp testcase sau chấm mà cung cấp thông tin chiến lược thiết kế testcase phân bố số lượng sinh viên theo testcase ———————END——————— Bài tập lớn môn Cấu trúc liệu giải thuật - HK năm học 2021 - 2022 Trang 10/10