Nguyễn Phương Thái
Bộ mơn Khoa học Máy tính
/>
Nộ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
minimal-state DFA
Một số bài tập
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
2
Vai trị của hệ phân tích từ vựng
(scanner)
(từ tố)
(cây cú
pháp)
(mã nguồn)
(lỗi từ vựng)
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
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
3
Từ tố (token)
Từ tố trong VC được phân loại như sau:
các định danh (vd sum, i, j)
các từ khóa (vd int, if hay while)
các tốn tử (vd “+” hay “∗”, “<=”)
các ký hiệu phân tách (vd “{”, ‘}”, “;”)
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 tố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 từ, danh từ, tính từ, v.v. Tập các từ phụ thuộc
vào ngôn ngữ cụ thể
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
4
Từ vị (lexeme)
Từ vị của một từ tố: chuỗi ký tự tạo thành từ
tố
Ví dụ:
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
5
Mẫ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 đó
Loại từ tố
Mẫu
Từ vị
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
+
the character ‘+’
+
while
‘w’,
‘h’,thiết
‘i’, ’l’,
while
Biểu
diễn hình thứcthe
choletters
từ tố là
cần
⇒ REs,
NFA, DFA
’e’
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
6
Các biểu thức chính qui (REs) cho
số nguyên và số thực trong C
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
7
Các máy hữu hạn trạng thái (FSMs)
cho số nguyên và số thực
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
8
Nộ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
minimal-state DFA
Một số bài tập
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
9
REs, 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)
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
10
Ứ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.)
/>21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
11
Ứ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)
Lý thuyết ngơn ngữ
Độ phức tạp tính tốn
Các chương trình sinh hệ phân tích từ vựng (lex and
JLex)
JCT: //humboldt.sunyit.edu/JCT
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
12
Bộ 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
{ε}
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
13
Ví dụ về ngơn ngữ
∑= {0, 1} – mỗi xâu là một chỉ thị
Tập chỉ thị của M68K
Tập chỉ thị của Pentium
Tập chỉ thị của MIPS
∑ = tập ASCII – mỗi xâu ký tự là một chương
trình
Tập các chương trình Haskell
Tập các chương trình C
Tập các chương trình VC
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
14
Các thuật ngữ về xâu ký tự (Figure
3.7 of Text)
Thuật ngữ
Định nghĩa
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
con phù hợp (?) của s)
Any nonempty string x that is,
respectively,
a prefix, suffix
or substring of s such that s ≠ x
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
15
Ghép xâu
Nếu x và y là các xâu, xy là xâu tạo bởi phép
bổ xung y vào x
Ví dụ:
x
y
xy
key word keyword
java script javascript
ε is the identity: εx = xε = x
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
16
Các phép tốn trên ngơn ngữ
(Figure 3.8 of Text)
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
17
Ví dụ về các phép tốn trên
ngơn ngữ
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
18
Ví dụ về các phép tốn trên
ngơn ngữ
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
19
Cá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)
Chú ý: ngơn ngữ chính qui cũng có thể được gọi là tập chính qui
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
20
Thứ tự ưu tiên và tính kết hợp của
các tốn tử “chính qui”
Thứ tự ưu tiên:
“∗” có độ ưu tiên cao nhất
“ghép” có độ ưu tiên thứ nhì
“|” có độ ưu tiên thấp nhất
Tính kết hợp: — tất cả các tốn tử đều có tính kết hợp trái
Ví dụ:
(a)|((b)∗(c)) ≡ a|b∗c
Không cần sử dụng các dấu ngoặc thừa!
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
21
Một ví dụ về RE và RL
Bộ chữ cái: ∑ = {0, 1}
RE: 0(0|1)∗
Câu hỏi: RE trên định nghĩa ngôn ngữ nào?
Trả lời:
L(0(0|1)∗) = L(0)L((0|1)∗)
= {0}L(0|1)∗
= {0}(L(0) ∪ L(1))∗
= {0}({0} ∪ {1})∗
= {0}{0, 1}∗
= {0}{ε, 0, 1, 00, 01, 10, 11, . . . }
= {0, 00, 01, 000, 001, 010, 011, . . . }
RE trên mô tả tập các xâu ký tự nhị phân bắt đầu
với một số 0
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
22
Các ví dụ khác: ∑ = {0, 1}
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
23
Giả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 ]∗
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
24
Cá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à:
21/05/21
Nguyễn Phương Thái - Coltech - Compiler 2009
25