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

Bài giảng Chương trình dịch: Bài giảng 2 - Nguyễn Phương Thái

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 (818.65 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

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


×