Bạn đang xem trước 20 trang tài liệu Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 3: Cấu trúc điều khiển - Nguyễn Văn Hòa, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên. Tài liệu liên quan. Flutter là ngôn ngữ lập trình cực kỳ đặc biệt khi nó được sử dụng để tạo ra nhiều giao diện native cực kỳ chất lượng trên cả nền tảng iOS lẫn Android. Trên thực tế, Flutter đã được rất nhiều các tổ chức, công ty lớn trên thế giới ưa chuộng và sử dụng cho nhiều dự án lớn. Java Tài liệu về Nguyên lý Ngôn ngữ lập trình - Tài liệu , Nguyen ly Ngon ngu lap trinh - Tai lieu tại 123doc - Thư viện trực tuyến hàng đầu Việt Nam. luanvansieucap. 0. luanvansieucap. Luận Văn - Báo Cáo; Kỹ Năng Mềm; Mẫu Slide; Kinh Doanh - Tiếp Thị . 11134279 MÔN: NGUYÊN LÝ NGÔN NGỮ LẬP TRÌNH ĐỀ TÀI: Nghiên cứu các vấn đề về nguyên lý ngôn ngữ lập trình hướng đối tượng và cài đặt thử nghiệm bài toán tự chọn bằng ngôn ngữ lập trình hướng đối. phạm nguyên lý Open-Closed. Khi đó ta nói hàm "func" vi phạm Cấu trúc máy tính. Cấu trúc rời rạc cho khoa học máy tính. Công nghệ CNC. Công nghệ khai thác dầu khí. Công nghệ khoan dầu khí. Công nghệ xử lý dầu khí. Công nghệ đúc. Công nghệ cán kéo kim loại. Công nghệ nhiệt luyện. Biến là giá trị có thể thay đổi được trong mỗi chương trình, mỗi biến trong Pascal có một kiểu dữ liệu nhất định, xác định kích thước và cách bố trí trong bộ nhớ, phạm vi các giá trị có thể được lưu trữ trong bộ nhớ đó; và bộ toán tử có thể áp dụng cho biến. NdPs. Nguyên lý ngôn ngữ lập trình ... môn h c Gi i thi u ngôn ng l p trình Các ki u d li u Các c u trúc ñi u n Chương trình Ngôn ng l p trình hư ng ñ i tư ng Ngôn ng l p trình hàm Ngôn ng l p trình logic Ngôn ng l p trình song song ... hi n chương trình Chi phí cài ñ t chương trình Chi phí b o trì chương trình 29 Phân lo i ngôn ng l p trình Theo ti n trình l ch s phát tri n Ngôn ng máy, H p ng , Ngôn ng c p cao, Ngôn ng c p ... dùng ñ t o nên chương trình khác 11 Ngôn ng l p trình NNLT ngôn ng dùng ñ vi t chương trình cho máy tính NNLT có t v ng, cú pháp ng nghĩa trình biên d ch Ba lo i NNLT Ngôn ng máy nh phân... 44 2,144 5 Nguyên lý Ngôn ngữ lập trình ... vi phạm nguyên lý Open-Closed Khi ta nói hàm “func” vi phạm nguyên lý Thay Liskov Chú ý i Nguyên lý Thay Liskov có mối liên hệ mật thiết với Nguyên lý Open-Closed Sự vi phạm nguyên lý Thay Liskov ... lý ii Việc tuân thủ nguyên lý Open-Closed thực thể phần mềm mang tính tương đối, phụ thuộc vào ngữ cảnh Có thể ngữ cảnh này, thực thể thỏa nguyên lý, ngữ cảnh khác, thực thể không tuân thủ nguyên ... cấp, mở rộng thỏa nguyên lý iii Việc tuân thủ nguyên lý Thay Liskov thực thể phần mềm mang tính tương đối, phụ thuộc vào ngữ cảnh Có thể ngữ cảnh này, thực thể thỏa nguyên lý, ngữ cảnh khác, thực... 21 529 0 nghiên cứu các vấn đề về nguyên lý ngôn ngữ lập trình hướng đối tượng và cài đặt thử nghiệm bài toán tự chọn bằng ngôn ngữ lập trình hướng đối tượng c++ ... hướng đối tượng ? Đâu sở tảng để xây dựng phần mềm theo tư tưởng hướng đối tượng nghĩa ? Bài viết trình bày nguyên lý lập trình hướng đối tượng Đó quy tắc phân tích thiết kế hướng đối tượng bản, ... Do nguyên lý nên có tính trừu tượng cao không vào chi tiết cách thức giải vấn đề cụ thể việc thực hóa nguyên lý lập trình hướng đối tượng đòi hỏi phải xem xét đến Design Patterns I, Nguyên lý ... 2 Nguyên Lí Của Lập Trình Hướng Đối Tượng Phương pháp lập trình hướng đối tượng nghiên cứu phát triển từ lâu việc vận dụng cho hiệu việc xây dựng phần mềm điều mơ hồ nhiều người Thế phần mềm hướng... 22 693 3 Kỹ thuật vi xử lý - ngon ngu lap trinh C trong vi xử lý ... { …/ /C c câu lệnh } void Hàm2 unsigned char x { …/ /C c câu lệnh } 10/04/13 Giáo Vi n Đặng 11 C U TR C CỦA MỘT CHƯƠNG TRÌNH //Hàm bắt bu c chương trình phải c void mainvoid { …/ /C c câu lệnh ... TRÌNH C TRONG VI XỬ LÝ Biến variables Hằng Constant Mảng Array C u tr c chương trình C u lệnh “If” C u lệnh “If…else” C u lệnh “Switch…Case…default” C u lệnh “For” C u lệnh “While” 10 C u ... trị Trong chương trình c đoạn code sau Bit kiemtra If bit==dung { // C c câu lệnh} If bit==sai { // C c câu lệnh} Vi c giúp lập trình dễ sửa lỗi 10/04/13 Giáo Vi n Đặng 10 C U TR C CỦA... 111 1,031 19 Tiểu luận Nguyên lý các ngôn ngữ lập trình Kỹ thuật Garbage Collection ... KẾT Tiểu luận Nguyên lý ngôn ngữ lập trình 13 Nguyễn Mạnh Hà – CB111398 - SPKTTH Quá trình thực dọn dẹp nhớ kỹ thuật Garbage Collector thật khiến cho chương trình chạy chậm so với chương trình ... tốt tiểu luận TÀI LIỆU THAM KHẢO Tiểu luận Nguyên lý ngôn ngữ lập trình 14 Nguyễn Mạnh Hà – CB111398 - SPKTTH TS Nguyễn Hữu Đức - Bài giảng Nguyên lý ngôn ngữ lập trình ... đối tượng có kích thước + Lisp Alg Tiểu luận Nguyên lý ngôn ngữ lập trình 10 Nguyễn Mạnh Hà – CB111398 - SPKTTH Copying Garbage Collection - Giống Mark-Compact, thuật toán di chuyển tất live objects... 15 1,153 3 Đề thi và đáp án môn Nguyên lý những ngôn ngữ lập trình ... + Ngôn ngữ lập trình bậc cao fortran, pascal, C, Cobol… Câu 7 Họ ngôn ngữ lập trình phổ biến là - Ngôn ngữ máy ngôn ngữ ASSEMBLY Ngôn ngữ máy đối tượng thi hành trực tiếp vi xử lý Hợp ngữ ... cao - Ngôn ngữ lập trình bậc thấp ngôn ngữ lập trình liên quan chặt chẽ đến phần cứng máy tính tính khả chuyển Từ "thấp" nghĩa ngôn ngữ ngôn ngữ lập trình bậc cao mà điều nghĩa lệnh gần ngôn ngữ ... điều hành Câu 12 Trình bày khái niệm siêu ngôn ngữ meta language, cho biết vai trò siêu ngôn ngữ trình thi t kế ngôn ngữ lập trình, lấy ví dụ vài siêu ngôn ngữ Khái niệm Ngôn ngữ dùng để xác... 18 1,318 6 ÁP DỤNG CÁC NGUYÊN LÝ SÁNG TẠO TRONG NGÔN NGỮ LẬP TRÌNH C++ ... chương trình, ngôn ngữ để viết chương trình gọi ngôn ngữ lập trình II CÁC NGUYÊN TẮC SÁNG TẠO ĐƯỢC ÁP DỤNG TRONG NGÔN NGỮ LẬP TRÌNH C++ Nguyên tắc phân nhỏ Segmentation  Nguyên tắc áp dụng việc ... Phương pháp nghiên cứu khoa học Tin học GVHD GS TSKH Hoàng Văn Kiếm PHẦN II ÁP DỤNG MỘT SỐ NGUYÊN TẮC SÁNG TẠO TRONG NGÔN NGỮ LẬP TRÌNH C++ I KHÁI NIỆM VỀ LẬP TRÌNH VÀ NGÔN NGỮ LẬP TRÌNH Như ... 40 .Nguyên tắc sử dụng vật liệu tổng hợp Composite Structures 19 PHẦN II ÁP DỤNG MỘT SỐ NGUYÊN TẮC SÁNG TẠO TRONG NGÔN NGỮ LẬP TRÌNH C++ 20 I KHÁI NIỆM VỀ LẬP TRÌNH VÀ NGÔN NGỮ... 30 576 0 đề thi và đáp án môn nguyên lý những ngôn ngữ lập trình ... + Ngôn ngữ lập trình bậc cao fortran, pascal, C, Cobol… Câu 7 Họ ngôn ngữ lập trình phổ biến là - Ngôn ngữ máy ngôn ngữ ASSEMBLY Ngôn ngữ máy đối tượng thi hành trực tiếp vi xử lý Hợp ngữ ... cao - Ngôn ngữ lập trình bậc thấp ngôn ngữ lập trình liên quan chặt chẽ đến phần cứng máy tính tính khả chuyển Từ "thấp" nghĩa ngôn ngữ ngôn ngữ lập trình bậc cao mà điều nghĩa lệnh gần ngôn ngữ ... điều hành Câu 12 Trình bày khái niệm siêu ngôn ngữ meta language, cho biết vai trò siêu ngôn ngữ trình thi t kế ngôn ngữ lập trình, lấy ví dụ vài siêu ngôn ngữ Khái niệm Ngôn ngữ dùng để xác... 19 838 3 Quản lý linh kiện của công ty bán máy tính bằng ngôn ngữ lập trình Visual C++ ... Phân tích thiết kế Bài toán quản lý Linh kiện Công ty bán máy tính I Phân tích chi tiết chơng trình quản lý Công ty bán Máy Tính Chơng trình quản lý Công ty bán Máy Tính nhằm vào mục tiêu xác ... khác ngòi dùng yêu cầu II Phân tích chơng trình mặt chức Sơ đồ chức chơng trình quản lý Công ty bán Máy Tính Chơng trình quản lý Linh Kiện Công ty bán Máy Tính Cập Nhập, Thêm ghi Sửa liệu ghi Xoá ... Chơng I Ngôn ngữ lập trình Visual C++ I Giới thiệu ngôn ngữ lập trình Visual C++ Kể từ ngôn ngữ lập trình C đời tới 30 Trải qua giai đoạn phát triển ngỗn ngữ C++, ngời lập trình bớc... 55 1,136 1 Phần mềm quản lý bán hàng dựa trên ngôn ngữ lập trình Visual Basic ... Visual Basic Visual Basic sản phẩm phần mềm hãng Microsoft Visual Basic ngôn ngữ lập trình hớng đối tợng Phiên Visual Basic Visual Basic 1998, Visual Basic cung cấp số tính phục vụ cho lập ... qúa trình quản lý hàng hóa, quản lý số lợng hàng Hỗ trợ cho qúa trình lên báo cáo gửi nhà quản lý Báo cáo tình hình kinh doanh Gồm báo cáo Báo cáo bán hàng hàng ngày, báo cáo bán hàng hàng ... hình bán hàng phận bán hàng tổng hợp tình hình bán hàng theo ngày, tháng gửi đến phận quản lý theo hoá đơn bán hàng phát sinh Trong qúa trình kinh doanh cửa hàng phảI quản lý đối tợng sau + Hàng... 55 3,394 20 Quản lý thu mua chè bằng ngôn ngữ lập trình Visual Basic ... Qun lý ngi s dng chng trỡnh Qun lý thu mua Chố Qun lý cụng n In bỏo cỏo 13 S chng trỡnh CHC NNG CHNG TRèNH QL ngi s dng chng trỡnh Qun lý thu mua Chố Qun lý cụng n Bỏo bỏo cỏo thu mua ... Visual Basic Ngụn ng Visual Basic ngy cng c s dng rng rói cỏc ỏn, chng trỡnh thc hin v ngoi nc Visual Basic c xem l mt cụng c phỏt trin phn mm thụng dng hin Sau phiờn bn Visual Basic l Visual ... chuyn Visual Basic thnh ngụn ng lp trỡnh hng I tng Visual Basic b sung kh nng to cỏc iu khin riờng Visual Basic cú thờm nhiu chc nng mnh nh cỏc ng dng Internet/ Intranet . Visual Basic... 86 955 4 Thiết Kế Hệ Thống Thông Tin Quản Lý dựa trên ngôn ngữ lập trình VisualBase và hệ quản trị cơ sở dữ liệu Access 2003 ... t quc dõn ó tin hc hoỏ hu ht cỏc lnh vc qun lý Trng ó phõn chia nhim v qun lý tng cỏc nhim v nh nh qun lý tuyn sinh ti chc, qun lý th vin, qun lý sinh viờn, qun lý tuyn sinh, qun lý trang thit ... mt phn mm qun lý VisualBase l ngụn ng lp trỡnh c a vo ging dy chớnh ti khoa Tin hc kinh t trng i hc Kinh t quc dõn Access 2003 l h qun tr c s d liu thụng dng nht hin Vi Access 2003 ngi dựng ... trũ ca thụng tin qun lý - Hot ng thụng tin gn cht vi hot ng qun lý - Nguyờn vt liu cng nh sn phm ca lao ng qun lý, nờn khụng cú thụng tin thỡ khụng cú qun lý - Thc t, lao ng qun lý ngy cng phc... 52 898 2 Ngôn ngữ lập trình Visual Basic và ứng dụng vào việc xây dựng hệ thống thông tin quản lý bán hàng ... cơng tác quản lý giúp cho nhà kinh doanh định Trong chun đề em trình bày cách khái qt ngơn ngữ lập trình Visual Basic ứng dụng vào việc xây dựng hệ thống thơng tin quản lý bán hàng Chương trình ... thơng tin Tên dòng liệu Tên tiến trình xử lý Tệp liệu Nguồn đích Dòng liệu Tiến trình xử lý Kho liệu THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Sơ đồ DFD hệ thống thơng tin quản lý bán hàng Khách hàng Khách hàng ... tên hàng, đơn vị tính, đơn giá vào danh mục hàng hóa - Nhập danh sách hàng bán với thơng tin mã hàng, ngày bán, số lượng Xóa/ lưu/ Người sử dụng dùng chức xóa để xóa thơng tin muốn, chương trình... 22 1,006 0 CHƯƠNG TRÌNH VẬT LÝ LỚP 12 NÂNG CAO NGÔN NGỮ LẬP TRÌNH DELPHI ... sau Bắt đầu dự án Chương trình Vật lý lớp 12 nâng cao với Delphi Xây dựng mơ hình cho chương trình Chương trình gồm 148 Form  Form  10 Form chương tương ứng với 10 chương sách giáo khoa ... Dephi ngơn ngữ thân thiện với người dùng, phù hợp cho người bắt đầu làm quen với Delphi nhà lập trình chun nghiệp II TỔNG QUAN VỀ NGƠN NGỮ LẬP TRÌNH DELPHI Giới thiệu ngơn ngữ lập trình Delphi Tiền ... nội dung ngơn ngữ lập trình Delphi Dephi ngơn ngữ lập trình cấp cao, có trình biên dịch hồn hảo, hỗ trợ mạnh kiểu liệu có cấu trúc thiết kế hướng đối tượng dựa tảng ngơn ngữ lập trình hướng tới... 62 925 0 Xem thêm Câu 1 Khái niệm và Các yếu tố cấu thành của Ngôn ngữ lập trìnhNgôn ngữ lập trình là một hệ thống được kí hiệu hóa để miểu tả những tính toán qua máy tính trong một dạngmà cả con người và máy tính đều có thể đọc và hiểu ngữ lập trình = Kí hiệu + quy tắc kết hợp• Các yếu tố cấu thành của ngôn ngữ lập trìnho Cú pháp Sự kết hợp của các kí hiệu Dạng của biểu thức, các phát triển, các đơn vị nhỏ của chương trìnho Ngữ nghĩa Ý nghĩa cuả sự kết Ngữ dụng Mối quan hệ của cú pháp,ngữ nghĩa với thế giới bên ngoàiCâu 2 Phải có ngôn ngữ lập trình mà k dùng ngôn ngữ máy hay ngôn ngữ tự nhiên để lập trình vì • Ngôn ngữ máy là ngôn ngữ trong đó các lệnh được viết bằng các số nhị phân 0 và 1. Nếu một chương trìnhđược viết bằng ngôn ngữ máy thì chương trình đó sẽ rất dài. Các dòng số này không gợi nên ý nghĩa của dùng muốn hiểu và sử dụng chương trình thì phải ghi nhớ một cách máy móc các dòng lệnh.• Ngôn ngữ tự nhiên là ngôn ngữ đa nghĩa, giàu cảm xúc biểu đạt, đóng về ngữ nghĩa. Nếu dùng ngôn ngữ tựnhiên để vết chương trình thì máy tính không thể xác định được khả năng biểu đạt của ngôn ngữ. Phải dùng ngôn ngữ lập trình để làm phương tiện giao tiếp giữa người và máy 3 Lịch sử phát triển của ngôn ngữ lập trình• Ngôn ngữ lập trình đầu tiên là ngôn ngữ máy tính mã nhị phân. Ngôn ngữ máy phụ thuộc toàn bộ vào kiếntrúc phần cứng và những quy ước khắt khe của nhà chế tạo → Không có tính khả chuyển• Từ những năm 1950 hợp ngữ assembly ra đời → là những ngôn ngữ bậc thấp.• Từ năm 1957 ngôn ngữ bậc cao đầu tiên ra đời. Đây là sản phẩm của IBM đưa ra. Đó là ngôn ngữ FortranFormula Translator. Là ngôn ngữ gần gũi với ngôn ngữ tự nhiên, với cách diễn đạt toán học Điều kiện, vòng lặp.• Đầu những năm 1960 COBOL xử lý dữ 60 có cấu trúc điều khiển hiện đạiLisp Ngôn ngữ lập trình hàm đầu tiên, ngôn ngữ xử lí danh sách• Giữa những năm 1960 PL/1 Kết hợp giữa ngôn ngữ tính toán số học và ngôn ngữ xử lí dữ Hướng đối tượng• Từ năm 1970 – 1990 Các ngôn ngữ hướng đối tượng C++Lập trình Logic 1972Lập trình hàm ML.,mirandaAda• Từ năm 1990 đến nayHướng đối tượng + WWW C,javaNgôn ngữ kịch bản + Hướng đối tượng + WWWPHPXMLNgôn ngữ kịch bản phía Client Java ScriptCâu 4 Các xu hướng phát triển & nghiên cứu chính of các ngôn ngữ lập trình trong giai đoạn hiện nay• Moodul hóa, hướng đối tượng.• Mã nguồn mở, framework.• Phát hiện lỗi tự động• Phát triển trình dịch biên.• Bảo mật• Lập trình cho di động• Web điện toán cho đám mây • Lập trình trí tuệ nhân tạoCâu 5 Anh chị hãy cho biết tên của 3 ngôn ngữ lập trình được sử dụng phổ biến hiện nay trên thế giới,và theo anh chị thì vì sao nó lại được sử dụng phổ ngữ lập trình CC là một ngôn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft, là phần khởi đầu cho kế của họ. Tên của ngôn ngữ bao gồm ký tự thăng theo Microsoft nhưng theo ECMA là C, chỉ bao gồmdấu số thường. Microsoft phát triển C dựa trên C++ và Java. C được miêu tả là ngôn ngữ có được sự cânbằng giữa C++, Visual Basic, Delphi và được thiết kế chủ yếu bởi Anders Hejlsberg kiến trúc sư phần mềm nổi tiếng với các sản phẩm TurboPascal, Delphi, J++, theo một hướng nào đó, là ngôn ngữ lập trình phản ánh trực tiếp nhất đến .NET Framework mà tất cả cácchương trình .NET chạy, và nó phụ thuộc mạnh mẽ vào Framework này. Mọi dữ liệu cơ sở đều là đối tượng,được cấp phát và hủy bỏ bởi trình dọn rác Garbage-Collector GC, và nhiều kiểu trừu tượng khác chẳng hạnnhư class, delegate, interface, exception, phản ánh rõ ràng những đặc trưng của .NET Ngôn ngữ lập trình JavaJava đọc như "Gia-va" là một ngôn ngữ lập trình dạng lập trình hướng đối tượng OOP. Khác với phần lớnngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khichạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thiruntime environment chạy. Bằng cách này, Java thường chạy nhanh hơn những ngôn ngữ lập trình thông dịchkhác như Python, Perl, PHP, Cú pháp Java được vay mượn nhiều từ C & C++ nhưng có cú pháp hướng đối tượng đơn giản hơn và ít tínhnăng xử lý cấp thấp định ngôn ngữ Java thay cho C++, nhưng các tính năng giống Objective C. Không nên lẫn lộn Java vớiJavaScript, hai ngôn ngữ đó chỉ giống tên và loại cú pháp như C. Công ty Sun Microsystems đang giữ bảnquyền và phát triển Java thường Ngôn ngữ lập trình PHPPHP viết tắt hồi quy "PHP Hypertext Preprocessor" là một ngôn ngữ lập trình kịch bản hay một loại mã lệnhchủ yếu được dùng để phát triển các ứng dụng viết cho máy chủ, mã nguồn mở, dùng cho mục đích tổng rất thích hợp với web và có thể dễ dàng nhúng vào trang HTML. Do được tối ưu hóa cho các ứng dụng web,tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ học và thời gian xây dựng sản phẩm tương đối ngắn hơn sovới các ngôn ngữ khác nên PHP đã nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế ngữ, các thư viện, tài liệu gốc của PHP được xây dựng bởi cộng đồng và có sự đóng góp rất lớn của ZendInc., công ty do các nhà phát triển cốt lõi của PHP lập nên nhằm tạo ra một môi trường chuyên nghiệp để đưaPHP phát triển ở quy mô doanh 6 Phân biệt NNLT bậc thấp và NNLT bậc cao- Ngôn ngữ lập trình bậc thấp là một ngôn ngữ lập trình liên quan chặt chẽ đến phần cứng máy tính và không có tính khả chuyển. Từ "thấp" không có nghĩa là ngôn ngữ này kém hơn các ngôn ngữ lập trình bậc cao mà điềunày nghĩa là các lệnh của nó rất gần ngôn ngữ máy. Phụ thuộc rất nhiều vào loại ngôn ngữ lập trình bậc thấp thường được chia thành hai loại thế hệ thứ nhất và thế hệ thứ hai.+ Ngôn ngữ lập trình thế hệ thứ nhất, hay 1GL, là mã máy. Nó là ngôn ngữ duy nhất mà bộ vi xử lý có thể nay các lập trình viên hầu như không bao giờ viết chương trình trực tiếp bằng ngôn ngữ máy vì nó không chỉ yêu cầu chú ý nhiều đến các chi tiết mà một ngôn ngữ bậc cao xử lý một cách tự động mà còn yêu cầu ghi nhớ và tìm những mã lệnh bằng số cho mỗi chỉ thị được sử dụng.+ Ngôn ngữ lập trình thế hệ thứ hai, hay 2GL, là ngôn ngữ assembly. Nó được xem là ngôn ngữ thế hệ thứ hai vì mặc dù nó không phải là ngôn ngữ máy nhưng lập trình viên vẫn phải hiểu về kiến trúc của bộ vi xử lý như các thanh ghi và các lệnh của bộ vi xử lý. Những câu lệnh đơn giản được dịch trực tiếp ra mã Ngôn ngữ lập trình bậc cao Là ngôn ngữ gần với ngôn ngữ tự nhiên nhất. ít phụ thuộc vào loại máy, có tínhđộc lập cao và phải có chương trình dịch để dịch sang mã máy thì máy tính mới có thể thực hiện Cho ví dụ+ Ngôn ngữ bậc thấp Ngôn ngữ máy, Assembly, …+ Ngôn ngữ lập trình bậc cao fortran, pascal, C, Cobol….Câu 7 Họ ngôn ngữ lập trình phổ biến là- Ngôn ngữ máy và ngôn ngữ ASSEMBLY Ngôn ngữ máy là đối tượng thi hành trực tiếp của vi xử lý. Hợp ngữ Assembly 1950s chương trình viết bằng hợp ngữ ngắn hơn, chiếm ít bộ nhớ hơn và chạy nhanh hơn so với ngôn ngữ lập trình bậc cao. Ngôn ngữ Assembly thích hợp cho lập trinh các vi điều khiển VD vi điều khiểntrên ô tô- Họ ngôn ngữ cổ điển ngôn ngữ cấp cao loại ngôn ngữ thủ tục gắn chặt với mô hình máy tính cổ điển Von Neumann Kiến trúc Von Neumann có 2 đặc điểm đáng chú ý+ Các lệnh được xử lý tuần tự theo thứ tự sắp xếp trong bộ nhớ+ Chỉ cho phép đọc ghi mỗi lần 1 từ nhớ Word Memory\VD Fortran, Pascal, Basic, C, …- Họ ngôn ngữ hàm Chương trình của ngôn ngữ hàm bao gồm các đối tượng dữ liệu, các hàm và các phép áp dụng hàm trên các đối tượng dữ liệu. Sử dụng định nghĩa hàm đệ qui. VD Lisp, ML, Haskell,…- Họ ngôn ngữ hướng đối tượng Chương trình của ngôn ngữ hướng đối tượng là một kịch bản hoạt động của các đối tượng trong chương trình. Các đối tượng gửi các thông điệp qua lại lẫn nhau. VD Smalltalk, Eiffel, C++, Java,…- Họ ngôn ngữ lôgic Chương trình viết trên ngôn ngữ lôgic là tập hợp các quy tắc và các sự kiện, được diễn đạtbằng các mệnh đề, liên quan đến vấn đề cần giải quyết. Người lập trình chỉ cần đặc tả lôgic của vấn đề, còn cơ chế giải quyết vấn đề theo đặc tả đó được cài sẵn trong chương trình dịch. VD Prolog, VisiCalc,…Câu 8 Đặc trưng cơ bản của ngôn ngữ lập trình hướng đối tượng- Là kĩ thuật lập trình hỗ trợ công nghệ đối tượng. OOP được xem là giúp tăng năng suất, đơn giản hóa độ phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên tập trung vào các đối tượng phầnmềm ở bậc cao hơn. Ngoài ra, nhiều người còn cho rằng OOP dễ tiếp thu hơn cho những người mới học về lập trình hơn là các phương pháp trước Chương trình của ngôn ngữ hướng đối tượng là một kịch bản hoạt động của các đối tượng trong chương trình. Các đối tượng gửi các thông điệp qua lại lẫn nhau- Đặc trưng cơ bản- Tính trừu tượng Đây là khả năng của chương trình bỏ qua hay không chú ý đến một số khía cạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết. Mỗi đối tượng phục vụ như là một "động tử" có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được các thao tác. Tính chất này thường được gọi là sự trừu tượng của dữ trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể có một số đặc điểm chung cho nhiều đối tượng khác như là sự mở rộng của nó nhưng bản thân đối tượng ban đầu này có thể không có các biện pháp thi hành. Tính trừu tượng này thường được xác định trong khái niệm gọi là lớp trừu tượng hay lớp cơ sở trừu tượng+ Đóng gói dữ liệu dữ liệu luôn được tổ chức thành các thuộc tính của lớp đối tượng. Việc truy nhập đến dữ liệu phải thông qua các phương thức của đối tượng lớp. + Sử dụng lại mã nguồn việc sử dụng lại mã nguồn được thể hiện thông qua cơ chế kế thừa. Cơ chế này cho phép các lớp đối tượng có thể kế thừa từ các lớp đối tượng khác. Khi đó, trong các lớp kế thừa, có thể sử dụng các phương thức mã nguồn của các lớp bị kế thừa, mà không cần phải định nghĩa Smalltalk, Eiffel, C++, Java,…Câu 9 Phân tích 3 yêu cầu của một ngôn ngữ lập trình- Tính dễ viết+ Ngôn ngữ lập trình phải có tính diễn đạt cao Cung cấp cho người lập trình những công cụ để có thể nghĩ sao viết vậy kỹ thuật đệ qui. + Ngôn ngữ phải đơn giản để dễ đọc, dễ nhớ và dễ nắm vững không nên có quá nhiều khái niệm. VD ngôn ngữC có quá nhiều toán tử, các toán tử gần giống nhau.+ Ngôn ngữ phải linh hoạt. VD C linh hoạt hơn Pascal với phát biểu Break, Return- Tính dễ đọc+ GOTO Pascal làm chương trình khó đọc+ Dấu gạch dưới “_” trong danh hiệu làm chương trình dễ đọc hơn- Tính tin cậy xác suất chạy đúng cao trong quá trình sử dụng+ Ngôn ngữ cần hạn chế sự xuất hiện của các lỗi không thể ngờ phát biểu trong FORTRAN SUMI,J= I + J;+ Hiệu ứng lề side effect cũng là một nguồn gây lỗi+ Ngôn ngữ cần kiểm tra chặt chẽ sự tương hợp kiểu của các biến trong biểu thức và phép gán, sự tương hợp của danh sách thông số của chương trình con ở nơi gọi và nơi định nghĩa.+ Các bộ phận của chương trình cần có tính độc lập đối với nhau cao.+ Tính tin cậy còn phụ thuộc vào chất lượng của chương trình dịchCâu 10 Tiêu chuẩn để đánh giá một ngôn ngữ lập trình tốt- Tính rõ ràng clarity, đơn giản simplicity, nhất quán unity của các khái niệm- Tính rõ ràng của cú pháp chương trình clarity of program syntax. Khả năng định nghĩa và sử đụng các cấu trúc hoặc các phép toán phức tạp cho phép bỏ qua các cho Tính tự nhiên đối với các ứng dụng naturalness for the application- Hỗ trợ tính trừu tượng hóa support for abstraction- Khả năng của ngôn ngữ lập trình hỗ trợ người lập trình tạo ra các chương trình đúng đắn. Phát hiện và sửa lỗi và thực hiện tiếp tục mà không cần dừng Dễ dàng kiểm tra chương trình- Môi trường lập trình đơn giản- Tính khả chuyển của chương trình- Chi phí sử dụng thấp chi phí thực thi, dịch, viết, kiểm tra, sử dụng, bảo trì chương 11. Các thành tố cuả một ngôn ngữ lập trình hiện đại -Các dạng câu lệnh định nghĩa, khai báo, gán giá trị, kết hợp, điều kiện, vòng lặp, gọi hàm, thủ tục, macro,các chỉ thị tiền xử lý ifndef MY_LIB include " endif trong C/C++, chú giải• Chương trình con và macro một khối lệnh được dùng lại nhiều lần• Biến, hằng, tham số và đối số• Từ vựng qui ước từ khóa, các tên chuẩn hay tên cho trước, các ký hiệu• Các luật cấm ngoại lệ lỗi cú pháp, lỗi ý nghĩa• Ngoài ra còn 1 số thành tố khác như - Giao diện đồ họa - Điều khiển theo sự kiện - Thời gian thực - Hỗ trợ hệ điều hànhCâu 12 Trình bày khái niệm siêu ngôn ngữ meta language, và cho biết vai trò của siêu ngôn ngữ trongquá trình thiết kế ngôn ngữ lập trình, lấy ví dụ một vài siêu ngôn Khái niệm Ngôn ngữ dùng để xác định cú pháp hoặc ngữ nghĩa của một ngôn ngữ lập trình gọi là siêu ngônngữ Meta language 777 Khái niệm ngôn ngữ học của GS. Nguyễn Thiện Giáp Vai trò Nó có vai trò quan trọng trong quá trình thiết kế ngôn ngữ lập trìnhCú pháp quy định sự kết hợp giữa các kí hiệu trong bộ từ vựng. Ngữ nghĩa qui định ý nghĩa của mỗi sự kết trong việc thiết kế ngôn ngữ, ngữ nghĩa hình thức cho phép các nhà thiết kế mô tả rõ ràng và chính xácngữ nghĩa cũng như các đặc tả của ngôn pháp là thành phần quan trọng nhất trong một ngôn ngữ. Cú pháp được biểu diễn bởi một bộ luật cúpháp. Bộ luật này dùng để mô tả cấu trúc của chương trình, câu lập trình, người lập trình phải nắm được bộ luật cú pháp của ngôn ngữ mà mình định xây dựngchương trình, để lập trình Văn phạm phi ngữ cảnh, BNF,…Câu 13. Đặc tả từ vựng trong NNLT- Ngôn ngữ là tập hợp chuỗi các ký tự từ alphabet A…Z, a…z, $,,0 9, +,_,*,/,=,…- Token Một token là một tập hợp các xâu kí tự có một nghĩa xác định. Ví dụ Các từ khoá, định danh, toán tử,hằng, xâu kí tự, …- Pattern Pattern của một token là các qui tắc kết hợp các kí tự để tạo nên token đó- Lexeme Là một chuỗi các kí tự thoả mãn pattern của một tokenCâu 14. Biểu thức chính quy- Để biểu diễn các token người ta dùng biểu thức chính Một biểu thức chính quy là một chuỗi miêu tả một bộ các chuỗi khác, theo những quy tắc cú pháp nhất định- BTCQ có thể hiểu như là một ngôn ngữ nhỏ dùng cho mục đích để tìm một chuỗi con trong biểu thức 15 Anh/chị hãy cho biết vì sao cần đặc tả cú pháp ngôn ngữ lập trình. Đầu vào và đầu ra của côngviệc đặc tả cú pháp là gì ?Phân tích cú pháp có mục đích duyệt chương trình nguồn để phát hiện và thông báo các lỗi không đúng vớiquy ước của ngôn ngữ. Các lỗi này làm cho nghĩa của chương trình không rõ và do đó không thể dịchđúng dụ trong ngôn ngũ PASCAL ta viết dòng lệnh d = a+ b/e-f+g. Khi đọc đến dấu ngoặc đóng thứ 2 sau f, ta sẽ không hiểu được nguời viết muốn tính gì và đương nhiên cũngkhông thể dịch được. Lý do làm cho dòng lệnh không rõ nghĩa ở đây là thiếu một dấu ngoặc "" ở phía trước, cóthể là trước chữ e, cũng có thể trước chữ lỗi sai với quy ước của ngôn ngữ gọi là lỗi cú pháp. Quá trình phân tích cú pháp cũng tạo ra các thông tin cần thiết về cấu trúc của chương trình và các đối tượng sẽdùng trong công việc dịch được mô ta tiếp theo đây. Trong quá trình phân tích cú pháp, danh mục các đối tượng cũng được xây dựng để còn sinh mã chương trìnhtrong giai đoạn tiếp theo. Công việc này gọi là phân tích từ Đầu vào là chương trình nguồn- Đầu ra là + Những lỗi cú pháp cần sửa+ Thông tin cần thiết về cấu trúc của chương trìnhCâu 16 Trình bày các đặc điểm của cú pháp cụ thểTrả lời* Cú pháp của ngôn ngữ được định nghĩa bởi bộ 4 Văn phạm phi ngữ cảnh Context – Free Grammar- Ký hiệu bắt đầu S ∈ NStart symbol- Tập các ký hiệu không kết thúc N Non-terminals- Tập các ký hiệu kết thúc Terminals - Tập các luật sinh P Production có dạng A → a Với A ∈ N và a là chuỗi các ký hiệu kết thúc và không kết thúc Câu hợp lệ của ngôn ngữ là chuỗi kí hiệu kết thúc được dẫn ra từ kí hiệu khởi đầu S thông qua các luật sinhtrong tập luật sinh P* BNF là một siêu ngôn ngữ phổ biến để xây dựng cú pháp cụ thể * Ví dụ Cú pháp cụ thể dạng BNF cho biểu thức trong PASCAL- = - = - = - = a b c,….z- = 0 1 2,…9- = +, -, or- * / div mod andCú pháp cụ thể còn được gọi là cú pháp phi ngữ cảnh context-free syntax, trong đóvế trái của mỗi luật sinh chỉ có duy nhất một ký hiệu không kết pháp phi ngữ cảnh biểu diễn được cú pháp của mọi ngôn ngữ lập trình cấp caohiện 17 Anh/chị hãy phân tích vai trò của đặc tả ngữ nghĩa ngôn ngữ lập trình. Đầu vào, đầu ra của công việc đặc tả ngữ nghĩa là gì ?- Đặc tả ngữ nghĩa hình thức cho phép + Chứng minh tính đúng đắn của chương trình + Kiểm tra tính đúng đắn của chương trình dịch - Cú pháp và ngữ nghĩa hình thức được dùng để hiện thực và thiết kê ngôn ngữ lập trình. + Cú pháp hình thức được sử dụng để tạo ra bộ phân tích cú pháp của ngôn ngữ + Ngữ nghĩa hình thức giúp cho quá trình sinh tự động các trình thông dịch và biên dịch của ngôn ngữ. + Trong việc thiết kế ngôn ngữ, ngữ nghĩa hình thức cho phép nhà thiết kế mô tả rõ ràng và chính xác ngữ nghĩa cũng như các đặc tính của ngôn Đặc tả ngữ nghĩa hình thức thông qua bộ phân tích ngữ Bộ phân tích ngữ nghĩa BPTNN thực hiện + Kiểm tra lỗi ngữ nghĩa kiểm tra kiểu; kiểm tra phạm vi của hằng, biến; kiểm tra việc sử dụng tên + Thu nhận thông tin thuộc tính cho các từ tố token, ví dụ như thông tin về giá trị, thông tin về loại hằng, biến hay hàm cho tên. + BPTNN phân tích ý nghĩa của các cấu trúc cú pháp tạo nên chương trình nguồn. VD trong biểu thức gán c=a+b*7, BPTNN xác định ý nghĩa của các tác vụ =, +, *, kiểm tra xem các tác vụ cónhận các đối số thuộc các kiểu thích hợp hay không dựa vào bảng ký 18 Anh/chị hãy cho biết đặc điểm của quá trình biên dịch lấy VD về các ngôn ngữ biên dịch màanh/chị biếtTrả lời* Đặc điểm của quá trình biên dịchChương trình nguồn được trình biên dịch chuyển sang chương trình đích, thường ở dạng mã máy hoặcassembly, sau đó chương trình đích mới được thực thi. Trong hệ thống biên dịch dữ liệu và chương trìnhnguồn được xử lý ở hai thời điểm khác nhau. Trong đó- Chương trình nguồn viết bằng ngôn ngữ nguồn- Chương trình đối tượng được thể hiện trên ngôn ngữ đối tượng- Thời gian chuyển đổi từ chương trình nguồn sang chương trình đối tượng goi là thời gian dịch compile time- Thời gian diễn ra sự thực thi chương trình đối tượng trên máy tính gọi là thời gian thực thi execution timehoăc run time* Ví dụ về ngôn ngữ biên dịch Ngôn ngữ biên dịch là ngôn ngữ mà chương trình dịch cho nó là chương trình biên dụ như Fortran , Pascal, C, C++…Câu 19 - Thay vì chuyển đổi toàn bộ chương trình nguồn như trình biên dịch, trình thông dịch chỉ chuyển đổi một mệnhđề của chương trình và thực hiện đoạn mã kết quả ngay, sau đó nó tiếp tục chuyển đổi mệnh đề thứ 2 rồi thi hành đoạn mã kết quả thứ 2 và cứ thế. - Khi sử dụng trình thông dịch, mỗi lần chạy chương trình là mỗi lần chương trình nguồn được thông dịch sangngôn ngữ máy. Không có chương trình đối tượng nào được tạo điểm - có thể chạy một chương trình vẫn còn lỗi cú pháp. Chỉ đến lúc thông dịch đến câu lệnh có lỗi cú pháp, quá trình thi hành chương trình mới bị ngừng lại và trình thông dịch sẽ thông báo Do không có chường trình đối tượng nào được tao ra ==> tốn ít dung lượng đĩa- Có thể chạy trên mọi hệ điều hànhNhược điểm - Trong thông dịch thì chương trình đích không được lưu lại nên mỗi lần thực hiện phải dịch lại từ đầu. ngược lại với trình biên dịch• Một số ngôn ngữ thông dịch vbscript, javascript, shell script, sql 20 Anh chị hãy liệt kê các giai đoạn của trình biên dịch, đầu vào đầu ra của các giai đoạn?Trả lờiChương trình dịch chia làm 6 giai đoạn- Phân tích từ vựng- Phân tích cúa pháp- Phân tích ngữ nghĩa- Sinh mã trung gian- Tối ưu mã- Sinh mã đích* Phân tích từ vựng - Đầu vào chương trình nguồn là 1 chuỗi các kí hiệu- Đầu ra các kí hiệu trong chuỗi chương trình nguồn được gom lại thành các nhóm kí hiệu có ý nghĩa gọi là cáctoken, như từ khóa, tên biến, hằng, kí hiệu tác vụ.* Phân tích cú pháp- Đầu vào chuỗi các token do bộ phân tích từ vựng cung cấp- Đầu ra cấu trúc phức tạp hơn của chương trình nguồn như biểu thức, phát biểu, chương trình con. Các cấu trúc được thể hiện dưới dạng cây cú pháp với nút lá là các token.* Phân tích ngữ nghĩa- Đầu vào Các cấu trúc cú pháp tạo nên chương trình nguồn - Đầu ra phát hiện các lỗi ngữ nghĩa, thông tin thuộc tính cho các từ tố token cho ra chương trình nguồn đã sửa lỗi* Sinh mã trung gian- Đầu vào Chương trình nguồn có ở bước trên- Đầu ra dạng biểu diễn mã trung gian mã bộ tứ, mã 3 địa chỉ của chương trình nguồn* Tối ưu mã Đầu vào Mã trung gian vừa được sinh ra ở bước trên- Đầu ra chương trình đích tối ưu về tốc độ thực thi và bộ nhớ sử dụng* Sinh mã đích- Đầu vào mã trung gian đã được tối ưu- Đầu ra mã đích thông thường ở dạng mã máy hay mã AssemblyPhân tíchTổng hợpCâu 21 Anh/chị hãy trình bày nội dung của quá trình phân tích từ Source program Chương trình nguồn đối với chương trình dịch chỉ là một chuỗi kí hiệu 2. Lexical analyzer Bộ phân tích từ vựng dò các kí hiệu trong chuỗi kí hiệu chương trình nguồn, và gomchúng lại thành các nhóm kí hiệu có ý nghĩa gọi là các Token như từ khóa, tên biến, hằng, kí hiệu tác VD phân tích từ vựng phép gán c=a+b*7 thu được c identđịnh danh b identđịnh danh = becomeskí hiệu tác vụ gán * times kí hiệu tác vụ nhân a identđịnh danh 7 number số/hằng + pluskí hiệu tác vụ cộng Chuỗi tokens thu được id1=id2+id3*7 ident, c becomes ident, a plus ident, b times number, 74. Parser Bộ phân tích cú pháp nhận các kí hiệu có ý nghĩa gọi là các Token trong chuỗi kí hiệu từ bộphân tích từ vựng, sau đó bộ phân tích từ vựng lấy token kế Get next token từ bộ phân tích cú Bảng danh hiệu symbol tableCâu 22 Anh chị hãy cho biết bảng danh hiệu Symbol table dùng để làm gì? Và vai trò của nó trong quá trình biên dịch chương trình?* Bảng danh hiệu symbol table là một cấu trúc dữ liệu dùng để lưu trữ tất cả định danh bao gồm các trườnglưu giữ ký hiệu và các thuộc tính của nó là thông tin của chương trình Các thông tin này được tập hợp từ cácgiai đoạn phân tích của trình biên dịch và được sử dụng bởi giai đoạn tổng hợp để sinh mã đích * Vai trò của bảng danh hiệu Symbol table trong quá trình biên dịch chương trình làSource programLexical analyzerGet next tokenTokenParserSymboltablec ….a ….b …Danh hiệu Thuộc tính- Là cơ sở dữ liệu cho toàn bộ hệ thống biên dịch- Trong quá trình chạy chương trình chỉ cần lấylại thông tin từ bảng Symbol table mà không cầnkiểm tra lại thông tin- Khi chạy chương trình lần thứ 2 mà dữ liệunguồn không có gì thay đổi thì nó sẽ chạy trựctiếp trên file đích đã chứa sẵn bảng Symboltable1 lần biên dịch mà thực thi được nhiềulầnthời gian chạy chương trình nhanhCâu 23 Anh chị hãy trình bày nội dung củaquá trình phân tích cú pháp - Bộ phân tích cú pháp phân tích chuỗi các tokendo bộ phân tích từ vựng cung cấp, để thu đượccác cấu trúc phức tạp hơn của chương trìnhnguồn như biểu thức, phát biểu, chương trình con. Các cấu trúc được thể hiện dưới dạng cây cú pháp với nút lálà các Ví dụ cây cú pháp thu được của phát biểu gán “c=a+b*7“Câu 24 Anh chị hãy trình bày nội dung của quá trình phân tích ngữ nghĩa-Bộ phân tích ngữ nghĩa BPTNN thực hiện– Kiểm tra lỗi ngữ nghĩa kiểm tra kiểu; kiểm tra phạm vi của hằng, biến; kiểm tra việc sử dụng tên– Thu nhận thông tin thuộc tính cho các từ tố token, ví dụ như thông tin về giá trị, thông tin về loại hằng, biếnhay hàm cho phân tích ý nghĩa của các cấu trúc cú pháp tạo nên chương trình nguồn. VD trong biểu thức gánc=a+b*7, BPTNN xác định ý nghĩa của các tác vụ =, +, *, kiểm tra xem các tác vụ có nhận các đối số thuộccác kiểu thích hợp hay không dựa vào bảng ký phân tích ngữ nghĩa phải dựa vào các luật ngữ nghĩa đi kèm với từng luật cú pháp để thực hiện chức năngsinh thuộc tính cho các từ tố và kiểm tra lỗi ngữ 25 Anh chị hãy cho biết các lỗi của chương trình được phát hiện như thế nào trong quá trình biêndịch chương trình*/ Xử lý lỗi cú pháp Chương trình nguồn có thể chứa các lỗi ở nhiều mức độ khác nhau - Lỗi từ vựng như danh biểu, từ khóa, toán tử viết không đúng. - Lỗi cú pháp như ghi một biểu thức toán học với các dấu ngoặc đóng và mở không cân bằng. - Lỗi ngữ nghĩa như một toán tử áp dụng vào một toán hạng không tương thích. - Lỗi logic như thực hiện một lời gọi đệ qui không thể kết thúc. Phần lớn việc phát hiện và phục hồi lỗi trong một trình biện dịch tập trung vào giai đọan phân tích cú pháp. Vìthế, bộ xử lý lỗi error handler trong quá trình phân tích cú pháp phải đạt mục đích sau ™ Ghi nhận và thông báo lỗi một cách rõ ràng và chính xác. ™ Phục hồi lỗi một cách nhanh chóng để có thể xác định các lỗi tiếp theo. ™ Không làm chậm tiến trình của một chương trình đúng. */ Các chiến lược phục hồi lỗi Phục hồi lỗi là kỹ thuật vượt qua các lỗi để tiếp tục quá trình dịch. Nhiều chiến lược phục hồi lỗi có thể dùngtrong bộ phân tích cú pháp. Mặc dù không có chiến lược nào được chấp nhận hoàn toàn, nhưng một số trongchúng đã được áp dụng rộng rãi. Ởđây, chúng ta giới thiệu một số chiến lược a. Phương thức "hoảng sợ" panic mode recovery ây là phương pháp đơn giản nhất cho cài đặt và có thểdùng cho hầu hết các phương pháp phân tích. Khi một lỗi được phát hiện thì bộ phân tích cú pháp bỏ qua từngký hiệu một cho đến khi tìm thấy một tập hợp được chỉ định của các token đồng bộ synchronizing tokens,các token đồng bộ thường là dấu chấm phẩy ; hoặc end. b. Chiến lược mức ngữ đoạn phrase_level recovery Khi phát hiện một lỗi, bộ phân tích cú pháp có thểthực hiện sự hiệu chỉnh cục bộ trên phần còn lại của dòng nhập. Cụ thể là thay thế phần đầu còn lại bằng mộtchuỗi ký tự có thể tiếp tục. Chẳng hạn, dấu phẩy , bởi dấu chấm phẩy ;, xóa một dấu phẩy lạ hoặc thêm vàomột dấu chấm phẩy. c. Chiến lược dùng các luật sinh sửa lỗi error production Thêm vào văn phạm của ngôn ngữ những luậtsinh lỗi và sử dụng văn phạm này để xây dựng bộ phân tích cú pháp, chúng ta có thể sinh ra bộ đoán lỗi thíchhợp để chỉ ra cấu trúc lỗi được nhận biết trong dòng nhập. d. Chiến lược hiệu chỉnh toàn cục global correction Một cách lý tưởng là trình biên dịch tạo ra một số thayđổi trong khi xử lý một lỗi. Có những giải thuật để lựa chọn một số tối thiểu các thay đổi để đạt được một hiệuchỉnh có chi phí toàn cục nhỏ nhất. Cho một chuỗi nhập có lỗi x và một văn phạm G, các giải thuật này sẽ tìmđược một cây phân tích cú pháp cho chuỗi y mà số lượng các thao tác chèn, xóa và thay đổi token cần thiết đểchuyển x thành y là nhỏ nhất. Nói chung, hiện nay kỹ thuật này vẫn còn ở dạng nghiên cứu lý 26 Anh chị hãy cho biết nội dung và ý nghĩa của việc khai báo đối tượng dữ liệu- ND Khai báo là một phát biểu trong chương trình dùng ñể chuyển tới bộ dịch, thông tin về số lượng, kiểu củaTDL và tên đối tượng dữ liệu; cần thiết trong quá trình thực hiện chương trình- Sự khai báo có thể chỉ rõ thời gian tồn tại của TDL- Một số NNLT không cần khai báo biến trước khi sử dụng- Ưu điểm mềm dẻo, khuyết điểm khó quản lý Ý Nghĩa của kiểu dữ liệu- Cung cấp ngữ cảnh hoàn hảo implicit context cho các tác vụ, do ñó programmer không cần chỉ ra ngữ cảnhcụ thể cho các tác vụ- Cho phép trình biên dịch phát hiện toàn bộ các lỗi thông thường của programmer- Kiểm tra kiểu không thể ngăn ngừa hết các tác vụ vô nghĩaCâu 27 Anh chị hãy cho biết đặc điểm của kiểm tra kiểu tĩnh, ưu và nhược điểm của kiểm tra kiểu tĩnh- Thông tin về kiểu của các ĐTDL phải được cung cấp cho bộ dịch. Bộ biên dịch tập hợp thông tin từ khai báotrong chương trình vào trong bảng danh biểu symbol table nơi chứa thông tin về kiểu của các biến và chươngtrình con- Ưu điểm tất cả các nhánh chương trình, các phép toán đều được kiểm tra nên không bỏ sót các lỗi về khác thông tin về kiểu không gắn với ĐTDL tại thời điểm thực thi chương trình nên tiết kiệm bộ nhớ vàtăng tốc độ chạy chương trình- Nhược điểm không mềm dẻo, cụ thể người lập trình phải cân nhắc và xác định kiểu cho ĐTDL một cách rõràng- Các ngôn ngữ kiểm tra kiểu tĩnh Pascal, C, …Câu 28 Anh chị hãy cho biết đặc điểm của kiểm tra kiểu động, ưu và nhược điểm của kiểm tra kiểuđộng-Để kiểm tra kiểu động cần phải lưu trữ thông tin về kiểu của mỗi một ĐTDL cùng với ĐTDL đó. Trước khithực hiện một phép toán thông tin về kiểu của mỗi một đối số sẽ được kiểm tra-Ưu điểm mềm dẻo khi viết chương trình, không cần khai báo kiểu dữ liệu và kiểu của ĐTDL có thể thay đổitrong quá trình thực thi chương trình-Nhược điểm có khả năng bỏ sót lỗi về kiểu; yêu cầu bộ nhớ lớn do phải lưu trữ thông tin kiểu dữ liệu trongquá trình thực hiện chương trình; làm chậm quá trình thực thi do vừa phải tính toán vừa phải kiểm tra kiểu-Các ngôn ngữ kiểm tra kiểu động SNOBOL4, LISP, APL…Câu 29 Anh chị hãy cho biết có mấy cách chuyển đổi kiểu và lấy ví dụ về mỗi cách- Trong quá trình kiểm tra kiểu nếu không có sự tương thích về kiểu thì có 2 lựa chọn có thể– Báo lỗi không tương thích kiểu– Thực hiện chuyển đổi kiểu- Có 2 cách chuyển đổi kiểu– Bằng tập hợp các hàm đã được xây dựng. VD Lệnh ROUND trong Pascal chuyển số thực ◊số nguyên– Ép kiểu tự động. VD trong Pascal các đối số của phép toán số học +’ có lẫn số thực và số nguyên thì sốnguyên được chuyển đổi tự động sang kiểu số thựcCâu 30 Anh chị hãy phân biệt các loại phép gán khác nhau- Là tác vụ cơ bản để thay đổi giá trị của đối tượng dữ Đặc tả tác vụ gán= type1 x type2 → void = type1 x type2 → type3Z = X + Y Z = X + Y = W ™ 2 A = B = CNgôn ngữ Pascal Ngôn ngữ C- Các NNLT khác nhau thì có phép gán khác nhau-Khác nhau về cú pháp-Khác nhau về kết quả trả về của phép gán giá trị pascal trả về kiểu void; C/C++ trả về một kiểu giá trị mới-Khác nhau về cách thức tiến hành gán giá trị sao chép ĐTDL khi gán, sao chép tự trỏ đến ĐTDL khi gánCâu 31 Anh chị hãy cho biết khởi tạo giá trị là gì và ý nghĩa của việc khởi tạo giá trị?Khởi tạo một biến là gán cho biến đó một giá trịđầu tiên. Ý nghĩa• Một biến khi được tạo ra thì sẽđược cấp phát ô nhớ nhưng nó vẫn chưa được khởi tạo. Khi nó được gán một giá trịđầu tiên thì mới được khởi tạo. • Các biến chưa được khởi tạo là nguồn gốc của các lỗi lập trình. Khi một biến được cấp phát ô nhớ mà chưa được khởi tạo thì trong ô nhớ của nó cũng có một giá trị ngẫu nhiên nào đó. Thường là một giá trị rác Khi một ĐTDL nào trước đó đã bị hủy bỏ nhưng giá trị của ĐTDL này trong ô nhớ vẫn còn, giá trị này gọi là giá trị rác.iều nguy hiểm là giá trị rác này vẫn là một giá trị hợp lệ. Vì thế chương trình có thể xử lý trên giá trị rác này một cách bình thường và chúng ta không thể kiểm sóat được kết quả xử lý đó.• Vì tính chất nghiêm trọng như đã nói trên của biến chưa được khởi tạo, các ngôn ngữ lập trình có thể sử dụng các giải pháp sau để khắc phục Nếu biến chưa được khởi tạo thì sẽ có giá trị NULL Khi một biến mới được tạo ra, ô nhớ cấp phát cho nó phải chứa một dãy các bit biểu diễn cho một giá trị “NULL”. Tùy thuộc vào kiểu của biến mà giá trị NULL này sẽ có một giá trị cụ thể, ví dụ nếu là biến số thì NULL là 0, nếu là biến chuỗi kí tự thì NULL là chuỗi rỗng, nếu biến là logic thì NULL là FALSE - Khởi tạo biến ngay sau khi nó vừa được tạo ra là một cách lập trình tốt và trong một số ngôn ngữ mới đều cung cấp phương tiện để làm điều này một cách dễ dàng. Trong ngôn ngữ Pascal một biến được khởi tạo đồng thời với việc khai báo được gọi là biến có giá trịđầu hay còn gọi là hằng định kiểu. Ví dụ const iinteger=10; a ARRAY[1 3,1 2] Of Integer = 11, 12, 21, 22, 31, 32; var jinteger; begin writelni; i= i+1; writelni; for i=1 to 3 do begin for j=1 to 2 do writea[i,j]5; writeln; end; 32 Trình bày cách đặc tả đối tượng dữ liệu kiểu số nguyên?1Đặc tả các thuộc tính Một TDL của kiểu số nguyên không có thuộc tính nào khác ngoài kiểu của nó. 2Đặc tả giá trị Tập hợp các giá trị nguyên được xác định theo dạng là một tập hợp con có thứ tự hữu hạn của tập vô hạn các số nguyên đã được nghiên cứu trong toán trị nguyên lớn nhất đôi khi được biểu diễn như là một hằng xác định. Ví dụ trong Pascal là hằng MaxInt. Miền giá trị của kiểu số nguyên là tập các số nguyên từ - MaxInt đến MaxInt. Giá trị MaxInt được lựa chọn phản ánh giá trị nguyên lớn nhất có thể biểu diễn được trong phần cứng. 3ặc tả các phép toán- Các phép tính số học cộng +, trừ -, nhân *, chia / hoặc DIV, lấy phần dư MOD hoặc một số phép toán tương tự khác. âm -, dương +. - Các phép toán quan hệ bằng, khác, nhỏ hơn, lớn hơn, nhỏ hơn hoặc bằng, lớn hơn hoặc bằng. Phép toán quan hệ so sánh hai giá trị dữ liệu đối số và trả về kết quả là một đối tượng dữ liệu logic đúng hoặc sai. - Gán trịCũng như phép gán tổng quát, phép gán của số nguyên có thể trả về hoặc không trả về một giá cài đặt Kiểu dữ liệu nguyên hầu hết được cài đặt một cách trực tiếp bằng cách dùng sự biểu diễn bộ nhớ được xác định bởi phần cứng và tập hợp các phép tính số học, các phép toán quan hệ nguyên thuỷ trong phần cứng cho các số nguyên. Thông thường sự biểu diễn này sử dụng một từ trong bộ nhớ hoặc một dãy các bytes để lưu trữ một số nguyên. Chẳng hạn ngôn ngữ Pascal đã sử dụng biểu diễn số nguyên bởi 1 từ word trong phần cứng của máy tính để biểu diễncho một số 33. Đặc tả đối tượng dữ liệu kiểu số thực dấu chấm động1. Các kiểu số thực Real 6 byte, Single 4 byte, Double 8 byte, Extended 10byte, 2. Dạng lưu trữ của kiểu số thực dấu chấm động là một chuỗi bít được phân làm hai phần là phần mũ và phần định trị. 3. Các phép toán cộng, trừ, nhân, chia trên số thực dấu chấm động có thể được trang bị sẵn ở phần cững còn phép toán mũ thường được thực hiện bằng phần mềmCâu 34. Đặc tả đối tượng dữ liệu kiểu ký tựKiểu kí tự thường được hiện thực bằng một byte hoặc một word chứa giá trị bằng mã của kí tự mà byte hoặc word đó biểu diễn; mã của kí tự được xác định trong bộ kí tự mà ngôn ngữ sử tác vụ trên kí tự thật sự là các tác vụ trên các giá trị mã này\Các phép toán Các phép toán quan hệ relational operations Phép gánCâu 35. Dạng lưu trữ tuần tự- Đối tượng dữ liệu được lưu trữ trong một khối liên tục, chứa cả phần mô tả kiểu và các thành phần của kiểuDạng tuần tự thích hợp cho kiểu dữ liệu cấu trúc kích thước cố định, nhất là trong trường hợp các thành phần dữ liệu thuộc cùng một Nhược điểm Cần có khối lưu trữ liên tục đủ lớn và không thể dùng cho kiểu dữ liệu cấu trúc có kích thước thay đổi như danh sáchCâu 36. Dạng lưu trữ liên kết- Ưu điểm Dạng liên kết thường được dùng cho kiểu dữ liệu cấu trúc có kích thước thay đổi như danh sách, cho phép tận dụng được các khối lưu trữ dữ liệu rời rạc trong bộ nhớ- Đối tượng dữ liệu được lưu trữ ở nhiều khối rời rạc của bộ nhớ như một danh sách liên kết; phần tử đầu của danh sách chứa phần mô tả kiểu, các phần tử còn lại chứa các thành phần của kiểu- Nhược điểm tốc độ truy xuất thành phần chậm, do tác vụ lựa chọn trên dạng lưu trữ này là tuần Ưu điểm tốc độ truy xuất đối tượng dữ liệu cao, do có thể thực hiện tác vụ lựa chọn trực tiếpCâu 37. Đặc điểm lưu trữ của kiểu vector Câu 38 Anh chị hãy cho biêt đặc điểm dạng lưu trữ kiểu bản ghi có kích thước cố định1Định nghĩa bản ghi Bản ghi là một CTDL bao gồm một số cố định các phần tử có kiểu khác nhau. Như vậy, bản ghi là một CTDL có kích thước cố định và không đồng nhất. Các phần tử của bản ghi được gọi là các trường. j2 Sự đặc tả và cú pháp Đặc tả thuộc tính Các thuộc tính của một bản ghi phải được chỉ rõ trong phép khai báo, chúng bao gồm 1. Số lượng các phần tử. VectorLBUBEĐịa chỉ nền αKích thýớc của thành phầnA[LB]A[LB + 1]A[UB]var A array [1 10] of integer;loc A[I] = α + D + I - LB x EKiểu thành phầnD kích thýớc của phần mô tảLB Giá trị cận dýớiUB Giá trị cận trênE kích thýớc của kiểu thành phần2. Kiểu dữ liệu của các phần tử Các phần tử có thể có kiểu khác nhau. 3. Mỗi phần tửđược cho bởi tên phần tử tên trường. Cú pháp khai báo bản ghi của Pascal Nhan_vien RECORD Ma Integer; {Mã nhân viên} Ho_ten String[25]; Tuoi Integer; {Tuổi} Luong Real; {Hệ số lương} END Việc khai báo này đặc tả một bản ghi có 4 phần tử của các kiểu Integer, Real và String. Mỗi phần tử có một tên Ma, Ho_ten, Tuoi và Luong. ể chọn một phần tử của mẩu tin ta sử dụng tên của phần tử trường đó, chẳng hạn trong Pascal, là để truy xuất tới phần tử Luong của bản ghi tả phép toán -Lựa chọn một phần tử là phép toán cơ bản cuả bản ghi. Phép toán này được thực hiện bằng cách chỉ ra tên trực kiện của phần tử. Phép toán lựa chọn một phần tử của bản ghi là sựlựa chọn trực tiếp. - Phép gán các mẩu tin có cùng cấu trúc là một phép toán phổ biến được các ngôn ngữđưa vào. Sự cài đặt Biểu diễn bộ nhớ Biểu diễn bộ nhớtuần tựđược sử dụng để lưu trữ một bản ghi. Một khối liên tục các ô nhớđược dùng để lưu trữ cho một bản ghi, trong khối đó, mỗi ô biểu diễn cho một trường. Có thể cũng cần sử dụng bộ mô tả riêng cho từng trường để lưu trữ thuộc tính của các trường đó. Do các trường có kiểu khác nhau nên ô nhớ dành cho chúng cũng có kích thước khác 39. Đặc điểm của dạng lưu trữ kiểu chuỗi ký tự có chiều dài thay đổi có giới hạn Kiểu chuỗi ký tự phân làm ba loại dựa trên đặc tính về chiều dài của chuỗi– Chiều dài cố định – Chiều dài thay đổi có giới hạn– Chiều dài thay đổi không giới hạnDạng liên kếtCâu 40 Anh chị hãy cho biết đặc điểm của dạng lưu trữ kiểu tệp tin 5A’B’C’D’E’Kiểu chuỗi chiều dài thay đổi không giới hạnChiều dài hiện tại- Đối tượng dữ liệu tập tin là một cấu trúc dữ liệu bao gồm nhiều thành phần được sắp xếp liên tiếp nhau. Kíchthước lưu trữ của tệp tin thay đổi theo số lượng thành phần của tập tin. - Tập tin được lưu trữ ở bộ nhớ phụ như băng từ hoặc đĩa Thời gian sống của tập tin có thể dài hơn thời gian thực thi của chương trình tạo ra Các thành phần của tập tin được truy xuất thông qua con trỏ vị trí tập 41 Anh chị hãy cho biết đặc điểm, ưu điểm và nhược điểm của biến tĩnh• Đặc điểm - Khai báo một cách tường minh- Thời gian tồn tại của biến tĩnh cũng là thời gian tồn tại của khối chương trình chứa khai báo biến Biến được cấp phát vùng nhớ trong vùng dữ liệu data segment hoặc là Kích thước của biến không thay đổi trong suốt quá trình sống. - Các biến tĩnh có một định danh được kết nối với địa chỉ vùng nhớ lưu trữ biến và được truy xuất trực tiếpthông qua định danh đó. • Ưu điểm- Khai báo tường Biến tĩnh tồn tại trong suốt thời gian thực thi chương trình. - Kích thước của biến không thay đổi trong suốt quá trình sống. • Nhược điểm- Cấp phát ô nhớ dư, gây ra lãng phí ô Cấp phát ô nhớ thiếu, chương trình thực thi bị 42 Anh chị hãy cho biết đặc điểm, ưu điểm và nhược điểm của biến động• Đặc điểm - Không được khai báo một cách tường minh- Có thể được cấp phát hoặc giải phóng bộ nhớ khi người sử dụng yêu Biến được cấp phát vùng nhớ trong Kích thước của biến có thể thay đổi trong suốt quá trình sống. - Việc truy nhập các biến động được tiến hành nhờ các biến con Các biến con trỏ được định nghĩa như là biến tĩnh và được dùng để chứa địa chỉ của các biến động. • Ưu điểm- Biến động chỉ phát sinh trong quá trình thực hiện chương trình chứ không phát sinh lúc bắt đầu chương trình. - Khi chạy chương trình, kích thước của biến, vùng nhớ và địa chỉ vùng nhớ được cấp phát cho biến có thể Sau khi dùng xong có thể giải phóng để tiết kiệm chỗ trong bộ nhớ • Nhược điểm- Không được khai báo 1 cách tường Biến động không có địa chỉ nhất định nên ta không thể truy cập đến chúng 43 Anh chị hãy trình bày khái niệm biến con trỏ và những lưu ý khi sử dụng biến con trỏ• Khái niệm Biến con trỏ là biến dùng để chứa địa chỉ của ô nhớ trong bộ nhớ.• Lưu ý khi sử dụng biến con trỏ- Khi gán địa chỉ của biến tĩnh cho con trỏ cần chú ý đến kiểu dữ liệu của Biến con trỏ không chứa dữ liệu mà chỉ chứa địa chỉ của dữ liệu hay chứa địa chỉ của ô nhớ chứa dữ Kích thước của biến con trỏ không phụ thuộc vào kiểu dữ liệu, luôn có kích thước cố định là 2 byteCâu 44 Anh chị hãy cho quá trình cấp phát vùng nhớ cho bản hoạt động của chương trình con diễn ranhư thế nào? Các thành phần của bản hoạt động của chương trình con• Quá trình cấp phát vùng nhớ cho bản hoạt động của CTC- Trong thời gian thực thi chương trình, CTC được gọi, một bản hoạt động của CTC được tạo ra. - Bản hoạt động của CTC được tạo ra bởi lệnh CALL – lệnh gọi CTC thực hiện. - Khi CTC được gọi, nó sẽ được cấp phát một khối lưu trữ. Khối này chứa các thông tin về dữ liệu và điềukhiển của CTC tương ứng với lần gọi này. Khối nhớ được giải phóng khi CTC kết thúc. - Bản hoạt động của CTC kết thúc ở lệnh RETURN, trở về nơi gọi CTC.• Các thành phần của bản hoạt động của CTC- Phần tĩnh phần đoạn mã chứa mã thực thi của CTC và các hằng. Nội dung của phần này không thay đổi trongthời gian thực thi và như nhau ở tất cả các bản hoạt động của 1 CTC- Phần động bản ghi hoạt động chứa các thông số hình thức, kết quả của CTC hàm, dữ liệu cục bộ, điểm trởvề…Cấu trúc phần này cố định nhưng nội dung thay đổi trong thời gian thực thi cũng như ở các bản hoạt 45 Anh chị hãy cho biết thế nào là hiệu ứng lề, lấy ví dụ về trường hợp hiệu ứng lề mà anh chị biết• Khái niệm Hiệu ứng lề là 1 hiệu ứng phát sinh khi thực thi 1 phép toán có trả về kết quả ẩn, kết quả ẩn đượctrả về này sẽ làm thay đổi giá trị được lưu trữ của các đối tượng dữ liệu ĐTDL khác mà người lập trình khókiểm soát được.• Các phép toán có thể gây ra hiệu ứng lề+Khai báo biến toàn cục trùng với các biến cục bộ trong hàm con.+Phép gán có trả về 1 giá trị.+Các chương trình con mà tham số được truyền bằng quy chiếu.+Phép toán được xác định trên nhiều hơn một miền xác định.• Ví dụ Var x Integer;Procedure P;Beginx= 0;End;Begin{1} x=10;{2} P;{3} Writelnx; ví dụ trên, chương trình con P thực hiện việc gán giá trị 0 cho biến toàn cục chương trình chính, mặc dù ta mới gán 10 cho x lệnh 1, nhưng sau khi gọi thủ tục P lệnh 2 thì ở lệnh 3, x lại có giá trị 0. Việc chương trình con sử dụng biến không cục bộ như vậy sẽ dễ gây ngộ nhận cho người lập trình rằng x có giá trị 10, đặc biệt khi thủ tục P được định nghĩa ở một đoạn nào đó, xa đoạn chương trình 46 Anh chị hãy cho biết cơ chế chung cho việc đặc tả thiết kế các cấu trúc điều khiển trình tự phát biểu goto, phát biểu ghép, phát biểu điều kiện, phát biểu lặp dựa trên cơ chế xử lý của các tác vụ thanh ghi máy 47 Anh chị hãy cho biết các đặc điểm của cấu trúc gọi trở về đơn giản của chương trình con- Khi chương trình được thực thi, chương trình chính được thực hiện đầu tiên. Trong thời gian thực thi, chươngtrình chính có thể gọi các CTC thực hiện. Và mỗi CTC này, đến lượt nó, lại có thể gọi các chương trình conkhác thực hiện. - CTC không được đệ qui. - Cần có các phát biểu gọi tường CTC phải được hoàn thành ở mỗi lần Điều khiển được chuyển ngay tức thời ở điểm gọi. - Trình tự thực thi đơn. - Các bản ghi hoạt động của cùng 1 CTC tạo ra trong mỗi lần gọi có thể sử dụng chung 1 khối lưu trữ. Câu 48 Anh chị hãy cho biết các đặc điểm của cấu trúc gọi đệ quy của chương trình con- Với gọi đệ qui, nhiều bản hoạt động của cùng 1 CTC có thể cùng tồn tại trong bộ nhớ, trong thời gian thực thichương Để gọi đệ qui CTC phải cấp phát động khối lưu trữ cho các bản hoạt động trong thời gian thực thi cấp phát thực hiện theo cơ chế Khi thực thi, bản ghi hoạt động của CT chính được cấp phát ở đáy chồng. - Khi kết thúc trả điều khiển thì bản ghi hoạt động được giải 49 Anh chị hãy phân biệt các loại môi trường tham khảo của chương trình conMôi trường tham khảo có 4 thành phần- Môi trường cục bộ- Môi trường không cục bộ- Môi trường toàn cục- Môi trường được định nghĩa 50 Anh chị hãy cho biết đặc điểm của phương pháp truyền tham chiếu và những trường hợp nàocần sử dụng phương pháp truyền tham chiếu cho chương trình con• Khái niệm- Tham số hình thức là tham số vào – ra, có nghĩa vụ nhận giá trị vào cho CTC và trả kết quả về cho CT số hình thức là 1 con Tham số thực tế là 1 biến- Phương pháp thực hiện Tại thời điểm gọi, con trỏ của tham số thực tế được sao chép cho tham số hình thức .Trong QT thực hiện CTC, mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ của tham số thực Khi CTC kết thúc, mọi thay đổi giá trị của tham số hình thức đều làm giá trị của tham số thực tế thay đổitheo. name, binding and Email nhphung Website các bạn tự tìm sách trên google theo gợi ý bên dưới nhé! Foundations Of Programming Programming Languages Principles And Giới thiệu, nội dung môn học 1 Abstract Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 The Concepts of Abstract Machine and of Interpreter . . . . . . . . 1 The Interpreter . . . . . . . . . . . . . . . . . . . . . . . . 2 An Example of an Abstract Machine The Hardware Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Implementation of a Language . . . . . . . . . . . . . . . . . . . 9 Implementation of an Abstract Machine . . . . . . . . . . 9 Implementation The Ideal Case . . . . . . . . . . . . . . . 13 Implementation The Real Case and The Intermediate Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Hierarchies of Abstract Machines . . . . . . . . . . . . . . . . . . 21 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Bibliographic Notes . . . . . . . . . . . . . . . . . . . . . . . . . 24 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2 How to Describe a Programming Language . . . . . . . . . . . . . . 27 Levels of Description . . . . . . . . . . . . . . . . . . . . . . . . 27 Grammar and Syntax . . . . . . . . . . . . . . . . . . . . . . . . 28 Context-Free Grammars . . . . . . . . . . . . . . . . . . . 30 Contextual Syntactic Constraints . . . . . . . . . . . . . . . . . . 39 Compilers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Pragmatics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Bibliographical Notes . . . . . . . . . . . . . . . . . . . . . . . . 53 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3 Foundations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 The Halting Problem . . . . . . . . . . . . . . . . . . . . . . . . . 57 Expressiveness of Programming Languages . . . . . . . . . . . . . 59 Formalisms for Computability . . . . . . . . . . . . . . . . . . . . 60 There are More Functions than Algorithms . . . . . . . . . . . . . 61 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Bibliographical Notes . . . . . . . . . . . . . . . . . . . . . . . . 64 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4 Names and The Environment . . . . . . . . . . . . . . . . . . . . . . 67 Names and Denotable Objects . . . . . . . . . . . . . . . . . . . . 67 Denotable Objects . . . . . . . . . . . . . . . . . . . . . . 69 Environments and Blocks . . . . . . . . . . . . . . . . . . . . . . 70 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Types of Environment . . . . . . . . . . . . . . . . . . . . 72 Operations on Environments . . . . . . . . . . . . . . . . 75 Scope Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Static Scope . . . . . . . . . . . . . . . . . . . . . . . . . 78 Dynamic Scope . . . . . . . . . . . . . . . . . . . . . . . 80 Some Scope Problems . . . . . . . . . . . . . . . . . . . . 82 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Bibliographical Notes . . . . . . . . . . . . . . . . . . . . . . . . 86 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5 Memory Management . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Techniques for Memory Management . . . . . . . . . . . . . . . . 91 Static Memory Management . . . . . . . . . . . . . . . . . . . . . 93 Dynamic Memory Management Using Stacks . . . . . . . . . . . 93 Activation Records for In-line Blocks . . . . . . . . . . . . 96 Activation Records for Procedures . . . . . . . . . . . . . 97 Stack Management . . . . . . . . . . . . . . . . . . . . . . 99 Dynamic Management Using a Heap . . . . . . . . . . . . . . . . 101 Fixed-Length Blocks . . . . . . . . . . . . . . . . . . . . 101 Variable-Length Blocks . . . . . . . . . . . . . . . . . . . 103 Implementation of Scope Rules . . . . . . . . . . . . . . . . . . . 105 Static Scope The Static Chain . . . . . . . . . . . . . . . 105 Static Scope The Display . . . . . . . . . . . . . . . . . . 109 Dynamic Scope Association Lists and CRT . . . . . . . . 111 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Bibliographic Notes . . . . . . . . . . . . . . . . . . . . . . . . . 116 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 6 Control Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Expression Syntax . . . . . . . . . . . . . . . . . . . . . . 120 Semantics of Expressions . . . . . . . . . . . . . . . . . . 123 Evaluation of Expressions . . . . . . . . . . . . . . . . . . 125 The Concept of Command . . . . . . . . . . . . . . . . . . . . . . 129 The Variable . . . . . . . . . . . . . . . . . . . . . . . . . 130 Assignment . . . . . . . . . . . . . . . . . . . . . . . . . 131 Sequence Control Commands . . . . . . . . . . . . . . . . . . . . 136 Commands for Explicit Sequence Control . . . . . . . . . 136 Conditional Commands . . . . . . . . . . . . . . . . . . . 140 Iterative Commands . . . . . . . . . . . . . . . . . . . . . 144 Structured Programming . . . . . . . . . . . . . . . . . . . . . . . 150 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Tail Recursion . . . . . . . . . . . . . . . . . . . . . . . . 155 Recursion or Iteration? . . . . . . . . . . . . . . . . . . . 159 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Bibliographical Notes . . . . . . . . . . . . . . . . . . . . . . . . 161 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 7 Control Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Subprograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Functional Abstraction . . . . . . . . . . . . . . . . . . . . 167 Parameter Passing . . . . . . . . . . . . . . . . . . . . . . 169 Higher-Order Functions . . . . . . . . . . . . . . . . . . . . . . . 178 Functions as Parameters . . . . . . . . . . . . . . . . . . . 179 Functions as Results . . . . . . . . . . . . . . . . . . . . . 184 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Implementing Exceptions . . . . . . . . . . . . . . . . . . 190 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Bibliographical Notes . . . . . . . . . . . . . . . . . . . . . . . . 193 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 8 Structuring Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Types as Support for Conceptual Organisation . . . . . . . 198 Types for Correctness . . . . . . . . . . . . . . . . . . . . 199 Types and Implementation . . . . . . . . . . . . . . . . . . 200 Type Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Static and Dynamic Checking . . . . . . . . . . . . . . . . 202 Scalar Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Booleans . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Characters . . . . . . . . . . . . . . . . . . . . . . . . . . 204 xvi Contents Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Reals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Fixed Point . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Complex . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Enumerations . . . . . . . . . . . . . . . . . . . . . . . . 207 Intervals . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Ordered Types . . . . . . . . . . . . . . . . . . . . . . . . 209 Composite Types . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Records . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Variant Records and Unions . . . . . . . . . . . . . . . . . 211 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Recursive Types . . . . . . . . . . . . . . . . . . . . . . . 227 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Equivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Equivalence by Name . . . . . . . . . . . . . . . . . . . . 231 Structural Equivalence . . . . . . . . . . . . . . . . . . . . 232 Compatibility and Conversion . . . . . . . . . . . . . . . . . . . . 234 Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Overloading . . . . . . . . . . . . . . . . . . . . . . . . . 238 Universal Parametric Polymorphism . . . . . . . . . . . . 239 Subtype Universal Polymorphism . . . . . . . . . . . . . . 241 Remarks on the Implementation . . . . . . . . . . . . . . . 242 Type Checking and Inference . . . . . . . . . . . . . . . . . . . . 244 Safety An Evaluation . . . . . . . . . . . . . . . . . . . . . . . . 246 Avoiding Dangling References . . . . . . . . . . . . . . . . . . . 247 Tombstone . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Locks and Keys . . . . . . . . . . . . . . . . . . . . . . . 249 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . 250 Reference Counting . . . . . . . . . . . . . . . . . . . . . 251 Mark and Sweep . . . . . . . . . . . . . . . . . . . . . . . 253 Interlude Pointer Reversal . . . . . . . . . . . . . . . . . 254 Mark and Compact . . . . . . . . . . . . . . . . . . . . . 255 Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Bibliographic Notes . . . . . . . . . . . . . . . . . . . . . . . . . 259 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 9 Data Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Abstract Data Types . . . . . . . . . . . . . . . . . . . . . . . . . 265 Information Hiding . . . . . . . . . . . . . . . . . . . . . . . . . 268 Representation Independence . . . . . . . . . . . . . . . . 271 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Bibliographical Notes . . . . . . . . . . . . . . . . . . . . . . . . 275 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 10 The Object-Oriented Paradigm . . . . . . . . . . . . . . . . . . . . . 277 The Limits of Abstract Data Types . . . . . . . . . . . . . . . . . 277 A First Review . . . . . . . . . . . . . . . . . . . . . . . . 281 Fundamental Concepts . . . . . . . . . . . . . . . . . . . . . . . . 281 Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Encapsulation . . . . . . . . . . . . . . . . . . . . . . . . 287 Subtypes . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Dynamic Method Lookup . . . . . . . . . . . . . . . . . . 297 Implementation Aspects . . . . . . . . . . . . . . . . . . . . . . . 301 Single Inheritance . . . . . . . . . . . . . . . . . . . . . . 303 The Problem of Fragile Base Class . . . . . . . . . . . . . 305 Dynamic Method Dispatch in the JVM . . . . . . . . . . . 306 Multiple Inheritance . . . . . . . . . . . . . . . . . . . . . 309 Polymorphism and Generics . . . . . . . . . . . . . . . . . . . . . 314 Subtype Polymorphism . . . . . . . . . . . . . . . . . . . 315 Generics in Java . . . . . . . . . . . . . . . . . . . . . . . 317 Implementation of Generics in Java . . . . . . . . . . . . . 321 Generics, Arrays and Subtype Hierarchy . . . . . . . . . . 323 Covariant and Contravariant Overriding . . . . . . . . . . . 325 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Bibliographical Notes . . . . . . . . . . . . . . . . . . . . . . . . 328 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 11 The Functional Paradigm . . . . . . . . . . . . . . . . . . . . . . . . 333 Computations without State . . . . . . . . . . . . . . . . . . . . . 333 Expressions and Functions . . . . . . . . . . . . . . . . . 335 Computation as Reduction . . . . . . . . . . . . . . . . . . 337 The Fundamental Ingredients . . . . . . . . . . . . . . . . 338 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Capture-Free Substitution . . . . . . . . . . . . . . . . . . 340 Evaluation Strategies . . . . . . . . . . . . . . . . . . . . 341 Comparison of the Strategies . . . . . . . . . . . . . . . . 343 Programming in a Functional Language . . . . . . . . . . . . . . . 345 Local Environment . . . . . . . . . . . . . . . . . . . . . 345 Interactiveness . . . . . . . . . . . . . . . . . . . . . . . . 346 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Pattern Matching . . . . . . . . . . . . . . . . . . . . . . . 347 Infinite Objects . . . . . . . . . . . . . . . . . . . . . . . . 349 Imperative Aspects . . . . . . . . . . . . . . . . . . . . . 350 Implementation The SECD Machine . . . . . . . . . . . . . . . . 353 The Functional Paradigm An Assessment . . . . . . . . . . . . . 355 Fundamentals The λ-calculus . . . . . . . . . . . . . . . . . . . . 358 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Bibliographical Note . . . . . . . . . . . . . . . . . . . . . . . . . 365 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 12 The Logic Programming Paradigm . . . . . . . . . . . . . . . . . . . 369 Deduction as Computation . . . . . . . . . . . . . . . . . . . . . . 369 An Example . . . . . . . . . . . . . . . . . . . . . . . . . 371 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 The Language of First-Order Logic . . . . . . . . . . . . . 374 Logic Programs . . . . . . . . . . . . . . . . . . . . . . . 376 Theory of Unification . . . . . . . . . . . . . . . . . . . . . . . . 377 The Logic Variable . . . . . . . . . . . . . . . . . . . . . 377 Substitution . . . . . . . . . . . . . . . . . . . . . . . . . 379 Most General Unifier . . . . . . . . . . . . . . . . . . . . 381 A Unification Algorithm . . . . . . . . . . . . . . . . . . . 383 The Computational Model . . . . . . . . . . . . . . . . . . . . . . 387 The Herbrand Universe . . . . . . . . . . . . . . . . . . . 387 Declarative and Procedural Interpretation . . . . . . . . . . 388 Procedure Calls . . . . . . . . . . . . . . . . . . . . . . . 389 Control Non-determinism . . . . . . . . . . . . . . . . . . 392 Some Examples . . . . . . . . . . . . . . . . . . . . . . . 395 Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Logic Programming and Databases . . . . . . . . . . . . . 403 Logic Programming with Constraints . . . . . . . . . . . . 404 Advantages and Disadvantages of the Logic Paradigm . . . . . . . 406 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 408 Bibliographical Notes . . . . . . . . . . . . . . . . . . . . . . . . 409 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 13 A Short Historical Perspective . . . . . . . . . . . . . . . . . . . . . . 413 Beginnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Factors in the Development of Languages . . . . . . . . . . . . . . 415 1950s and 60s . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 The 1970s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 The 1980s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 1990s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 430 Bibliographical Notes . . . . . . . . . . . . . . . . . . . . . . . . 431 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Kho Tài Liệu Toán Toán THCS ĐH Bách Khoa HCM ĐH Bách Khoa HN ĐH Khoa Học Tự Nhiên HCM ĐH Kinh Tế - ĐHQG Hà Nội Đại Học Ngoại Thương Đại Học Kinh Tế Quốc Dân HV Công Nghệ BCVT Việc làm/thực tập Bộ sưu tập Bài viết Ủng hộ admin Giáo trình Nguyên Lý Ngôn Ngữ Lập Trình Chia sẻ Xem dạng ảnh Ngày đăng 15/05/2015, 1556 Câu 1 Khái niệm và Các yếu tố cấu thành của Ngôn ngữ lập trình Ngôn ngữ lập trình là một hệ thống được kí hiệu hóa để miểu tả những tính toán qua máy tính trong một dạng mà cả con người và máy tính đều có thể đọc và hiểu được. Ngôn ngữ lập trình = Kí hiệu + quy tắc kết hợp • Các yếu tố cấu thành của ngôn ngữ lập trình o Cú pháp Sự kết hợp của các kí hiệu Dạng của biểu thức, các phát triển, các đơn vị nhỏ của chương trình o Ngữ nghĩa Ý nghĩa cuả sự kết hợp. o Ngữ dụng Mối quan hệ của cú pháp,ngữ nghĩa với thế giới bên ngoài Câu 2 Phải có ngôn ngữ lập trình mà k dùng ngôn ngữ máy hay ngôn ngữ tự nhiên để lập trình vì • Ngôn ngữ máy là ngôn ngữ trong đó các lệnh được viết bằng các số nhị phân 0 và 1. Nếu một chương trình được viết bằng ngôn ngữ máy thì chương trình đó sẽ rất dài. Các dòng số này không gợi nên ý nghĩa của lệnh. Người dùng muốn hiểu và sử dụng chương trình thì phải ghi nhớ một cách máy móc các dòng lệnh. • Ngôn ngữ tự nhiên là ngôn ngữ đa nghĩa, giàu cảm xúc biểu đạt, đóng về ngữ nghĩa. Nếu dùng ngôn ngữ tự nhiên để vết chương trình thì máy tính không thể xác định được khả năng biểu đạt của ngôn ngữ.  Phải dùng ngôn ngữ lập trình để làm phương tiện giao tiếp giữa người và máy tính. Câu 3 Lịch sử phát triển của ngôn ngữ lập trình • Ngôn ngữ lập trình đầu tiên là ngôn ngữ máy tính mã nhị phân. Ngôn ngữ máy phụ thuộc toàn bộ vào kiến trúc phần cứng và những quy ước khắt khe của nhà chế tạo → Không có tính khả chuyển • Từ những năm 1950 hợp ngữ assembly ra đời → là những ngôn ngữ bậc thấp. • Từ năm 1957 ngôn ngữ bậc cao đầu tiên ra đời. Đây là sản phẩm của IBM đưa ra. Đó là ngôn ngữ Fortran Formula Translator. Là ngôn ngữ gần gũi với ngôn ngữ tự nhiên, với cách diễn đạt toán học Điều kiện, vòng lặp. • Đầu những năm 1960 COBOL xử lý dữ liệu. Algol 60 có cấu trúc điều khiển hiện đại Lisp Ngôn ngữ lập trình hàm đầu tiên, ngôn ngữ xử lí danh sách • Giữa những năm 1960 PL/1 Kết hợp giữa ngôn ngữ tính toán số học và ngôn ngữ xử lí dữ liệu. Simula Hướng đối tượng • Từ năm 1970 – 1990 Các ngôn ngữ hướng đối tượng C++ Lập trình Logic 1972 Lập trình hàm ML.,miranda Ada • Từ năm 1990 đến nay Hướng đối tượng + WWW C,java Ngôn ngữ kịch bản + Hướng đối tượng + WWWPHP XML Ngôn ngữ kịch bản phía Client Java Script Câu 4 Các xu hướng phát triển & nghiên cứu chính of các ngôn ngữ lập trình trong giai đoạn hiện nay • Moodul hóa, hướng đối tượng. • Mã nguồn mở, framework. • Phát hiện lỗi tự động • Phát triển trình dịch biên. • Bảo mật • Lập trình cho di động • Web điện toán cho đám mây • Lập trình trí tuệ nhân tạo Câu 5 Anh chị hãy cho biết tên của 3 ngôn ngữ lập trình được sử dụng phổ biến hiện nay trên thế giới, và theo anh chị thì vì sao nó lại được sử dụng phổ biến ngữ lập trình C C là một ngôn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft, là phần khởi đầu cho kế hoạch .NET của họ. Tên của ngôn ngữ bao gồm ký tự thăng theo Microsoft nhưng theo ECMA là C, chỉ bao gồm dấu số thường. Microsoft phát triển C dựa trên C++ và Java. C được miêu tả là ngôn ngữ có được sự cân bằng giữa C++, Visual Basic, Delphi và Java. C được thiết kế chủ yếu bởi Anders Hejlsberg kiến trúc sư phần mềm nổi tiếng với các sản phẩm Turbo Pascal, Delphi, J++, WFC. C, theo một hướng nào đó, là ngôn ngữ lập trình phản ánh trực tiếp nhất đến .NET Framework mà tất cả các chương trình .NET chạy, và nó phụ thuộc mạnh mẽ vào Framework này. Mọi dữ liệu cơ sở đều là đối tượng, được cấp phát và hủy bỏ bởi trình dọn rác Garbage-Collector GC, và nhiều kiểu trừu tượng khác chẳng hạn như class, delegate, interface, exception, phản ánh rõ ràng những đặc trưng của .NET runtime. 4. Ngôn ngữ lập trình Java Java đọc như "Gia-va" là một ngôn ngữ lập trình dạng lập trình hướng đối tượng OOP. Khác với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi runtime environment chạy. Bằng cách này, Java thường chạy nhanh hơn những ngôn ngữ lập trình thông dịch khác như Python, Perl, PHP, Cú pháp Java được vay mượn nhiều từ C & C++ nhưng có cú pháp hướng đối tượng đơn giản hơn và ít tính năng xử lý cấp thấp hơn. dự định ngôn ngữ Java thay cho C++, nhưng các tính năng giống Objective C. Không nên lẫn lộn Java với JavaScript, hai ngôn ngữ đó chỉ giống tên và loại cú pháp như C. Công ty Sun Microsystems đang giữ bản quyền và phát triển Java thường xuyên. 3. Ngôn ngữ lập trình PHP PHP viết tắt hồi quy "PHP Hypertext Preprocessor" là một ngôn ngữ lập trình kịch bản hay một loại mã lệnh chủ yếu được dùng để phát triển các ứng dụng viết cho máy chủ, mã nguồn mở, dùng cho mục đích tổng quát. Nó rất thích hợp với web và có thể dễ dàng nhúng vào trang HTML. Do được tối ưu hóa cho các ứng dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ học và thời gian xây dựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ khác nên PHP đã nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế giới. Ngôn ngữ, các thư viện, tài liệu gốc của PHP được xây dựng bởi cộng đồng và có sự đóng góp rất lớn của Zend Inc., công ty do các nhà phát triển cốt lõi của PHP lập nên nhằm tạo ra một môi trường chuyên nghiệp để đưa PHP phát triển ở quy mô doanh nghiệp. Câu 6 Phân biệt NNLT bậc thấp và NNLT bậc cao - Ngôn ngữ lập trình bậc thấp là một ngôn ngữ lập trình liên quan chặt chẽ đến phần cứng máy tính và không có tính khả chuyển. Từ "thấp" không có nghĩa là ngôn ngữ này kém hơn các ngôn ngữ lập trình bậc cao mà điều này nghĩa là các lệnh của nó rất gần ngôn ngữ máy. Phụ thuộc rất nhiều vào loại máy. Các ngôn ngữ lập trình bậc thấp thường được chia thành hai loại thế hệ thứ nhất và thế hệ thứ hai. + Ngôn ngữ lập trình thế hệ thứ nhất, hay 1GL, là mã máy. Nó là ngôn ngữ duy nhất mà bộ vi xử lý có thể hiểu. Hiện nay các lập trình viên hầu như không bao giờ viết chương trình trực tiếp bằng ngôn ngữ máy vì nó không chỉ yêu cầu chú ý nhiều đến các chi tiết mà một ngôn ngữ bậc cao xử lý một cách tự động mà còn yêu cầu ghi nhớ và tìm những mã lệnh bằng số cho mỗi chỉ thị được sử dụng. + Ngôn ngữ lập trình thế hệ thứ hai, hay 2GL, là ngôn ngữ assembly. Nó được xem là ngôn ngữ thế hệ thứ hai vì mặc dù nó không phải là ngôn ngữ máy nhưng lập trình viên vẫn phải hiểu về kiến trúc của bộ vi xử lý như các thanh ghi và các lệnh của bộ vi xử lý. Những câu lệnh đơn giản được dịch trực tiếp ra mã máy. - Ngôn ngữ lập trình bậc cao Là ngôn ngữ gần với ngôn ngữ tự nhiên nhất. ít phụ thuộc vào loại máy, có tính độc lập cao và phải có chương trình dịch để dịch sang mã máy thì máy tính mới có thể thực hiện được. - Cho ví dụ + Ngôn ngữ bậc thấp Ngôn ngữ máy, Assembly, … + Ngôn ngữ lập trình bậc cao fortran, pascal, C, Cobol…. Câu 7 Họ ngôn ngữ lập trình phổ biến là - Ngôn ngữ máy và ngôn ngữ ASSEMBLY Ngôn ngữ máy là đối tượng thi hành trực tiếp của vi xử lý. Hợp ngữ Assembly 1950s chương trình viết bằng hợp ngữ ngắn hơn, chiếm ít bộ nhớ hơn và chạy nhanh hơn so với ngôn ngữ lập trình bậc cao. Ngôn ngữ Assembly thích hợp cho lập trinh các vi điều khiển VD vi điều khiển trên ô tô - Họ ngôn ngữ cổ điển ngôn ngữ cấp cao loại ngôn ngữ thủ tục gắn chặt với mô hình máy tính cổ điển Von Neumann Kiến trúc Von Neumann có 2 đặc điểm đáng chú ý + Các lệnh được xử lý tuần tự theo thứ tự sắp xếp trong bộ nhớ + Chỉ cho phép đọc ghi mỗi lần 1 từ nhớ Word Memory\ VD Fortran, Pascal, Basic, C, … - Họ ngôn ngữ hàm Chương trình của ngôn ngữ hàm bao gồm các đối tượng dữ liệu, các hàm và các phép áp dụng hàm trên các đối tượng dữ liệu. Sử dụng định nghĩa hàm đệ qui. VD Lisp, ML, Haskell,… - Họ ngôn ngữ hướng đối tượng Chương trình của ngôn ngữ hướng đối tượng là một kịch bản hoạt động của các đối tượng trong chương trình. Các đối tượng gửi các thông điệp qua lại lẫn nhau. VD Smalltalk, Eiffel, C+ +, Java,… - Họ ngôn ngữ lôgic Chương trình viết trên ngôn ngữ lôgic là tập hợp các quy tắc và các sự kiện, được diễn đạt bằng các mệnh đề, liên quan đến vấn đề cần giải quyết. Người lập trình chỉ cần đặc tả lôgic của vấn đề, còn cơ chế giải quyết vấn đề theo đặc tả đó được cài sẵn trong chương trình dịch. VD Prolog, VisiCalc,… Câu 8 Đặc trưng cơ bản của ngôn ngữ lập trình hướng đối tượng - Là kĩ thuật lập trình hỗ trợ công nghệ đối tượng. OOP được xem là giúp tăng năng suất, đơn giản hóa độ phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên tập trung vào các đối tượng phần mềm ở bậc cao hơn. Ngoài ra, nhiều người còn cho rằng OOP dễ tiếp thu hơn cho những người mới học về lập trình hơn là các phương pháp trước đó. - Chương trình của ngôn ngữ hướng đối tượng là một kịch bản hoạt động của các đối tượng trong chương trình. Các đối tượng gửi các thông điệp qua lại lẫn nhau - Đặc trưng cơ bản - Tính trừu tượng Đây là khả năng của chương trình bỏ qua hay không chú ý đến một số khía cạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết. Mỗi đối tượng phục vụ như là một "động tử" có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được các thao tác. Tính chất này thường được gọi là sự trừu tượng của dữ liệu. Tính trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể có một số đặc điểm chung cho nhiều đối tượng khác như là sự mở rộng của nó nhưng bản thân đối tượng ban đầu này có thể không có các biện pháp thi hành. Tính trừu tượng này thường được xác định trong khái niệm gọi là lớp trừu tượng hay lớp cơ sở trừu tượng + Đóng gói dữ liệu dữ liệu luôn được tổ chức thành các thuộc tính của lớp đối tượng. Việc truy nhập đến dữ liệu phải thông qua các phương thức của đối tượng lớp. + Sử dụng lại mã nguồn việc sử dụng lại mã nguồn được thể hiện thông qua cơ chế kế thừa. Cơ chế này cho phép các lớp đối tượng có thể kế thừa từ các lớp đối tượng khác. Khi đó, trong các lớp kế thừa, có thể sử dụng các phương thức mã nguồn của các lớp bị kế thừa, mà không cần phải định nghĩa lại. VD Smalltalk, Eiffel, C++, Java,… Câu 9 Phân tích 3 yêu cầu của một ngôn ngữ lập trình - Tính dễ viết + Ngôn ngữ lập trình phải có tính diễn đạt cao Cung cấp cho người lập trình những công cụ để có thể nghĩ sao viết vậy kỹ thuật đệ qui. + Ngôn ngữ phải đơn giản để dễ đọc, dễ nhớ và dễ nắm vững không nên có quá nhiều khái niệm. VD ngôn ngữ C có quá nhiều toán tử, các toán tử gần giống nhau. + Ngôn ngữ phải linh hoạt. VD C linh hoạt hơn Pascal với phát biểu Break, Return - Tính dễ đọc + GOTO Pascal làm chương trình khó đọc + Dấu gạch dưới “_” trong danh hiệu làm chương trình dễ đọc hơn - Tính tin cậy xác suất chạy đúng cao trong quá trình sử dụng + Ngôn ngữ cần hạn chế sự xuất hiện của các lỗi không thể ngờ được. VD phát biểu trong FORTRAN SUMI,J= I + J; + Hiệu ứng lề side effect cũng là một nguồn gây lỗi + Ngôn ngữ cần kiểm tra chặt chẽ sự tương hợp kiểu của các biến trong biểu thức và phép gán, sự tương hợp của danh sách thông số của chương trình con ở nơi gọi và nơi định nghĩa. + Các bộ phận của chương trình cần có tính độc lập đối với nhau cao. + Tính tin cậy còn phụ thuộc vào chất lượng của chương trình dịch Câu 10 Tiêu chuẩn để đánh giá một ngôn ngữ lập trình tốt - Tính rõ ràng clarity, đơn giản simplicity, nhất quán unity của các khái niệm - Tính rõ ràng của cú pháp chương trình clarity of program syntax. Khả năng định nghĩa và sử đụng các cấu trúc hoặc các phép toán phức tạp cho phép bỏ qua các cho tiết. - Tính tự nhiên đối với các ứng dụng naturalness for the application - Hỗ trợ tính trừu tượng hóa support for abstraction - Khả năng của ngôn ngữ lập trình hỗ trợ người lập trình tạo ra các chương trình đúng đắn. Phát hiện và sửa lỗi và thực hiện tiếp tục mà không cần dừng lại. - Dễ dàng kiểm tra chương trình - Môi trường lập trình đơn giản - Tính khả chuyển của chương trình - Chi phí sử dụng thấp chi phí thực thi, dịch, viết, kiểm tra, sử dụng, bảo trì chương trình. Câu 11. Các thành tố cuả một ngôn ngữ lập trình hiện đại -Các dạng câu lệnh định nghĩa, khai báo, gán giá trị, kết hợp, điều kiện, vòng lặp, gọi hàm, thủ tục, macro, các chỉ thị tiền xử lý ifndef MY_LIB include " endif trong C/C++, chú giải • Chương trình con và macro một khối lệnh được dùng lại nhiều lần • Biến, hằng, tham số và đối số • Từ vựng qui ước từ khóa, các tên chuẩn hay tên cho trước, các ký hiệu • Các luật cấm ngoại lệ lỗi cú pháp, lỗi ý nghĩa • Ngoài ra còn 1 số thành tố khác như - Giao diện đồ họa - Điều khiển theo sự kiện - Thời gian thực - Hỗ trợ hệ điều hành Câu 12 Trình bày khái niệm siêu ngôn ngữ meta language, và cho biết vai trò của siêu ngôn ngữ trong quá trình thiết kế ngôn ngữ lập trình, lấy ví dụ một vài siêu ngôn ngữ. - Khái niệm Ngôn ngữ dùng để xác định cú pháp hoặc ngữ nghĩa của một ngôn ngữ lập trình gọi là siêu ngôn ngữ Meta language 777 Khái niệm ngôn ngữ học của GS. Nguyễn Thiện Giáp - Vai trò Nó có vai trò quan trọng trong quá trình thiết kế ngôn ngữ lập trình Cú pháp quy định sự kết hợp giữa các kí hiệu trong bộ từ vựng. Ngữ nghĩa qui định ý nghĩa của mỗi sự kết hợp trong việc thiết kế ngôn ngữ, ngữ nghĩa hình thức cho phép các nhà thiết kế mô tả rõ ràng và chính xác ngữ nghĩa cũng như các đặc tả của ngôn ngữ. Cú pháp là thành phần quan trọng nhất trong một ngôn ngữ. Cú pháp được biểu diễn bởi một bộ luật cú pháp. Bộ luật này dùng để mô tả cấu trúc của chương trình, câu lệnh. Để lập trình, người lập trình phải nắm được bộ luật cú pháp của ngôn ngữ mà mình định xây dựng chương trình, để lập trình đúng. VD Văn phạm phi ngữ cảnh, BNF,… Câu 13. Đặc tả từ vựng trong NNLT - Ngôn ngữ là tập hợp chuỗi các ký tự từ alphabet A…Z, a…z, $,,0 9, +,_,*,/,=,… - Token Một token là một tập hợp các xâu kí tự có một nghĩa xác định. Ví dụ Các từ khoá, định danh, toán tử, hằng, xâu kí tự, … - Pattern Pattern của một token là các qui tắc kết hợp các kí tự để tạo nên token đó - Lexeme Là một chuỗi các kí tự thoả mãn pattern của một token Câu 14. Biểu thức chính quy - Để biểu diễn các token người ta dùng biểu thức chính quy. - Một biểu thức chính quy là một chuỗi miêu tả một bộ các chuỗi khác, theo những quy tắc cú pháp nhất định - BTCQ có thể hiểu như là một ngôn ngữ nhỏ dùng cho mục đích để tìm một chuỗi con trong biểu thức chuỗi lớn. Câu 15 Anh/chị hãy cho biết vì sao cần đặc tả cú pháp ngôn ngữ lập trình. Đầu vào và đầu ra của công việc đặc tả cú pháp là gì ? Phân tích cú pháp có mục đích duyệt chương trình nguồn để phát hiện và thông báo các lỗi không đúng với quy ước của ngôn ngữ. Các lỗi này làm cho nghĩa của chương trình không rõ và do đó không thể dịch đúng được. Ví dụ trong ngôn ngũ PASCAL ta viết dòng lệnh d = a+ b/e-f+g. Khi đọc đến dấu ngoặc đóng thứ 2 sau f, ta sẽ không hiểu được nguời viết muốn tính gì và đương nhiên cũng không thể dịch được. Lý do làm cho dòng lệnh không rõ nghĩa ở đây là thiếu một dấu ngoặc "" ở phía trước, có thể là trước chữ e, cũng có thể trước chữ a. Những lỗi sai với quy ước của ngôn ngữ gọi là lỗi cú pháp. Quá trình phân tích cú pháp cũng tạo ra các thông tin cần thiết về cấu trúc của chương trình và các đối tượng sẽ dùng trong công việc dịch được mô ta tiếp theo đây. Trong quá trình phân tích cú pháp, danh mục các đối tượng cũng được xây dựng để còn sinh mã chương trình trong giai đoạn tiếp theo. Công việc này gọi là phân tích từ vựng. - Đầu vào là chương trình nguồn - Đầu ra là + Những lỗi cú pháp cần sửa + Thông tin cần thiết về cấu trúc của chương trình Câu 16 Trình bày các đặc điểm của cú pháp cụ thể Trả lời * Cú pháp của ngôn ngữ được định nghĩa bởi bộ 4 Văn phạm phi ngữ cảnh Context – Free Grammar - Ký hiệu bắt đầu S ∈ NStart symbol - Tập các ký hiệu không kết thúc N Non-terminals - Tập các ký hiệu kết thúc Terminals - Tập các luật sinh P Production có dạng A → a Với A ∈ N và a là chuỗi các ký hiệu kết thúc và không kết thúc Câu hợp lệ của ngôn ngữ là chuỗi kí hiệu kết thúc được dẫn ra từ kí hiệu khởi đầu S thông qua các luật sinh trong tập luật sinh P * BNF là một siêu ngôn ngữ phổ biến để xây dựng cú pháp cụ thể * Ví dụ Cú pháp cụ thể dạng BNF cho biểu thức trong PASCAL - = - = - = - = a b c,….z - = 0 1 2,…9 - = +, -, or - * / div mod and Cú pháp cụ thể còn được gọi là cú pháp phi ngữ cảnh context-free syntax, trong đó vế trái của mỗi luật sinh chỉ có duy nhất một ký hiệu không kết thúc. Cú pháp phi ngữ cảnh biểu diễn được cú pháp của mọi ngôn ngữ lập trình cấp cao hiện nay. Câu 17 Anh/chị hãy phân tích vai trò của đặc tả ngữ nghĩa ngôn ngữ lập trình. Đầu vào, đầu ra của công việc đặc tả ngữ nghĩa là gì ? - Đặc tả ngữ nghĩa hình thức cho phép + Chứng minh tính đúng đắn của chương trình + Kiểm tra tính đúng đắn của chương trình dịch - Cú pháp và ngữ nghĩa hình thức được dùng để hiện thực và thiết kê ngôn ngữ lập trình. + Cú pháp hình thức được sử dụng để tạo ra bộ phân tích cú pháp của ngôn ngữ + Ngữ nghĩa hình thức giúp cho quá trình sinh tự động các trình thông dịch và biên dịch của ngôn ngữ. + Trong việc thiết kế ngôn ngữ, ngữ nghĩa hình thức cho phép nhà thiết kế mô tả rõ ràng và chính xác ngữ nghĩa cũng như các đặc tính của ngôn ngữ. - Đặc tả ngữ nghĩa hình thức thông qua bộ phân tích ngữ nghĩa. - Bộ phân tích ngữ nghĩa BPTNN thực hiện + Kiểm tra lỗi ngữ nghĩa kiểm tra kiểu; kiểm tra phạm vi của hằng, biến; kiểm tra việc sử dụng tên + Thu nhận thông tin thuộc tính cho các từ tố token, ví dụ như thông tin về giá trị, thông tin về loại hằng, biến hay hàm cho tên. + BPTNN phân tích ý nghĩa của các cấu trúc cú pháp tạo nên chương trình nguồn. VD trong biểu thức gán c=a+b*7, BPTNN xác định ý nghĩa của các tác vụ =, +, *, kiểm tra xem các tác vụ có nhận các đối số thuộc các kiểu thích hợp hay không dựa vào bảng ký hiệu. Câu 18 Anh/chị hãy cho biết đặc điểm của quá trình biên dịch lấy VD về các ngôn ngữ biên dịch mà anh/chị biết Trả lời * Đặc điểm của quá trình biên dịch Chương trình nguồn được trình biên dịch chuyển sang chương trình đích, thường ở dạng mã máy hoặc assembly, sau đó chương trình đích mới được thực thi. Trong hệ thống biên dịch dữ liệu và chương trình nguồn được xử lý ở hai thời điểm khác nhau. Trong đó - Chương trình nguồn viết bằng ngôn ngữ nguồn - Chương trình đối tượng được thể hiện trên ngôn ngữ đối tượng - Thời gian chuyển đổi từ chương trình nguồn sang chương trình đối tượng goi là thời gian dịch compile time - Thời gian diễn ra sự thực thi chương trình đối tượng trên máy tính gọi là thời gian thực thi execution time hoăc run time * Ví dụ về ngôn ngữ biên dịch Ngôn ngữ biên dịch là ngôn ngữ mà chương trình dịch cho nó là chương trình biên dịch. Ví dụ như Fortran , Pascal, C, C++… Câu 19 - Thay vì chuyển đổi toàn bộ chương trình nguồn như trình biên dịch, trình thông dịch chỉ chuyển đổi một mệnh đề của chương trình và thực hiện đoạn mã kết quả ngay, sau đó nó tiếp tục chuyển đổi mệnh đề thứ 2 rồi thi hành đoạn mã kết quả thứ 2 và cứ thế. - Khi sử dụng trình thông dịch, mỗi lần chạy chương trình là mỗi lần chương trình nguồn được thông dịch sang ngôn ngữ máy. Không có chương trình đối tượng nào được tạo ra. Ưu điểm - có thể chạy một chương trình vẫn còn lỗi cú pháp. Chỉ đến lúc thông dịch đến câu lệnh có lỗi cú pháp, quá trình thi hành chương trình mới bị ngừng lại và trình thông dịch sẽ thông báo lỗi. - Do không có chường trình đối tượng nào được tao ra ==> tốn ít dung lượng đĩa - Có thể chạy trên mọi hệ điều hành Nhược điểm - Trong thông dịch thì chương trình đích không được lưu lại nên mỗi lần thực hiện phải dịch lại từ đầu. ngược lại với trình biên dịch • Một số ngôn ngữ thông dịch vbscript, javascript, shell script, sql script. Câu 20 Anh chị hãy liệt kê các giai đoạn của trình biên dịch, đầu vào đầu ra của các giai đoạn? Trả lời Chương trình dịch chia làm 6 giai đoạn - Phân tích từ vựng - Phân tích cúa pháp - Phân tích ngữ nghĩa - Sinh mã trung gian - Tối ưu mã - Sinh mã đích * Phân tích từ vựng - Đầu vào chương trình nguồn là 1 chuỗi các kí hiệu - Đầu ra các kí hiệu trong chuỗi chương trình nguồn được gom lại thành các nhóm kí hiệu có ý nghĩa gọi là các token, như từ khóa, tên biến, hằng, kí hiệu tác vụ. * Phân tích cú pháp - Đầu vào chuỗi các token do bộ phân tích từ vựng cung cấp - Đầu ra cấu trúc phức tạp hơn của chương trình nguồn như biểu thức, phát biểu, chương trình con. Các cấu trúc được thể hiện dưới dạng cây cú pháp với nút lá là các token. * Phân tích ngữ nghĩa - Đầu vào Các cấu trúc cú pháp tạo nên chương trình nguồn - Đầu ra phát hiện các lỗi ngữ nghĩa, thông tin thuộc tính cho các từ tố token cho ra chương trình nguồn đã sửa lỗi * Sinh mã trung gian - Đầu vào Chương trình nguồn có ở bước trên - Đầu ra dạng biểu diễn mã trung gian mã bộ tứ, mã 3 địa chỉ của chương trình nguồn * Tối ưu mã Đầu vào Mã trung gian vừa được sinh ra ở bước trên - Đầu ra chương trình đích tối ưu về tốc độ thực thi và bộ nhớ sử dụng * Sinh mã đích - Đầu vào mã trung gian đã được tối ưu - Đầu ra mã đích thông thường ở dạng mã máy hay mã Assembly Phân tích Tổng hợp Câu 21 Anh/chị hãy trình bày nội dung của quá trình phân tích từ vựng. 1. Source program Chương trình nguồn đối với chương trình dịch chỉ là một chuỗi kí hiệu 2. Lexical analyzer Bộ phân tích từ vựng dò các kí hiệu trong chuỗi kí hiệu chương trình nguồn, và gom chúng lại thành các nhóm kí hiệu có ý nghĩa gọi là các Token như từ khóa, tên biến, hằng, kí hiệu tác vụ. 3. VD phân tích từ vựng phép gán c=a+b*7 thu được c identđịnh danh b identđịnh danh = becomeskí hiệu tác vụ gán * times kí hiệu tác vụ nhân a identđịnh danh 7 number số/hằng + pluskí hiệu tác vụ cộng Chuỗi tokens thu được id1=id2+id3*7 ident, c becomes ident, a plus ident, b times number, 7 4. Parser Bộ phân tích cú pháp nhận các kí hiệu có ý nghĩa gọi là các Token trong chuỗi kí hiệu từ bộ phân tích từ vựng, sau đó bộ phân tích từ vựng lấy token kế Get next token từ bộ phân tích cú pháp. 5. Bảng danh hiệu symbol table Câu 22 Anh chị hãy cho biết bảng danh hiệu Symbol table dùng để làm gì? Và vai trò của nó trong quá trình biên dịch chương trình? * Bảng danh hiệu symbol table là một cấu trúc dữ liệu dùng để lưu trữ tất cả định danh bao gồm các trường lưu giữ ký hiệu và các thuộc tính của nó là thông tin của chương trình Các thông tin này được tập hợp từ các giai đoạn phân tích của trình biên dịch và được sử dụng bởi giai đoạn tổng hợp để sinh mã đích * Vai trò của bảng danh hiệu Symbol table trong quá trình biên dịch chương trình là Source program Lexical analyzer Get next token Token Parser Symbol table c …. a …. b … Danh hiệu Thuộc tính - Là cơ sở dữ liệu cho toàn bộ hệ thống biên dịch - Trong quá trình chạy chương trình chỉ cần lấy lại thông tin từ bảng Symbol table mà không cần kiểm tra lại thông tin - Khi chạy chương trình lần thứ 2 mà dữ liệu nguồn không có gì thay đổi thì nó sẽ chạy trực tiếp trên file đích đã chứa sẵn bảng Symbol table1 lần biên dịch mà thực thi được nhiều lầnthời gian chạy chương trình nhanh Câu 23 Anh chị hãy trình bày nội dung của quá trình phân tích cú pháp - Bộ phân tích cú pháp phân tích chuỗi các token do bộ phân tích từ vựng cung cấp, để thu được các cấu trúc phức tạp hơn của chương trình nguồn như biểu thức, phát biểu, chương trình con. Các cấu trúc được thể hiện dưới dạng cây cú pháp với nút lá là các token. - Ví dụ cây cú pháp thu được của phát biểu gán “c=a+b*7“ Câu 24 Anh chị hãy trình bày nội dung của quá trình phân tích ngữ nghĩa -Bộ phân tích ngữ nghĩa BPTNN thực hiện – Kiểm tra lỗi ngữ nghĩa kiểm tra kiểu; kiểm tra phạm vi của hằng, biến; kiểm tra việc sử dụng tên – Thu nhận thông tin thuộc tính cho các từ tố token, ví dụ như thông tin về giá trị, thông tin về loại hằng, biến hay hàm cho tên. -BPTNN phân tích ý nghĩa của các cấu trúc cú pháp tạo nên chương trình nguồn. VD trong biểu thức gán c=a+b*7, BPTNN xác định ý nghĩa của các tác vụ =, +, *, kiểm tra xem các tác vụ có nhận các đối số thuộc các kiểu thích hợp hay không dựa vào bảng ký hiệu. -Việc phân tích ngữ nghĩa phải dựa vào các luật ngữ nghĩa đi kèm với từng luật cú pháp để thực hiện chức năng sinh thuộc tính cho các từ tố và kiểm tra lỗi ngữ nghĩa. Câu 25 Anh chị hãy cho biết các lỗi của chương trình được phát hiện như thế nào trong quá trình biên dịch chương trình */ Xử lý lỗi cú pháp Chương trình nguồn có thể chứa các lỗi ở nhiều mức độ khác nhau - Lỗi từ vựng như danh biểu, từ khóa, toán tử viết không đúng. - Lỗi cú pháp như ghi một biểu thức toán học với các dấu ngoặc đóng và mở không cân bằng. - Lỗi ngữ nghĩa như một toán tử áp dụng vào một toán hạng không tương thích. - Lỗi logic như thực hiện một lời gọi đệ qui không thể kết thúc. Phần lớn việc phát hiện và phục hồi lỗi trong một trình biện dịch tập trung vào giai đọan phân tích cú pháp. Vì thế, bộ xử lý lỗi error handler trong quá trình phân tích cú pháp phải đạt mục đích sau ™ Ghi nhận và thông báo lỗi một cách rõ ràng và chính xác. ™ Phục hồi lỗi một cách nhanh chóng để có thể xác định các lỗi tiếp theo. ™ Không làm chậm tiến trình của một chương trình đúng. */ Các chiến lược phục hồi lỗi Phục hồi lỗi là kỹ thuật vượt qua các lỗi để tiếp tục quá trình dịch. Nhiều chiến lược phục hồi lỗi có thể dùng trong bộ phân tích cú pháp. Mặc dù không có chiến lược nào được chấp nhận hoàn toàn, nhưng một số trong chúng đã được áp dụng rộng rãi. Ởđây, chúng ta giới thiệu một số chiến lược [...]... chương trình vào trong bảng danh biểu symbol table nơi chứa thông tin về kiểu của các biến và chương trình con - Ưu điểm tất cả các nhánh chương trình, các phép toán đều được kiểm tra nên không bỏ sót các lỗi về kiểu Mặt khác thông tin về kiểu không gắn với ĐTDL tại thời điểm thực thi chương trình nên tiết kiệm bộ nhớ và tăng tốc độ chạy chương trình - Nhược điểm không mềm dẻo, cụ thể người lập trình. .. -Ưu điểm mềm dẻo khi viết chương trình, không cần khai báo kiểu dữ liệu và kiểu của ĐTDL có thể thay đổi trong quá trình thực thi chương trình -Nhược điểm có khả năng bỏ sót lỗi về kiểu; yêu cầu bộ nhớ lớn do phải lưu trữ thông tin kiểu dữ liệu trong quá trình thực hiện chương trình; làm chậm quá trình thực thi do vừa phải tính toán vừa phải kiểm tra kiểu -Các ngôn ngữ kiểm tra kiểu động SNOBOL4,... toán quan hệ so sánh hai giá trị dữ liệu đối số và trả về kết quả là một đối tượng dữ liệu logic đúng hoặc sai - Gán trị Cũng như phép gán tổng quát, phép gán của số nguyên có thể trả về hoặc không trả về một giá trị Sự cài đặt Kiểu dữ liệu nguyên hầu hết được cài đặt một cách trực tiếp bằng cách dùng sự biểu diễn bộ nhớ được xác định bởi phần cứng và tập hợp các phép tính số học, các phép toán... trị “NULL” Tùy thuộc vào kiểu của biến mà giá trị NULL này sẽ có một giá trị cụ thể, ví dụ nếu là biến số thì NULL là 0, nếu là biến chuỗi kí tự thì NULL là chuỗi rỗng, nếu biến là logic thì NULL là FALSE - Khởi tạo biến ngay sau khi nó vừa được tạo ra là một cách lập trình tốt và trong một số ngôn ngữ mới đều cung cấp phương tiện để làm điều này một cách dễ dàng Trong ngôn ngữ Pascal một biến được... phẩy lạ hoặc thêm vào một dấu chấm phẩy c Chiến lược dùng các luật sinh sửa lỗi error production Thêm vào văn phạm của ngôn ngữ những luật sinh lỗi và sử dụng văn phạm này để xây dựng bộ phân tích cú pháp, chúng ta có thể sinh ra bộ đoán lỗi thích hợp để chỉ ra cấu trúc lỗi được nhận biết trong dòng nhập d Chiến lược hiệu chỉnh toàn cục global correction Một cách lý tưởng là trình biên dịch tạo... chương trình con - Khi chương trình được thực thi, chương trình chính được thực hiện đầu tiên Trong thời gian thực thi, chương trình chính có thể gọi các CTC thực hiện Và mỗi CTC này, đến lượt nó, lại có thể gọi các chương trình con khác thực hiện - CTC không được đệ qui - Cần có các phát biểu gọi tường minh - CTC phải được hoàn thành ở mỗi lần gọi - Điều khiển được chuyển ngay tức thời ở điểm gọi - Trình. .. này gọi là giá trị rác iều nguy hiểm là giá trị rác này vẫn là một giá trị hợp lệ Vì thế chương trình có thể xử lý trên giá trị rác này một cách bình thường và chúng ta không thể kiểm sóat được kết quả xử lý đó • Vì tính chất nghiêm trọng như đã nói trên của biến chưa được khởi tạo, các ngôn ngữ lập trình có thể sử dụng các giải pháp sau để khắc phục - Nếu biến chưa được khởi tạo thì sẽ có giá trị... quá trình sống - Các biến tĩnh có một định danh được kết nối với địa chỉ vùng nhớ lưu trữ biến và được truy xuất trực tiếp thông qua định danh đó • Ưu điểm - Khai báo tường minh - Biến tĩnh tồn tại trong suốt thời gian thực thi chương trình - Kích thước của biến không thay đổi trong suốt quá trình sống • Nhược điểm - Cấp phát ô nhớ dư, gây ra lãng phí ô nhớ - Cấp phát ô nhớ thi u, chương trình thực thi. .. lẫn số thực và số nguyên thì số nguyên được chuyển đổi tự động sang kiểu số thực Câu 30 Anh chị hãy phân biệt các loại phép gán khác nhau - Là tác vụ cơ bản để thay đổi giá trị của đối tượng dữ liệu - Đặc tả tác vụ gán = type1 x type2 → void = type1 x type2 → type3 Z = X + Y Z = X + Y = W ƒ 2 A=B=C Ngôn ngữ Pascal Ngôn ngữ C - Các NNLT khác nhau thì có phép gán khác nhau -Khác nhau về cú pháp... hằng MaxInt Miền giá trị của kiểu số nguyên là tập các số nguyên từ - MaxInt đến MaxInt Giá trị MaxInt được lựa chọn phản ánh giá trị nguyên lớn nhất có thể biểu diễn được trong phần cứng 3ặc tả các phép toán - Các phép tính số học cộng +, trừ -, nhân *, chia / hoặc DIV, lấy phần dư MOD hoặc một số phép toán tương tự khác âm -, dương + - Các phép toán quan hệ bằng, khác, nhỏ hơn, lớn . dụ + Ngôn ngữ bậc thấp Ngôn ngữ máy, Assembly, … + Ngôn ngữ lập trình bậc cao fortran, pascal, C, Cobol…. Câu 7 Họ ngôn ngữ lập trình phổ biến là - Ngôn ngữ máy và ngôn ngữ ASSEMBLY Ngôn ngữ. 12 Trình bày khái niệm siêu ngôn ngữ meta language, và cho biết vai trò của siêu ngôn ngữ trong quá trình thi t kế ngôn ngữ lập trình, lấy ví dụ một vài siêu ngôn ngữ. - Khái niệm Ngôn ngữ. Lịch sử phát triển của ngôn ngữ lập trình • Ngôn ngữ lập trình đầu tiên là ngôn ngữ máy tính mã nhị phân. Ngôn ngữ máy phụ thuộc toàn bộ vào kiến trúc phần cứng và những quy ước khắt khe của - Xem thêm -Xem thêm Đề thi và đáp án môn Nguyên lý những ngôn ngữ lập trình, Đề thi và đáp án môn Nguyên lý những ngôn ngữ lập trình,

nguyen ly ngon ngu lap trinh