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
343,44 KB
Nội dung
CHƯƠNG II Phân tích từ vựng Mục tiêu: Nắm vai trị giai đoạn phân tích từ vựng, sử dụng khái niệm biểu thức qui (regular expression) ô- tô- mát hứu hạn (finite automata) việc biểu diễn nhận biết ngôn ngữ CuuDuongThanCong.com https://fb.com/tailieudientucntt Vai trị phân tích từ vựng • Đây giai đoạn q trình biên dịch • Nhiệm vụ chính: Đọc kí tự vào (input characters) từ chương trình nguồn nhóm lại thành token phục vụ cho giai đoạn phân tích cú pháp sau Source Lexical program analyzer Token Parser Get next token Symbol table CuuDuongThanCong.com https://fb.com/tailieudientucntt • Phân tích từ vựng giúp cho giai đoạn biên dịch dễ dàng hơn, ví dụ: Giai đoạn phân tích cú pháp quan tâm đến khoảng trắng lời trích loại bỏ khi phân tích từ vựng • Giảm đáng kể thời gian đọc chương trình nguồn nhóm thành token nhờ số chương trình xử lí chun dụng CuuDuongThanCong.com https://fb.com/tailieudientucntt Một số khái niệm • Token: Một token tập hợp xâu kí tự có nghĩa xác định, ví dụ identifier token tập hợp tất identifier Token kí hiệu kết thúc (terminal) định nghĩa văn phạm ngơn ngữ, ví dụ: Các từ khố, định danh, tốn tử, hằng, xâu kí tự, dấu ngoặc đơn, dấu phẩy, dấu chấm phẩy • Pattern: Pattern token qui tắc kết hợp kí tự để tạo lên token • Lexeme: Là chuỗi kí tự thoả mãn pattern token CuuDuongThanCong.com https://fb.com/tailieudientucntt • Bảng sau đưa ví dụ token, pattern lexeme Token Thông tin mô tả pattern Lexeme const const const if if if relation =, =, < >= = id pi, count, d2 kí tự, kí tự chữ số num 3.1416, 0, 6.02E2 số literal "computer" kí tự nằm " " ngoại trừ " CuuDuongThanCong.com https://fb.com/tailieudientucntt Đặc tả Token • Xâu kí tự (string): Là chuỗi kí tự từ bảng chữ Kí hiệu xâu rỗng • Một số khái niệm liên quan đến xâu kí tự: Tiền tố (prefix), hậu tố (suffix), xâu (substring), tiền tố thực (proper prefix) • Ngơn ngữ (language): Là tập hợp xâu kí tự xây dựng từ bảng chữ CuuDuongThanCong.com https://fb.com/tailieudientucntt • Các phép tốn ngơn ngữ: Giả sử L M hai ngơn ngữ Hợp (union)của L M: L M={s|s L s M} Ghép (concatenation) L M: LM = { st | s L t Bao đóng Kleen (kleene closure) L: Li L* = i=0 M} (Ghép nhiều L) Bao đóng dương (positive closure) L: L+ = i=1 Li (Ghép nhiều L) CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: L = {A, B, , Z, a, b, , z } D = { 0, 1, , , } L D tập hợp chữ chữ số LD tập hợp xâu bao gồm chữ chữ số L4 tập hợp tất xâu chữ L * tâp hợp tất xâu chữ bao gồm chuỗi rỗng L(L D)* tập hợp tất xâu mở đầu chữ theo sau chữ hay chữ số D+ tập hợp tất xâu gồm nhiều chữ số CuuDuongThanCong.com https://fb.com/tailieudientucntt Biểu thức qui (regular expression) • Mỗi biểu thức qui (BTCQ) r dùng để đặc tả ngơn ngữ L(r) Ví dụ: Trong pascal identifier đặc tả biểu thức qui letter(letter|digit)* • Hai BTCQ r s gọi tương đương (kí hiệu r=s) chúng đặc tả chung ngơn ngữ Ví dụ: (a|b)=(b|a) • Một BTCQ xây dựng từ BTCQ đơn giản cách sử dụng luật CuuDuongThanCong.com https://fb.com/tailieudientucntt • Sau luật định nghĩa BTCQ bảng chữ BTCQ đặc tả { } (tập hợp chứa xâu rỗng) Nếu a a BTCQ đặc tả {a} Giả sử r s BTCQ đặc tả ngôn ngữ L(r) L(s), đó: a) (r)|(s) BTCQ đặc tả L(r) L(s) b) (r)(s) BTCQ đặc tả L(r)L(s) c) (r)* BTCQ đặc tả (L(r))* d) (r) BTCQ đặc tả L(r) CuuDuongThanCong.com 10 https://fb.com/tailieudientucntt • Mục đích lexical analyzer tạo output cặp Regular Expression Token Attribute-value ws if - - if - then then - else else - id id pointer to table entry num num pointer to table entry < relop LT relop GT >= relop GE CuuDuongThanCong.com https://fb.com/tailieudientucntt 17 • Sơ đồ chuyển tiếp (transition diagram): Là bước trung gian minh hoạ tiến trình chuyển đổi trạng thái phân tích từ vựng đọc kí tự • Ta phải xây dựng sơ đồ chuyển tiếp để nhận biết loại token • Một sơ đồ chuyển tiếp bao gồm trạng thái (states) vẽ hình trịn, có trạng thái bắt đầu (start state) Các trạng thái nối với mũi tên ta gọi cạnh (edges) • Trạng thái biểu diễn vịng tròn kép trạng thái chấp nhận (accepting state) thông báo token nhận dạng CuuDuongThanCong.com https://fb.com/tailieudientucntt 18 Ví dụ: Sơ đồ chuyển tiếp cho token toán tử quan hệ relop start < = return (relop, LE) return (relop, NE) > other * return (relop, LT) = return (relop, EQ) > = other CuuDuongThanCong.com return (relop, GE) * return (relop, GT) https://fb.com/tailieudientucntt 19 Ví dụ: Sơ đồ chuyển tiếp cho token identifier letter or digit keyword start letter 10 other * 11 return (gettoken(), install_id()) • Chú ý: - Các từ khố từ bảo vệ lưu trữ sẵn symbol-table - Thủ tục gettoken() tra cứu lexeme symbol-table keyword token tương ứng trả ngược lại token id trả - Thủ tục install_id() tra cứu lexeme symbol-table keyword trả lại giá trị 0, biến có trả lại trỏ tới vị trí symbol-table Nếu lexeme khơng có tạo phần tử symboltable trả trỏ tới thành phần vừa tạo 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Sơ đồ chuyển tiếp cho token unsigned numbers pascal start 12 digit 13 digit digit digit 14 digit 15 E 16 + or - digit digit 20 digit 21 * other 18 19 digit E start 17 digit 22 digit 23 other 24 * digit start 25 digit 26 other 27 * 21 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Sơ đồ chuyển tiếp cho token ws delim start 28 delim 29 other 30 * 22 CuuDuongThanCong.com https://fb.com/tailieudientucntt Cơng cụ phân tích từ vựng Lex • Một số cơng cụ có sẵn cho phép xây dựng phân tích từ vựng dựa biểu thức qui • Một số cơng cụ Lex compiler (một cơng cụ có sẵn Unix) • Sơ đồ sau rõ cách tạo phân tích từ vựng cách sử dụng Lex 23 CuuDuongThanCong.com https://fb.com/tailieudientucntt Lex source program lex.l lex.yy.c input stream Lex compiler Lex.yy.c C a.out compiler a.out sequence of tokens 24 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ơ- tơ- mát hữu hạn (finite automata) • Một nhận dạng ngơn ngữ (recognizer for a language) chương trình nhận đầu vào xâu kí tự x, trả lời "Yes" x thuộc ngôn ngữ trả lời "No" ngược lại • Ơ- tơ- mát hữu hạn sơ đồ chuyển tiếp khái qt hố, đóng vai trị recognizer cho biểu thức qui • Một Ơ- tơ- mát hữu hạn deterministic finite automata (DFA) nondeterministic finite automata (NFA) 25 CuuDuongThanCong.com https://fb.com/tailieudientucntt • "Nondeterministic" nghĩa kí tự đọc vào sơ đồ chuyển tiếp chuyển đến nhiều trạng thái • Cả hai DFA NFA có khả nhận dạng biểu thức qui • DFA nhận dạng nhanh có kích thước lớn NFA tương đương 26 CuuDuongThanCong.com https://fb.com/tailieudientucntt NFA • Một NFA mơ hình tốn học bao gồm: - Một tập hợp trạng thái S - Một trạng thái bắt đầu s0 S - Một tập hợp trạng thái chấp nhận (hoặc trạng thái kết thúc) F S - Một tập hợp kí tự vào bảng chữ - Một hàm chuyển đổi trạng thái move: S x ( { }) S (Một phép chuyển đổi (sk, ) sj nghĩa chuyển từ sk sang sj kí tự đọc vào) • NFA biểu diễn trực tiếp sơ đồ chuyển tiếp 27 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: NFA nhận biết BTCQ (a|b)*abb mơ tả tập S={0, 1, 2, 3}, ={a, b}, s0=0 trạng thái kết thúc (vòng tròn kép) a start a b b b • Hàm chuyển đổi trạng thái theo bảng Trạng thái CuuDuongThanCong.com Kí tự vào a {0, 1} b {0} - {2} {3} https://fb.com/tailieudientucntt 28 Ví dụ: NFA nhận biết biểu thức qui aa* | bb* a start a b b 29 CuuDuongThanCong.com https://fb.com/tailieudientucntt DFA • DFA trường hợp đặc biệt NFA, DFA có thêm dặc diểm sau: - Khơng có chuyển đổi trạng thái ứng với kí tự rỗng - Từ trạng thái s có kí tự x đọc vào, DFA chuyển sang trạng thái s' 30 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: DFA nhận biết BTCQ (a|b)*abb a b a start a b b a b 31 CuuDuongThanCong.com https://fb.com/tailieudientucntt ... Phân tích từ vựng giúp cho giai đoạn biên dịch dễ dàng hơn, ví dụ: Giai đoạn phân tích cú pháp quan tâm đến khoảng trắng lời trích loại bỏ khi phân tích từ vựng • Giảm đáng kể thời gian đọc chương. .. ws delim start 28 delim 29 other 30 * 22 CuuDuongThanCong.com https://fb.com/tailieudientucntt Cơng cụ phân tích từ vựng Lex • Một số cơng cụ có sẵn cho phép xây dựng phân tích từ vựng dựa biểu...Vai trị phân tích từ vựng • Đây giai đoạn q trình biên dịch • Nhiệm vụ chính: Đọc kí tự vào (input characters) từ chương trình nguồn nhóm lại thành token phục vụ cho giai đoạn phân tích cú pháp