Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin
Trang 1Nguyễn Phương Thái
Bộ môn Khoa học Máy tính
http://www.coltech.vnu.vn/~thainp/
Trang 2Nội dung
Phân tích từ vựng: từ tố, từ vị, mẫu
REs, FA (DFA, NFA)
Nâng cao: REs NFA; NFA DFA; DFA state DFA
minimal- Một số bài tập
Trang 3Vai trò của hệ phân tích từ vựng (scanner)
Từ tố trong ngôn ngữ lập trình cũng giống như từ
trong ngôn ngữ tự nhiên
Hệ phân tích từ vựng hoạt động như một thủ tục
được gọi bởi hệ phân tích cú pháp khi nó cần một từ
tố mới trong dòng vào
(từ tố)
(lỗi từ vựng) (mã nguồn)
(cây cú pháp)
Trang 4 các hằng (nguyên, thực, logic, xâu)
Tập từ tố phụ thuộc vào ngôn ngữ lập trình: chẳng hạn
như trong C toán tử gán là = còn trong Pascal là :=
Tương tự, trong ngôn ngữ tự nhiên, các loại từ tố: động
Trang 5Từ vị (lexeme)
Từ vị của một từ tố: chuỗi ký tự tạo thành từ tố
Ví dụ:
Trang 6Mẫu (từ tố)
Mẫu: luật mô tả tập các từ vị mà có thể biểu diễn một từ tố cụ thể
Mẫu khớp với mỗi xâu ký tự trong tập đó
INTLITERAL a string of decimal digits 127, 0
FLOATLITERAL fill a verbal spec here for C! 127.1, 1, 1.1e2
ID a string of letters, digits and
underscores beginning with
a letter or underscore
sum, line num
Trang 7Các biểu thức chính qui (REs) cho
số nguyên và số thực trong C
Trang 8Các máy hữu hạn trạng thái (FSMs) cho số nguyên và số thực
Trang 9Nội dung
Phân tích từ vựng: từ tố, từ vị, mẫu
REs, FA (DFA, NFA)
Nâng cao: REs NFA; NFA DFA; DFA state DFA
minimal- Một số bài tập
Trang 10REs, DFA và NFA
Định nghĩa REs, DFA và NFA
REs NFA (⇒ Thompson’s construction, Algorithm 3.3,
Red Dragon/Algorithm 3.23, Purple Dragon)
NFA DFA (⇒ subset construction, Algorithm 3.2, Red
Dragon/Algorithm 3.20, Purple Dragon)
DFA minimal-state DFA (⇒ state minimisation, Algorithm 3.6, Red Dragon/Algorithm 3.39, Purple Dragon)
Trang 11Ứng dụng của biểu thức chính qui
Bất cứ nơi nào mà mẫu văn bản cần được mô tả
Hệ thống, cơ sở dữ liệu và quản trị mạng Unix: grep, fgrep, egrep, sed, awk
Các văn bản HTML: Javascript và VBScript
Perl: J Friedl, Mastering Regular Expressions, O’reilly, 1997
Mô tả từ tố cho các chương trình sinh hệ phân tích
từ vựng (lex, JLex, v.v.)
http://www.robotwisdom.com/net/regexres.html
Trang 12Ứng dụng của ôtômát hữu hạn
Thiết kế phần cứng (tối thiểu hóa trạng thái tối ⇒
thiểu hóa giá thành)
Trang 13Bộ chữ cái, xâu ký tự và ngôn
ngữ
Bộ chữ cái ∑: tập hữu hạn ký hiệu
Bộ chữ cái nhị phân {0,1} (cho ngôn ngữ máy)
Bộ chữ cái ASCII (cho các ngôn ngữ bậc cao)
Xâu ký tự: chuỗi hữu hạn ký hiệu thuộc ∑
Độ dài |s| của xâu s: số lượng ký hiệu trong s
ε: xâu rỗng (| ε | = 0)
Ngôn ngữ: tập các xâu trên ∑; hai trường hợp đặc
biệt:
∅: tập rỗng
Trang 15Các thuật ngữ về xâu ký tự (Figure 3.7 of Text)
Prefix of s (tiền tố của s) a string obtained by removing
0 or more trailing symbols of s Suffix of s (hậu tố của s) a string obtained by removing
0 or more leading symbols of s Substring of s (xâu con của s) a string obtained by deleting
a prefix and a suffix from s proper prefix
suffix, substring of s (tiền tố, hậu tố, xâu
Trang 16key word keyword
java script javascript
ε is the identity: εx = xε = x
Trang 17Các phép toán trên ngôn ngữ
(Figure 3.8 of Text)
Trang 18Ví dụ về các phép toán trên
ngôn ngữ
Trang 19Ví dụ về các phép toán trên
ngôn ngữ
Trang 20Các biểu thức chính qui – Regular
Expressions (REs) – trên bộ chữ cái
∑
Cơ sở qui nạp:
1 ε là một RE, khi đó ngôn ngữ chính qui – regular language
(RL) – RL là {ε}
2 a ∑ là một RE, khi đó RL là {a} ∈
Bước qui nạp: Giả sử r và s là các RE, các RL tương ứng là L(r) and L(s) Khi đó:
1 (r)|(s) là một RE, RL là L(r) L(s) ∪
2 (r)(s) là một RE, RL là L(r)L(s)
3 (r) là một RE, RL là L(r) ∗ ∗
4 (r) là một RE, RL là L(r)
Trang 21Thứ tự ưu tiên và tính kết hợp của các toán tử “chính qui”
Trang 22= {0}{ ε, 0, 1, 00, 01, 10, 11, } = {0, 00, 01, 000, 001, 010, 011, }
Trang 23Các ví dụ khác: ∑ = {0, 1}
Trang 24Giải thích một số ký hiệu
Một hay nhiều instance +: r+ = rr∗
Ngôn ngữ (L(r))+
Có cùng thứ tự ưu tiên và tính kết hợp như ∗
Không hay một instance ?: r? = r|ε
Ngôn ngữ L(r) { ∪ ε}
Viết (r)? để chỉ nhóm (vd (12)?)
Các lớp ký tự:
[A − Za − z ][A − Za − z0 − 9 ]∗
Trang 25Các biểu thức chính qui cho VC
(hay C)
Trong đặc tả của VC, chữ cái gồm cả “_”
Trong Java, chữ cái và chữ số thuộc tập Unicode Do đó các định danh
có thể là:
Trang 26Các văn phạm chính qui cho số
nguyên và số thực trong VC
Trang 27Ôtômát hữu hạn (hay máy hữu hạn trạng thái)
Một ôtômát hữu hạn là một bộ 5:
(∑, S, T, F, I)trong đó
Trang 28Biểu diễn và chấp nhận
Đồ thị chuyển:
Chấp nhận: Một Ôtômát hữu hạn chấp nhận một xâu vào x nếu và chỉ nếu có đường đi nào đó trong đồ thị chuyển từ trạng thái bắt đầu đến
Trang 29Ôtômát hữu hạn này đoán nhận
ngôn ngữ nào?
Trang 30Ví dụ 1
Trang 31Trạng thái lỗi ẩn
Trang 32Ôtômát hữu hạn đơn định (DFA)
và ôtômát hữu hạn không đơn
Một FA là một DFA nếu
Không trạng thái nào có một chuyển-ε, và
Với mỗi trạng thái s và ký hiệu vào a, có không quá
một cung nhãn a ra khỏi s
Một FA là một NFA nếu nó không phải một DFA:
Không đơn định: ứng với một ký hiệu vào có thể có vài chuyển
Trang 33DFA hay NFA? Các ngôn ngữ được đoán nhận là gì?
Trang 34Hai ví dụ
Trang 35Nội dung
Phân tích từ vựng: từ tố, từ vị, mẫu
REs, FA (DFA, NFA)
Nâng cao: REs NFA; NFA DFA; DFA state DFA
minimal- Một số bài tập
Trang 36Thuật toán Thompson để xây dựng NFA từ các RE
Điều khiển bởi cú pháp
Quy nạp: Các trường hợp (case) trong xây dựng NFA tương ứng với các trường hợp trong định nghĩa RE
Điều quan trọng: nếu một ký hiệu xuất hiện vài lần
trong một RE r, một NFA riêng biệt được tạo cho mỗi lần xuất hiện
Thuật toán Thompson là một trong nhiều thuật toán
đã được đưa ra
Trang 37Thuật toán Thompson
Cơ sở qui nạp:
1 Với ε, tạo NFA
2 Với a ∑, tạo NFA∈
Bước qui nạp: giả sử N(r) và N(s) là các NFA của các
RE r và s Khi đó
Trang 38Thuật toán Thompson (Cont’d)
Trang 39Ví dụ: RE NFA⇒Chuyển đổi (0|10 1) 10 thành một NFA∗ ∗ ∗
Trang 40Ví dụ: RE NFA ⇒
Trang 41Ví dụ: DFA (Cont’d)
Thuật toán này được biết đến như là thuật toán xây dựng tập con bởi
vì trạng thái của DFA tương ứng với tập con các trạng thái của NFA
Có tối đa 2 n trạng thái DFA, trong đó n là tổng số trạng thái NFA
Trang 42Xây dựng tập con: các toán tử được sử dụng
ε-closure(s) Tập các trạng thái NFA có thể đi đến (reachable) từ
trạng thái NFA s theo các chuyển-ε
ε-closure(T) Tập các trạng thái NFA có thể đi đến từ trạng thái
NFA nào đó thuộc T theo các chuyển-ε
move(T,a) Tập các trạng thái NFA mà có chuyển nhãn a từ trạng
thái NFA nào đó thuộc T tới
Trang 43Thuật toán xây dựng tập con
Gọi s0 là trạng thái bắt đầu của NFA;
DFAstates chứa duy nhất trạng thái chưa được đánh dấu ε-closure(s0)
while có một trạng thái không được đánh dấu T trong DFAstates do
begin
đánh dấu T
for mỗi ký hiệu vào a do begin
U := ε-closure(move(T, a));
if U không có trong DFAstates then
Thêm U vào DFAstates như một trạng thái chưa được đánh dấu;
DFATrans[T, a] := U;
Trang 44Xây dựng tập con: Định nghĩa của DFA
Giả sử (∑, S, T, F, s0) là NFA ban đầu DFA sẽ là:
Bộ chữ cái: ∑
Các trạng thái: tất cả các trạng thái có trong
DFAstates
Trạng thái bắt đầu: ε-closure(s0)
Các trạng thái chấp nhận: tất cả các trạng thái trong DFAstates mà chứa ít nhất một trạng thái chấp nhận trong F của NFA
Trang 45Thuật toán cực tiểu hóa trạng thái DFA
Ban đầu, giả sử ∏ gồm hai nhóm
(1) Tập tất cả các trạng thái kết thúc
(2) Tập các trạng thái không kết thúc
Khởi tạo ∏new = ∏
for mỗi nhóm G trong ∏new {
Chia G thành các nhóm con sao cho hai trạng thái s và t thuộc cùng nhóm nếu và chỉ nếu với mọi ký hiệu vào a các trạng thái s và t có chuyển nhãn a tới các trạng thái trong cùng
nhóm của ∏new
Thay G trong ∏new bằng tập các tập con được tạo ra
}
Trang 46Ví dụ (Cont’d): Các trạng thái
được gán nhãn lại
Trang 47Nội dung
Phân tích từ vựng: từ tố, từ vị, mẫu
REs, FA (DFA, NFA)
Nâng cao: REs NFA; NFA DFA; DFA state DFA
Trang 48A 4 Phân loại Chomsky
Trang 49Phân loại văn phạm của Chomsky
Trang 50(f) Tất cả các xâu bắt đầu với một 1
(g) Tất cả các xâu bắt đầu với một ký hiệu 1 và kết thúc với một ký hiệu 0
(h) Tất cả các xâu chứa đúng ba ký hiệu 1
(i) Tất cả các xâu mà mỗi ký hiệu 0 đều có ký hiệu 1 đi trước và đi sau