Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 31 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
31
Dung lượng
581,01 KB
Nội dung
CHƯƠNG TRÌNH DỊCH BÀI 3: PHÂN TÍCH TỪ VỰNG Nội dung Vai trị phân tích từ vựng (PTTV) Nhiệm vụ phân tích từ vựng Các mục tiêu phân tích từ vựng Đầu vào đầu phân tích từ vựng Các bước xây dựng phân tích từ vựng Bộ phân tích từ vựng đơn giản Biểu diễn từ vựng biểu thức quy Xử lý ngoại lệ Bài tập thảo luận 7/21/2014 TRƯƠNG XUÂN NAM Phần Vai trò phân tích từ vựng (PTTV) 7/21/2014 TRƯƠNG XUÂN NAM Cấu trúc chương trình dịch Mã nguồn Phân tích từ vựng Phân tích cú pháp Bộ quản lý kí hiệu Phân tích Phân tích ngữ nghĩa Sinh mã trung gian Tối ưu mã trung gian Tổng hợp Sinh mã đích Mã đích 7/21/2014 TRƯƠNG XN NAM Vai trị phân tích từ vựng Phân tích từ vựng pha trình dịch PTTV nhận liệu đầu vào mã nguồn cần dịch chuyển đổi thành dãy từ tố (cùng với thơng tin kèm theo) Có nhiều quan điểm tương tác PTTV phân tích cú pháp Thiết kế cổ điển: coi PTTV tiến trình song song phụ thuộc vào phân tích cú pháp Thiết kế đại: tách PTTV thành module độc lập, khơng có liên quan tới phân tích văn phạm 7/21/2014 TRƯƠNG XN NAM Vai trị phân tích từ vựng Trong thiết kế cổ điển, PTTV đóng vai trị cung cấp liệu cho phân tích cú pháp Bộ phân tích cú pháp yêu cầu PTTV lấy từ tố Bộ PTTV đọc chương trình nguồn từ đầu từ vị trí phân tích lần gọi trước, tách lấy từ tố trả lại cho phân tích cú pháp Quá trình lặp lại hết mã nguồn gặp lỗi 7/21/2014 TRƯƠNG XUÂN NAM Vai trò phân tích từ vựng Trong thiết kế hơn, PTTV có xu hướng đứng tách độc lập, việc có nhiều lợi ích Thiết kế theo hướng module hóa, đơn giản Tăng hiệu hoạt động PTTV, chẳng hạn PTTV độc lập xử lý macro, xử lý khoảng trắng, ghi chú,… Tối ưu hoạt động trình dịch, PTTV sau hoạt động giải phóng tài nguyên mà sử dụng thay giữ lại lúc với phân tích cú pháp Xử lý số lỗi từ vựng mà không cần phân tích cú pháp 7/21/2014 TRƯƠNG XUÂN NAM Phần Nhiệm vụ phân tích từ vựng 7/21/2014 TRƯƠNG XUÂN NAM Nhiệm vụ phân tích từ vựng PTTV đóng vai trị chuẩn hóa liệu đầu vào, ngồi giúp hạn chế lỗi (viết sai luật, sai từ khóa, sai cấu trúc,…) Các nhiệm vụ (nhất thiết phải có để đảm bảo hoạt động chương trình dịch): Đọc chương trình nguồn, loại bỏ kí hiệu vơ ích (khoảng trắng, tab, xuống dịng, ghi chú,…) Phát số lỗi từ vựng Xác định nội dung từ vựng Xác định từ loại từ vựng Đưa số thơng tin thuộc tính từ vựng 7/21/2014 TRƯƠNG XUÂN NAM Nhiệm vụ phân tích từ vựng Để hỗ trợ cho việc báo lỗi có, PTTV cịn ghi nhận lại thông tin ngữ cảnh để giúp thông báo lỗi trực quan (chẳng hạn ghi lại số dòng số cột từ vựng, giúp báo lỗi xác hơn) Bộ PTTV nhiều thiết kế thực công việc hỗ trợ cho soạn thảo mã nguồn Hỗ trợ hàm tiền xử lý (các macro văn bản) Hỗ trợ việc định dạng mã nguồn, khiến việc viết mã trở nên trực quan Hỗ trợ tính gợi nhớ viết mã, giúp việc viết mã sai sót 7/21/2014 TRƯƠNG XUÂN NAM 10 Phần Các bước xây dựng phân tích từ vựng 7/21/2014 TRƯƠNG XUÂN NAM 17 Các bước xây dựng PTTV Mô tả loại từ vựng ngôn ngữ nguồn, mô tả dạng ngơn ngữ tự nhiên Đặc tả từ loại biểu thức quy Lựa chọn cách xử lý tình lỗi, ngoại lệ Lựa chọn phương pháp phân tích từ vựng phù hợp Sinh PTTV công cụ sinh tự động Tự viết PTTV theo từ loại Viết PTTV đồ thị chuyển • Vẽ đồ thị chuyển cho biểu thức quy • Kết hợp đồ thị chuyển thành đồ thị chuyển 7/21/2014 TRƯƠNG XUÂN NAM 18 Phần Bộ phân tích từ vựng đơn giản 7/21/2014 TRƯƠNG XUÂN NAM 19 Bộ phân tích từ vựng đơn giản Bài toán: viết PTTV cho biểu thức Excel Bắt đầu dấu “=” (đơn giản) biểu thức chứa thành phần sau Các số nguyên dương Các phép toán: +, -, *, / Các cặp ngoặc (nâng cấp) biểu thức chứa 7/21/2014 Địa ô: A10, C6,… Số âm Số thực Lời gọi hàm: SUM, IF, COUNT, AND, OR Địa tuyệt đối: $A$10, $C6,… Chuỗi (nằm cặp dấu nháy kép) TRƯƠNG XUÂN NAM 20 Phần Biểu diễn từ vựng biểu thức quy 7/21/2014 TRƯƠNG XUÂN NAM 21 Từ vựng Từ loại (hay từ tố) cần mô tả cách chặt chẽ để tránh nhập nhằng Ví dụ: Chữ cái: chữ bảng chữ tiếng Anh Chữ số: chữ số hệ thập phân Tên: chuỗi, bắt đầu chữ cái, có chữ chữ số theo sau Số nguyên: dãy chữ số Phép toán: +, -, *, / Phép so sánh: =, ==, != 7/21/2014 TRƯƠNG XUÂN NAM 22 Biểu thức quy (BTCQ) Biểu thức quy (regular expression) lựa chọn phổ biến để mô tả từ vựng Phương pháp mô tả ngôn ngữ cách chặt chẽ Có thuật tốn xử lý hiệu để kiểm tra từ vựng có thuộc ngơn ngữ sinh biểu thức quy hay khơng Kí hiệu quy ước 7/21/2014 | () * + ? lựa chọn nhóm thành phần lặp lại không, nhiều lần lặp lại nhiều lần lặp lại không lần TRƯƠNG XUÂN NAM 23 Biểu diễn từ vựng BTCQ Ví dụ sử dụng BTCQ để mô tả từ vựng: Chữ Chữ số Tên Số nguyên Phép toán Phép so sánh =A|B|…|Z|a|b|…|z =0|1|…|9 = Chữ ( Chữ | Chữ số ) * = ( Chữ số ) + =+|-|*|/ = < | | >= | == | != Cách ghi BTCQ đơi lúc cịn mở rộng sau: [abcd]: tương đương với (a|b|c|d) [a-z]: tương đương với (a|b|c|…|z) [^a-c]: kí hiệu khơng phải a, b c 7/21/2014 TRƯƠNG XUÂN NAM 24 Phần Xử lý ngoại lệ 7/21/2014 TRƯƠNG XUÂN NAM 25 Xử lý ngoại lệ Nhiều ngơn ngữ lập trình phải lựa chọn việc thân thiện với người viết tính chặt chẽ Nếu ngơn ngữ chặt chẽ, khơng có ngoại lệ lại thân thiện với lập trình viên Nếu ngơn ngữ thân thiện với lập trình viên dễ nhập nhằng Chẳng hạn: Chuỗi “a >= b;” Nên tách thành “a | >= | b | ;” Hay tách thành “a | > | = | b |;” 7/21/2014 TRƯƠNG XUÂN NAM 26 Xử lý nhập nhằng Chiến lược xử lý nhập nhằng đơn giản nhất: ưu tiên từ vựng dài (chiến lược tham lam) Không phải lúc chiến lược Ngôn ngữ C++: “Vector v(10);” Trong tình ưu tiên chuỗi dài từ vựng nhận “>>” Trong thực tế dấu “>” hợp lý Trong nhiều tình PTTV sử dụng thơng tin ngữ cảnh để có định phù hợp 7/21/2014 TRƯƠNG XUÂN NAM 27 Xử lý gặp lỗi Bộ PTTV xử lý phát lỗi? Cách xử lý đơn giản ngừng lại báo lỗi cho người sử dụng Nhưng PTTV tiếp tục hoạt động tốt hơn, chẳng hạn phát thêm nhiều lỗi nhắc người dùng sửa lượt Nhiều chiến lược muốn xây dựng PTTV có khả chịu lỗi Chiến lược áp dụng phổ biến xóa bỏ qua kí tự lỗi gặp kí hiệu bắt đầu phù hợp (dấu trống, dấu xuống dòng,…) 7/21/2014 TRƯƠNG XUÂN NAM 28 Phần Bài tập thảo luận 7/21/2014 TRƯƠNG XUÂN NAM 29 Bài tập thảo luận Viết biểu thức quy để mô tả: Số thực viết dạng khoa học (-1.2e+1, 2.3E-10,…) Số thực (viết tất dạng) Các số nhị phân lẻ Các số nhị phân lẻ lớn Các chuỗi số nhị phân khơng có chuỗi 101 Mơ tả ngơn ngữ sinh biểu thức quy: 7/21/2014 1(0|1)+1 ((|1)0*)+ (0|1)*0(0|1)(0|1) 0*10*10*10* TRƯƠNG XUÂN NAM 30 Bài tập thảo luận Sử dụng ngôn ngữ C, C++, C# Java; viết khai báo class (hoặc tương đương) phù hợp cho việc mô tả thông tin từ vựng (được đề cập slide 20) Với từ “SUM” toán phân tích biểu thức Excel, liệu tương ứng class nào? Từ class kết trên, viết khai báo hợp lý cho đầu phân tích từ vựng Với biểu thức “=if(a1>c2,a1,c1)”, kết trả PTTV nào? TRƯƠNG XUÂN NAM 31 ... * = ( Chữ số ) + =+ |-| *|/ = < | | >= | == | != Cách ghi BTCQ đơi lúc cịn mở rộng sau: [abcd]: tương đương với (a|b|c|d) [a-z]: tương đương với (a|b|c|…|z) [^a-c]: kí hiệu a, b c... NAM 29 Bài tập thảo luận Viết biểu thức quy để mô tả: Số thực viết dạng khoa học (-1 .2e+1, 2.3E-10,…) Số thực (viết tất dạng) Các số nhị phân lẻ Các số nhị phân lẻ lớn Các chuỗi số nhị... Bắt đầu dấu “=” (đơn giản) biểu thức chứa thành phần sau Các số nguyên dương Các phép toán: +, -, *, / Các cặp ngoặc (nâng cấp) biểu thức chứa 7/21/2014 Địa ô: A10, C6,… Số âm Số thực Lời gọi