Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 33 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Tiêu đề
Phân Tích Từ Vựng
Định dạng
Số trang
33
Dung lượng
169,22 KB
Nội dung
CHƯƠNG PHÂN TÍCH TỪ VỰNG 3.1 Vai trò cuả phân tích từ vựng Token, mẫu, trị từ vựng Bảng 3.1 Bảng danh biểu token Token const if then ralation num id Trị từ vựng const if then < , < =, < >, = , > = 3.14, 2.5, 7.6 abc, ou, bc1… literal ‘abcef’ YÙ nghóa mẫu const if then toán tử quan hệ số chuỗi gồm ký tự chữ số, bắt đầu ký tự chữ chuỗi ký tự nằm dấu ‘ Chương trình nguồn Bộ phân tích từ vựng token yêu cầu token Bộ phân tích CP Bảng danh biểu Hình 3.1 Sự giao tiếp phân tích từ vựng phân tích cú pháp 3.2 CÁC TÍNH CHẤT CỦA TOKEN 3.3 CHỨA TẠM CHƯƠNG TRÌNH NGUỒN Cặp đệm Cấu tạo A : p1 = B * - eof p2 Hình 3.2 Cặp đệm Quy trình hoạt động Giải thuật: if p2 ranh giới nửa đệm then begin lấp đầy N ký hiệu nhập vào nửa bên phải p2 := p2 + 1; end else if p2 tận bên phải đệm then begin lấp đầy N kỳ hiệu nhập vào nửa bên trái đệm chuyển p2 ký tự tận bên trái đệm end else p2 := p2 + 1; Phương pháp cầm canh A B * X EOF - EOF : = N ký tự p1 p2 EOF N ký tự Hình 3.3 Cặp đệm theo phương pháp cầm canh Giải thuật: p2 := p2 + 1; if p2 ^ eof then if p2 ranh giới nửa đệm then begin chất đầy N kỳ hiệu nhập vào nửa bên phải đệm; p2 := p2 + end else if p2 tận bên phải đệm then begin lấp đầy N ký hiệu vào nử bên trái đệm; chuyển p2 đầu đệm end else /* dừng phân tích từ vựng */ 3.4 Đặc tả token Các quy tắc định nghiã biểu thức quy ∈ biểu thức quy, biểu thị cho tập {∈} a ký hiệu thuộc Σ, biểu thị cho tập {a} r s hai biểu thức quy, biểu thị cho L (r) L (s) thì: ø a) (r) | (s) biểu thức quy, biểu thị cho L(r) ∪ L(s) b) (r) (s) biểu thức quy, biểu thị cho L(r) L(s) c) (r)* biểu thức quy, biểu thị cho (L(r))* d) r biểu thức quy, biểu thị cho L(r) Thí dụ 3.1 Cho Σ = {a, b} a|b (a| b) | (b| a) a* Hai biểu thức quy tương đương r s, ký hiệu r = s Định nghóa quy Nếu Σ tập ký hiệu bản, định nghiã quy chuỗi định nghiã có dạng: d1 → r …… dn → r n Thí dụ 3.2 letter → A | B | …|Z | a| b |…| z digit → |1| …| id → letter ( letter | digit)* Thí dụ 3.3 digit → | |… | digits → digit digit* optional_fraction → digits | ∈ optional_exponent → (E (+| - |∈) digits) | ∈ 3.5 Nhận dạng token Thí dụ 3.4 Cho văn phaïm G: stmt → if exp then stmt | if exp then stmt else stmt |∈ exp → term relop term | term term → id | num Định nghóa quy if → if then → then else → else relop → < | | >= | | = id → letter (letter | digit)* num → digit+ (.digit+ | ∈) ( E ( + | - | ∈) digit+ | ∈ ) delim → blank | tab | newline ws → delim+ Từ định nghóa quy ta xây dựng bảng mẫu cho token bảng 3.3 trang 74 3.6 Sơ đồ dịch Miêu tả Bắt đầu > = other Start < = > other = > Hình 3.4 Sơ đồ dịch cho >= = * return (relop, LE) return (relop, NE) * return (relop, LT) return (relop, EQ) = other (relop, EQ) * return (relop, EQ) Hình 3.5 Sơ đồ dịch nhận dạng token relop Lưu ý: - Phần khai báo bao gồm khai báo hằng, biến biểu thị định nghóa quy - Phần quy tắc biên dịch phát biểu có dạng: p1 → {hành vi ngữ nghóa 1} p2 → {hành vi ngữ nghóa 2} …… pn → {hành vi ngữ nghóa n} 3.8 Automat hữu hạn Automat hữu hạn không tất định (NFA) Thí dụ: Cho NFA: Tập trạng thái S = {0, 1,2, 3}; Σ = {a, b}; Trạng thái bắt đầu so = 0; Tập trạng thái kết thúc F = {3} - Biểu thức r# gọi biểu thức quy gia tố Văn phạm biểu thức quy: exp → exp | term exp → term term → term • factor term → factor factor → factor* factor → ( exp ) factor → a factor → b • • • # • b b * a a b Hình 3.16 Cây phân rã biểu thức gia tố (a| b )* abb# ∈ start A ∈ B ∈ a C ∈ F ∈ b ∈ a a b b 4 # D ∈ ∈ Hình 3.17 NFA xây dựng từ ( a| b )* abb# Lưu ý: - Các trạng thái ký hiệu số trạng thái quan trọng; Các trạng thái ký hiệu chữ trạng thái không quan trọng - Ở thí dụ 3.6 trạng thái A C có số trạng thái quan trọng 2,4,7 , (H 3.17) 1,2,3: A = {0,1,2,4,7} C = {1,2,4,5,7} F Bảng 3.6 Các quy tắc để tính ba hàm nullable, firstpos, lastpos Nút n nullable (n) n nút có tên ∈ true n nút có tên vị trí i | c1 n c2 ° n c1 c2 ∗ c1 n firstpos (n) lastpos (n) false {i} {i} nullable(c1) or nullable(c2) firstpos(c1) ∪ firstpos(c2) lastpos(c1) ∪ if nullable(c1) if nullable(c2) then lastpos(c1) ∪ lastpos(c2) else lastpos(c2) firstpos(c1) lastpos(c1) nullable(c1) and then firstpos(c1) ∪ nullable(c2) firstpos(c2) else firstpos(c1) true lastpos(c2) Các quy tắc tính hàm followpos (n): Nếu nút n nút cat với bên trái c1, bên phải c2 i vị trí lastpos(c1), tất vị trí first(c2) cho vào followpos(i) Nếu n nút star i vị trí lastpos(n) tất vị trí firstpos(n) cho vào followpos(i) Thí dụ 3.10 Ta xác định DFA cho biểäu thức (a | b)* abb {1,2,3} {1,2,3} {6} {5} {1,2,3} {4} {6} # {6} {1,2,3} {3} {5}a{5} {1,2} ∗ {1,2} {4}a{4} {3}a{3} {1,2} {1,2} {1}a {1} {2}a {2} Hình 3.19 Tính hàm nullable, firstpos, lastpos cho nút phân tích biểu thức ( a| b )* abb Sau ta tính hàm followpos Bảng 3.7 trị followpos nút (H.3.19) Nút followpos {1,2,3} {1,2,3} {4} {5} {6} _ Giải thuật 3.5 Xây dựng DFA từ biểu thức quy Nhập: Biểu thức quy r Xuất: DFA gọi D, nhận dạng ngôn ngữ L( r) Phương pháp :1 Xây dựng phân tích cho BTCQ gia tố r# Tính hàm nullable, firstpos, lastpos followpos cho nút phân tích Xây dựng trạng thái, hàm truyền bảng truyền cho D thủ tục (mô 3.5) Thủ tục tạo tập trạng thái DFA: Lúc đầu D có trạng thái bắt đầu firstpos(root) , chưa đánh dấu Mô 3.5 Thủ tục tạo tập while có trạng thái T chưa đánh dấu, tập trạng thái D begin đánh dấu T; for với ký hiệu nhập a do; begin với U tập vị trí followpos (p), p vị trí T, cho ký hiệu vị trí p a; if U không rỗng chưa có tập trạng thái D then begin thêm U vào tập trạng thái D trạng thái chưa đánh dấu; D[T, a] := U; end; end; end; Lưu ý: trạng thái kết thúc D có chứa vị trí y Thí dụ 3.10 Xây dựng DFA từ btcq ( a| b )* abb (trang 103 -104) Tối thiểu số trạng thái DFA - Khái niệm DFA đầy đủ, trạng tái chết d - Chuỗi w phân biệt trạng thái s với trạng thái t Thí dụ: DFA (H.3.14, tr 90), xuất phát từ C để nhận dạng w=bb không đến trạng thái chấp nhận, ngược lại từ B đến E trạng thái chấp nhận Giải thuật 3.6 Tối thiểu số trạng thái DFA Nhập: DFA, gọi M có S, Σ, s0, F M DFA đầy đủ Xuất: DFA, gọi M’ chấp nhận ngôn ngữ M, với số trạng thái nhỏ Phương pháp: 1.Tạo Π khởi đầu có nhóm: trạng thái kết thúc F, trạng thái không kết thúc S – F Áp dụng thủ tục (mô 3.6) để tạo Πnew Nếu Πnew = Π Πfinal = Π, tiếp tục bước 4, ngược lại lặp lại bước 2, với Π = Πnew Chúng ta chọn nhóm trạng thái đại diện trạng thái M’ Nếu M’ có trạng thái chết d loại khỏi M’ Tất truyền đến trạng thái d không xác định Mô 3.6 Giải thuật tạo Πnew for với nhóm G Π begin - chia G thành nhóm nhỏ cho hai trạng thái s t G nhóm nhỏ truyền tất ký hiệu nhập a từ s t đến trạng thái nhóm Π; - ta thay G nhóm nhỏ vừa tạo nên, cho chúng vào Πnew ; end; Thí dụ 3.11 Cho DFA (H 3.14, tr 90) Cách giải tr 106 – 107 Các phương pháp nén bảng truyền FA Thu giảm hàng cột dư thừa – 0000 222222222 – – y next yrmap 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 2 -2 -1 5 -1 -1 -1 3 4 Hình 3.21 Bảng truyền nén phương pháp thu giảm hàng cột dư thừa Nén cặp ynext • ‘0’,3 ‘0’,1 ‘1’,1 ‘2’,1 ‘3’,1 ‘4’,2 ‘5’,2 ynext • ynext • ‘0’,2 ‘1’,2 ‘2’,3 ‘3’,4 ‘4’,1 ‘5’,1 ynext • ‘0’,1 ‘1’,1 ‘2’,2 ‘3’,2 ‘4’,2 ‘5’,2 ‘6’,2 ynext • ‘0’,4 ‘1’,4 ‘2’,4 ‘3’,2 ‘4’,2 ‘5’,2 ‘6’,2 ynext • ‘0’,2 ‘1’,2 ‘2’,2 ‘3’,2 ‘4’,1 ‘5’,1 ynext -1-1…12-1… 1111111111-1…-1 5-1… Hình 3.22 Bảng truyền nén theo phương pháp nén cặp Mô 3.7 Giải thuật tìm trạng thái bảng truyền nén row := ynext [t]; I := row^[0], /* row^ ma trận chieàu ynext t */ if I = then begin c := ord (a) s := row^[c]; /* s trạng thái */ end else begin while (a < > row^ [i] chart) and (i < I) i := i + 1; if a = row^[i] chart then s := row^[i] State else writen (‘sai – lỗi từ vựng’); end; 3.11 Thiết kế sinh phân tích từ vựng Đặc tả lex Chương trình mô FA Trình biên dịch bảng truyền Lex a) Bộ đệm nhập Chương trình mô FA Bảng truyền b) Hình 3.23 Trình biên dịch Lex Bộ phân tích từ vựng Mẫu so trùng sở NFA N(p1) ∈ so ∈ N(pi) ∈ N(pn) Hình 3.24 NFA tao từ đặc tả LEX .. .Chương trình nguồn Bộ phân tích từ vựng token yêu cầu token Bộ phân tích CP Bảng danh biểu Hình 3. 1 Sự giao tiếp phân tích từ vựng phân tích cú pháp 3. 2 CÁC TÍNH CHẤT CỦA TOKEN 3. 3 CHỨA TẠM CHƯƠNG... lỗi từ vựng? ??); end; 3. 11 Thiết kế sinh phân tích từ vựng Đặc tả lex Chương trình mô FA Trình biên dịch bảng truyền Lex a) Bộ đệm nhập Chương trình mô FA Bảng truyền b) Hình 3. 23 Trình biên dịch. .. Thí dụ 3. 10 Ta xác định DFA cho biểäu thức (a | b)* abb {1,2 ,3} {1,2 ,3} {6} {5} {1,2 ,3} {4} {6} # {6} {1,2 ,3} {3} {5}a{5} {1,2} ∗ {1,2} {4}a{4} {3} a {3} {1,2} {1,2} {1}a {1} {2}a {2} Hình 3. 19 Tính