Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 43 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
43
Dung lượng
292 KB
Nội dung
Chương ĐẶC TẢ HÌNH THỨC NGÔN NGỮ LẬP TRÌNH Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Nội dung Bộ từ vựng Cú pháp hình thức Ngữ nghĩa hình thức Chương trình dịch Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Đặc tả hình thức Ngôn ngữ lập trình hệ thống gồm kí hiệu qui tắc kết hợp kí hiệu thành cấu trúc có ý nghĩa Phần cú pháp qui định kết hợp kí hiệu, phần ngữ nghĩa qui định ý nghĩa kết hợp Cú pháp ngữ nghĩa ngôn ngữ lập trình xác định cách hình thức cách sử dụng hệ thống kí hiệu khác, thực chất ngôn ngữ (siêu ngôn ngữ) Siêu ngôn ngữ(meta language): ngôn ngữ sử dụng để xác định cú pháp ngữ nghĩa ngôn ngữ lập trình Đặc tả hình thức ngôn ngữ lập trình (Formal description) cung cấp mô tả xác ngôn ngữ lập trình Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Đặc tả hình thức Bộ từ vựng Cú pháp (Văn phạm) Ngữ nghĩa Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH 2.1 Đặc tả từ vựng Ngôn ngữ tập hợp chuỗi ký tự từ alphabet (A…Z, a…z, $,@,0 9, +,_,*,/,=,…) Token: Một token tập hợp xâu kí tự có nghĩa xác định Ví dụ: Các từ khoá, định danh, toán tử, hằng, xâu kí tự, … Pattern: Pattern token qui tắc kết hợp kí tự để tạo nên token Lexeme: Là chuỗi kí tự thoả mãn pattern token Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Token, Lexeme, pattern Token Lexeme const if relation const if =, =, id pi, count, d2 num literal 3.1416, 0, 6.02E2 "computer" Thông tin mô tả pattern const if < >= = Một kí tự, kí tự chữ số Bất kì số Các kí tự nằm " " ngoại trừ \" Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Biểu thức quy (regular expression) Để biểu diễn token người ta dùng biểu thức quy Một biểu thức quy chuỗi miêu tả chuỗi khác, theo quy tắc cú pháp định BTCQ hiểu ngôn ngữ nhỏ dùng cho mục đích: để tìm chuỗi biểu thức chuỗi lớn VD: email /^(?:\w+\.?)*\w+@(?:\w+\.)+\w+$/ Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Dùng biểu thức quy để biểu diễn tokens a : có xuất ký tự 'a' ab : có xuất ký tự 'b' theo sau ký tự 'a' (theo thứ tự) a|b : có 'a' có 'b' a* : xuất nhiều không xuất ký tự 'a' a+ : xuất nhiều ký tự 'a' (a)+ == a(a)* a3 : xuất ký tự a a? : xuất a không xuất (a)? = a | ∈ VD: biểu diễn số nguyên: digits = '0' | '1' | '2' | '3' | '4 | '5' | '6' | '7' | '8' | '9' integer = '−'?(digits)+ Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Định nghĩa qui Để thuận tiện mặt kí hiệu, ta dùng định nghĩa qui (ĐNCQ) để đặt tên cho BTCQ Một ĐNCQ dãy định nghĩa có dạng d1 → r1 d2 → r2 dn → rn Trong di tên, ri BTCQ tập kí hiệu Σ∪ {d1, d2, di-1} Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Ví dụ ĐNCQ định danh pascal letter → A | B | | Z | a | b | | z digit → | | | id → letter (letter | digit)* Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Phân loại chương trình dịch Gồm hai loại – Trình biên dịch (compiler):chương trình nguồn 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 thực thi Trong hệ thống biên dịch liệu chương trình nguồn xử lý hai thời điểm khác Dữ liệu Chương trình nguồn Chương trình biên dịch Thời gian dịch Chương trình đối tượng Máy tính Thời gian thực thi Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Kết Phân loại chương trình dịch (tiếp) – Trình thông dịch (interpreter): Chương trình thông dịch đọc chương trình nguồn theo lệnh phân tích thực (VD: DOS) – Một kiểu khác hệ thống thông dịch ngôn ngữ nguồn chuyển sang ngôn ngữ trung gian, sau máy ảo (virtual machine) thực chuyển ngôn ngữ trung gian sang ngôn ngữ máy (VD Java) Dữ liệu Chương trình nguồn CT thông dịch Kết Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Trình thông dịch Java Text editor Operating system Source code (filename.java) Java virtual Machine Java interpreter Java compiler Bytecodes (classname.java) Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Ngôn ngữ biên dịch thông dịch Ngôn ngữ biên dịch ngôn ngữ mà chương trình dịch cho chương trình biên dịch, ví dụ Fortran, Pascal, C, C++… Ngôn ngữ thông dịch ngôn ngữ mà chương trình dịch cho chương trình thông dịch, ví dụ LISP, APL, Java,… Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Các giai đoạn trình biên dịch Một chương trình dịch chia làm giai đoạn: – – – – – – Phân tích từ vựng Phân tích cú 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ổng hợp Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Phân tích từ vựng Chương trình nguồn chương trình dịch chuỗi kí hiệu Bộ phân tích từ vựng dò kí hiệu chuỗi kí hiệu chương trình nguồn, gom chúng lại thành nhóm kí hiệu có ý nghĩa gọi token, từ khóa, tên biến, hằng, kí hiệu tác vụ 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) := becomes(kí hiệu tác vụ gán) a ident(định danh) * times (kí hiệu tác vụ nhân) number (số/hằng) + plus(kí 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) Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Phân tích từ vựng Source Lexical program analyzer Token Parser Get next token Symbol table Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Bảng danh hiệu (symbol table) c … a … b … Danh hiệu Các thuộc tính Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Phân tích cú pháp Bộ phân tích cú pháp phân tích chuỗi token phân tích từ vựng cung cấp, để thu cấu trúc phức tạp chương trình nguồn như: biểu thức, phát biểu, chương trình Các cấu trúc thể dạng cú pháp với nút token Ví dụ cú pháp thu phát biểu gán “c:=a+b*7“ Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH 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 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 từ tố (token), ví dụ thông tin giá trị, thông tin loại hằng, biến hay hàm cho tên BPTNN phân tích ý nghĩa cấu trúc cú pháp tạo nên chương trình nguồn VD biểu thức gán c:=a+b*7, BPTNN xác định ý nghĩa tác vụ :=, +, *, kiểm tra xem tác vụ có nhận đối số thuộc kiểu thích hợp hay không dựa vào bảng ký hiệu Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Sinh mã trung gian Sau phân tích cú pháp ngữ nghĩa, trình biên dịch tạo dạng biểu diễn mã trung gian (mã tứ, mã địa chỉ) chương trình nguồn VD kết phân tích ngữ nghĩa phép gán biểu diễn mã tứ dạng (, , ) sau: CNV (7, , t 1) (chuyển sang giá trị thực) * (id3, t1,t2) (t2=id3*t1) + (id2, t2, t3) (t3=id2+t2) ASS (t3, ,id1) (gán giá trị t3 id1) Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Tối ưu mã Giai đoạn tối ưu mã trung gian để tạo chương trình đích tối ưu tốc độ thực thi nhớ sử dụng VD tối ưu mã cho mã trung gian biểu thức c:=a + b*7 là: * (id3, 7.0, t1) + (id2, t1, id1) Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Sinh mã Giai đoạn cuối sinh mã đích thông thường dạng mã máy hay mã Assembly Các vị trí vùng nhớ chọn lựa cho biến chương trình sử dụng Sau lệnh trung gian dịch thành chuỗi lệnh mã máy Vấn đề định việc gán biến cho ghi VD mã assembly phép gán c:=a+b*7 MOV Reg, id3; MUL Reg, 7.0; ADD Reg, id2; MOV id1, Reg; Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Phân tích ngữ nghĩa (tiếp) Việc phân tích ngữ nghĩa phải dựa vào luật ngữ nghĩa kèm với luật cú pháp để thực chức sinh thuộc tính cho từ tố kiểm tra lỗi ngữ nghĩa Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Ví dụ Quá trình dịch phép gán c:= a + b * Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH ... ngữ( meta language): ngôn ngữ sử dụng để xác định cú pháp ngữ nghĩa ngôn ngữ lập trình Đặc tả hình thức ngôn ngữ lập trình (Formal description) cung cấp mô tả xác ngôn ngữ lập trình Nguyễn Thị... pháp ngôn ngữ – Ngữ nghĩa hình thức giúp cho trình sinh tự động trình thông dịch biên dịch 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 xác ngữ. ..Nội dung Bộ từ vựng Cú pháp hình thức Ngữ nghĩa hình thức Chương trình dịch Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH Đặc tả hình thức Ngôn ngữ lập trình hệ thống gồm kí hiệu qui