Tải bản đầy đủ (.ppt) (51 trang)

Hệ thống phân tích từ vựng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (822.63 KB, 51 trang )

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
22/10/14 2Nguyễn Phương Thái - Coltech - Compiler 2009
Vai 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)
22/10/14 3Nguyễn Phương Thái - Coltech - Compiler 2009
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 toá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 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
từ, danh từ, tính từ, v.v. Tập các từ phụ thuộc vào ngôn
ngữ cụ thể
22/10/14 4Nguyễn Phương Thái - Coltech - Compiler 2009
Từ vị (lexeme)

Từ vị của một từ tố: chuỗi ký tự tạo thành từ tố

Ví dụ:
22/10/14 5Nguyễn Phương Thái - Coltech - Compiler 2009
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 đó


Biểu diễn hình thức cho từ tố là cần thiết REs, NFA, DFA⇒
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
the letters ‘w’, ‘h’, ‘i’, ’l’, ’e’ while
22/10/14 6Nguyễn Phương Thái - Coltech - Compiler 2009
Các biểu thức chính qui (REs) cho
số nguyên và số thực trong C
22/10/14 7Nguyễn Phương Thái - Coltech - Compiler 2009
Các máy hữu hạn trạng thái (FSMs)
cho số nguyên và số thực
22/10/14 8Nguyễn Phương Thái - Coltech - Compiler 2009
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
22/10/14 9Nguyễn Phương Thái - Coltech - Compiler 2009
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)
22/10/14 10Nguyễn Phương Thái - Coltech - Compiler 2009
Ứ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.)

/>22/10/14 11Nguyễn Phương Thái - Coltech - Compiler 2009
Ứ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 toán

Các chương trình sinh hệ phân tích từ vựng (lex and
JLex)

JCT: //humboldt.sunyit.edu/JCT
22/10/14 12Nguyễn Phương Thái - Coltech - Compiler 2009
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

{ε}
22/10/14 13Nguyễn Phương Thái - Coltech - Compiler 2009
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
22/10/14 14Nguyễn Phương Thái - Coltech - Compiler 2009
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
22/10/14 15Nguyễn Phương Thái - Coltech - Compiler 2009
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
22/10/14 16Nguyễn Phương Thái - Coltech - Compiler 2009
Các phép toán trên ngôn ngữ
(Figure 3.8 of Text)

22/10/14 17Nguyễn Phương Thái - Coltech - Compiler 2009
Ví dụ về các phép toán trên
ngôn ngữ
22/10/14 18Nguyễn Phương Thái - Coltech - Compiler 2009
Ví dụ về các phép toán trên
ngôn ngữ
22/10/14 19Nguyễn Phương Thái - Coltech - Compiler 2009
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
22/10/14 20Nguyễn Phương Thái - Coltech - Compiler 2009
Thứ tự ưu tiên và tính kết hợp của
các toá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 toá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!
22/10/14 21Nguyễn Phương Thái - Coltech - Compiler 2009
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
22/10/14 22Nguyễn Phương Thái - Coltech - Compiler 2009

Các ví dụ khác: ∑ = {0, 1}
22/10/14 23Nguyễn Phương Thái - Coltech - Compiler 2009
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 ]∗
22/10/14 24Nguyễn Phương Thái - Coltech - Compiler 2009
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à:
22/10/14 25Nguyễn Phương Thái - Coltech - Compiler 2009

×