PHÂN TÍCH từ VỰNG (CHƯƠNG TRÌNH DỊCH SLIDE)

31 55 0
PHÂN TÍCH từ VỰNG (CHƯƠNG TRÌNH DỊCH SLIDE)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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ữ 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 • 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 khơng phải 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 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 • Bảng sau đưa ví dụ token, pattern lexeme Token Lexeme Thơng tin mô tả pattern 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ừ " Đặ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ữ • 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  M } Bao đóng Kleen (kleene closure) L:    L* = i=0 Li (Ghép nhiều L)  Bao đóng dương (positive closure) L:   L+ = i=1 Li (Ghép nhiều L) Ví dụ: L = {A, B, , Z, a, b, , z }  và  D = { 0, 1, , , } 1.   L  D tập hợp chữ chữ số 2.  LD tập hợp xâu bao gồm chữ chữ số 3.  L4 tập hợp tất xâu chữ 4.  L * tâp hợp tất xâu chữ bao gồm chuỗi rỗng 5.  L(L  D)* tập hợp tất xâu mở đầu chữ theo sau chữ hay chữ số 6.  D+ tập hợp tất xâu gồm nhiều chữ số 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 • 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) 10 • 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 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 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 return (relop, GE) * return (relop, GT) 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ạo20 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 Ví dụ: Sơ đồ chuyển tiếp cho token ws delim start 28 delim 29 other 30 * 22 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 Lex source program lex.l lex.yy.c input stream Lex compiler C compiler a.out Lex.yy.c a.out sequence of tokens 24 Ơ- 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 • "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 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 khơng có kí tự đọc vào) • NFA biểu diễn trực tiếp sơ đồ chuyển tiếp 27 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 Kí tự vào a b {0, 1} {0} - {2} 28 Ví dụ: NFA nhận biết biểu thức qui aa* | bb* a a  start b  b 29 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 Ví dụ: DFA nhận biết BTCQ (a|b)*abb a b start a a b b a b 31 ... Symbol table • 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 khơng phải 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... 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ừ. ..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

Ngày đăng: 29/03/2021, 07:21

Mục lục

    CHƯƠNG II Phân tích từ vựng

    Vai trò của phân tích từ vựng

    Một số khái niệm

    Biểu thức chính qui (regular expression)

    Định nghĩa chính qui (regular definition)

    Công cụ phân tích từ vựng Lex

    Ô- tô- mát hữu hạn (finite automata)

Tài liệu cùng người dùng

Tài liệu liên quan