62
1 CHƯƠNG 3 PHÂN TÍCH TỪVỰNG Số tiết: 45t GV: Ths. Lê Ngọc Sơn Email: [email protected]

CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

  • Upload
    apria

  • View
    85

  • Download
    0

Embed Size (px)

DESCRIPTION

CHƯƠNG 3 PHÂN TÍCH TỪVỰNG. Số tiết: 45t GV: Ths. Lê Ngọc Sơn Email: [email protected]. Vai trò của bộ phân tích từ vựng. 1. Token, mẫu, trị từ vựng:. Sự giao tiếp giữa bộ phân tích từ vựng và bộ phân tích cú pháp. CÁC TÍNH CHẤT CỦA TOKEN. - PowerPoint PPT Presentation

Citation preview

Page 1: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

1

CHƯƠNG 3PHÂN TÍCH TỪVỰNG

Số tiết: 45t

GV: Ths. Lê Ngọc Sơn

Email: [email protected]

Page 2: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

2

Vai trò của bộ phân tích từ vựng 1. Token, mẫu, trị từ vựng:

Page 3: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

3

Sự giao tiếp giữa bộ phân tích từ vựng và bộ phân tích cú pháp

Page 4: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

4

CÁC TÍNH CHẤT CỦA TOKEN Phân tích từ vựng phải có nhiệm vụ chọn thông tin

có liên quan đến token, để cất chúng vào bảng danh biểu (Ví dụ trị từ vựng).

Token luôn mang trong mình một thuộc tính duy nhất là con trỏ để chỉ đến vị trí của nó trong bảng danh biểu.

Khi một token được chuyển đến bộ phân tích cú pháp nó sẽ có dạng.

<Token, thuộc tính>

Page 5: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

5

CHỨA TẠM CHƯƠNG TRÌNH NGUỒN

Cặp bộ đệm: Cấu tạo:

Page 6: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

6

Quy trình hoạt độngGiải thuật:if p2 ở ranh giới một nửa bộ đệm then

begin lấp đầy N ký hiệu nhập mới vào nửa bên phải.p2 := p2 + 1;

endelse if p2 ở tận cùng bên phải bộ đệm then

begin lấp đầy N kỳ hiệu nhập vào nửa bên trái bộ đệm.chuyển p2 về ký tự tận cùng bên trái của bộ đệm.

endelse p2 := p2 + 1;

Page 7: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

7

Phương pháp cầm canh

Page 8: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

8

Phương pháp cầm canhGiải thuật:

p2 := p2 + 1;

If p2 ^ eof then

if p2 ở ranh giới một nửa bộ đệm then

begin

chất đầy N kỳ hiệu nhập vào nửa bên phải bộ đệm ;

p2 := p2 + 1

end

Page 9: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

9

Phương pháp cầm canhelse if p2 ở tận cùng bên phải bộ đệm then

begin

lấp đầy N ký hiệu vào nửa bên trái bộ đệm;

chuyển p2 về đầu bộ đệm

end

else /* dừng sự phân tích từ vựng*/

Page 10: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

10

Đặc tả tokenCác quy tắc định nghĩa biểu thức chính quy

1. là biểu thức chính quy, biểu thị cho tập { }

2. a là ký hiệu thuộc , biểu thị cho tập {a}

3. r và s là hai biểu thức chính quy, biểu thị cho L(r) và L(s) thì:

a) (r)|(s) là biểu thức chính quy, biểu thị cho L(r)| L(s).

b) (r)(s) là biểu thức chính quy, biểu thị cho L(r)L(s).

c) (r)* là biểu thức chính quy, biểu thị cho (L(r))*.

d) r là biểu thức chính quy, biểu thị cho L(r).

Page 11: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

11

Đặc tả tokenThí dụ 3.1: Cho = {a, b}

1. a|b biểu thị cho tập {a,b}

2. (a|b) |(b|a) biểu thị cho tập {aa,ab,ba,bb}

3. a* biểu thị cho tập { ,a,aa,aaa,…..}

Hai biểu thức chính quy tương đương r và s, ký hiệu

r = s.

Page 12: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

12

Định nghĩa chính quyNếu là tập ký hiệu căn bản, thì định nghĩa chính quy là

chuỗi định nghĩa có dạng:

d1->r1

……

dn->rn

di là tên của biểu thức chính quy ri.

ri là biểu thức chính quy trên các ký hiệu thuộc

( U{d1,d2…di-1})

Page 13: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

13

Định nghĩa chính quy

Page 14: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

14

Nhận dạng tokenCho văn phạm G:

stmt -> if exp then stmt

| if exp then stmt else stmt

| €

exp -> term relop term |term

term -> id |num

Page 15: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

15

Định nghĩa chính quy

Page 16: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

16

Từ định nghĩa chính quy ta xây dựng bảng mẫu cho token như sau

Page 17: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

17

Sơ đồ dịch

Page 18: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

18

Sơ đồ dịch

Page 19: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

19

Automat hữu hạnAutomat hữu hạn không tất định (NFA)

Thí dụ: Cho NFA:

Tập trạng thái S = {0, 1,2, 3}; = {a, b}; Trạng thái bắt đầu So = 0; Tập trạng thái kết thúc F = {3}.

Page 20: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

20

Automat hữu hạn

Page 21: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

21

Bảng truyền cho NFA

Page 22: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

22

Automat hữu hạn NFA chấp nhận một chuỗi nhập x nếu và chỉ nếu

tồn tại một đường nào đó trong sơ đồ từ trạng thái bắt đầu đến trạng thái kết thúc sao cho tất cả tên của các cạnh của con đường đó sẽ cho ra chuỗi x. NFA chấp nhận chuỗi aabb.

Page 23: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

23

Automat hữu hạn tất định (DFA)DFA là trường hợp đặc biệt của NFA, nó không có:

1) Sự truyền rỗng.

2) Với mỗi trạng thái S và ký hiệu nhập a chỉ tồn tại nhiều nhất một cạnh có tên a xuất phát từ S.

Page 24: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

24

Automat hữu hạn tất định (DFA)

Page 25: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

25

Chuyển NFA sang DFAGiải thuật 3.2: Xây dựng tập con (Tạo DFA từ NFA).

Nhập: Cho NFA gọi là N.

Xuất: DFA gọi là D, nhận dạng cùng ngôn ngữ như NFA.

Phương pháp: Xây dựng bảng truyền cho D. Mỗi trạng thái của D là tập trạng thái của N. D mô phỏng đồng thời mọi chuyển động của N trên chuỗi nhập cho trước bằng các tác vụ:

-closure (s); -closure (T); move (T, a)

Page 26: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

26

Giải thuật tính -closure Đẩy tất cả các trạng thái trong T lên stack; Khởi

tạo -closure (T) cho T.While stack không rỗng doBegin

Lấy t là phần tử trên đỉnh ra khỏi stack.For mỗi trạng thái u với cạnh đi từ t đến u có tên do

if u không thuộc -closure(T) thenBegin

them u vào -closure(T).đẩy u vào stack

endend

Page 27: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

27

Giải thuật xây dựng tập conBắt đầu -closure(S0) chỉ là một trạng thái trong các trạng thái của D chưa được đánh dấu.While có một trạng thái T chưa được đánh dấu trong D do begin

Đánh dấu T {Có nghĩa là đem T ra xem xét}.for mỗi ký tự nhập a dobegin

U = -closure(move(T,a))if U không có trong tập trạng thái của D thenbegin

thêm U vào các trạng thái của D và là trạng thái chưa được đánh dấu

D[T,a] = U {D[T,a] là phần tử của bảng truyền của D} end

endend

Page 28: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

28

Thí dụ Chúng ta dùng giải thuật 3.2 để xây dựng DFA

tương đương cho NFA sau.

Page 29: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

29

Bảng truyền cho DFA

Page 30: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

30

Bảng truyền cho DFA Trong đó:

A = {0,1,2,4,7}

B = {1,2,3,4,6,7,8}

C = {1,2,4,5,6,7}

D = {1,2,4,5,6,7,9}

E = {1,2,4,5,6,7,10}

Page 31: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

31

Từ biểu thức chính quy đến NFAXây dựng NFA từ biểu thức chính quy

Giải thuật 3.3: Xây dựng NFA từ biểu thức chính quy (Cấu trúcThompson’)

Nhập: Biểu thức chính quy r trên .

Xuất: NFA nhận dạng ngôn ngữ L(r).

Page 32: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

32

Phương phápQuy tắc:

Page 33: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

33

Phương phápGiả sử N(s) và N(t) là NFA cho biểu thức chính quy s

và t.

Page 34: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

34

Phương pháp

Page 35: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

35

Phương pháp

Page 36: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

36

Thí dụ Dùng giải thuật để xây dựng NFA cho biểu thức

chính quy r = (a|b)*abb

Page 37: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

37

Cây phân rã biểu thức chính quy r

Page 38: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

38

NFA nhận dạng ngôn ngữ (a|b)*abb

Page 39: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

39

Mô phỏng NFA Nhập: NFA gọi là N được xây dựng theo giải thuật

3.3, chuỗi nhập x. X được kết thúc bằng eof, N có trạng thái bắt đầu s0 và tập trạng thái kết thúc F. Xuất: Giải thuật trả lời đúng nếu N chấp nhận x, ngược lại trả lời sai.

Page 40: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

40

Giải thuật

S = -closure({So})

a = nextchar

While a <> eof then

Begin

S = -closure(move(s,a))

a = nextchar

End

if S F <> then write(đúng)

Else write(sai)

Page 41: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

41

Xây dựng DFA trực tiếp từ biểu thức chính quy và vấn đề tối ưu hóa việc so trùng mẫu

Tìm hiểu ba giải thuật để tối ưu việc so trùnh mẫu được xây dựng từ biểu thức chính quy:Xây dựng DFA trực tiếp từ biểu thức chính quy.Tối thiểu trạng thái của DFA.Nén bảng truyền của DFA.

Page 42: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

42

Trạng thái quan trọng của NFA Trạng thái quan trọng là từ nó có sự truyền khác

rỗng. Như vậy nếu hai tập trạng thái có cùng số trạng thái quan trọng thì chúng được đồng nhất.

NFA được xây dựng theo cấu trúc Thompson’ có trạng thái kết thúc không có sự truyền ra, như vậy nó không phải là trạng thái quan trọng ( nhưng thực sự nó lại rất quan trọng). Để tránh tình trạng này người ta thêm ký hiệu # vào sau biểu thức chính quy, và trạng thái kết thúc có sự truyền trên ký hiệu #.

Khi xây dựng tập con hoàn tất thì trạng thái nào có sự truyền trên # là trạng thái chấp nhận.

Page 43: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

43

Biểu thức chính quy gia tố Biểu thức r# được gọi là biểu thức chính quy gia

tố. Ký hiệu # không thuộc tập các ký hiệu cơ bản của biểu thức chính quy r.

Page 44: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

44

Cây phân tích

Là cây có nút lá là các ký hiệu cơ bản của r#. Các nút là các toán tử. Các toán tử trên cây phân tích như:

Toán tử kết nối Toán tử tuyển. Toán tử bao đóng truyền.

Page 45: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

45

Cây phân tích

Page 46: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

46

NFA được xây dựng từ (a|b)abb#

Page 47: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

47

NFA được xây dựng từ (a|b)abb#

Lưu ý: Các trạng thái được ký hiệu bằng số là trạng thái

quan trọng; Các trạng thái được ký hiệu bằng chữ là trạng thái không quan trọng.

Ở thí dụ 3.6 trạng thái A và C có cùng số trạng thái quan trọng là 2, 4, 7

A = {0,1,2,4,7} C = {1,2,4,5,7} Từ đây ta có thể đồng nhất hai trạng thái này.

Page 48: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

48

Các quy tắc để tính ba hàm nullable, firstpos, lastpos

Page 49: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

49

Các quy tắc tính hàm followpos(n) Nếu nút n là nút cat với con bên trái là c1, con bên

phải là c2 và i là vị trí trong lastpos(c1), thì tất cả vị trí trong firstpost(c2) sẽ cho vào followpos(i).

Nếu n là nút star và i là vị trí trong lastpos(n) thì tất cả các vị trí trong firstpos(n) sẽ cho vào followpos(i).

Page 50: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

50

Thí dụ

b

b

b

Page 51: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

51

Các trị followpos của các nút trên cây

Page 52: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

52

Xây dựng DFA từ biểu thức chính quy Xây dựng cây phân tích cho BTCQ gia tố r#. Tính các hàm nullable, firstpos, lastpos và

followpos cho các nút trên cây phân tích Xây dựng các trạng thái, hàm truyền và bảng

truyền cho D bằng thủ tục tạo tập con sau.

Page 53: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

53

Thủ tục tạo tập conLúc đầu D chỉ có một trạng thái bắt đầu là firstpos(root) , chưa

được đánh dấu.While có trạng thái T chưa được đánh dấu, trong tập trạng thái

của D do begin đánh dấu T;for với mỗi ký hiệu nhập a do;Begin với U là tập các vị trí trong followpos(p), p là vị trí trong

T, sao cho ký hiệu tại vị trí p là a;if U không rỗng và chưa có trong tập trạng thái của D then begin thêm U vào tập trạng thái của D và là trạng thái chưa được

đánh dấu;D[T, a] := U;

end;end;end;

Page 54: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

54

Tối thiểu số trạng thái của DFA Nhập: DFA, gọi là M có S, , s0, F. M là DFA đầy đủ. Xuất: DFA, gọi là M’chấp nhận ngôn ngữ như M, với số trạng

thái nhỏ nhất. Phương pháp:

1. Tạo phần khởi đầu có 2 nhóm: các trạng thái kết thúc F, và các trạng thái không kết thúc S –F.

2. Áp dụng thủ tục để tạo

3. Nếu = thì = tiếp tục bước 4, ngược lại lặp lại bước 2, với =

4. Chúng ta chọn mỗi nhóm 1 trạng thái đại diện và đó là trạng thái của M’.

5. Nếu M’ có trạng thái chết d thì loại nó ra khỏi M’. Tất cả các sự truyền đến trạng thái d đều không xác định.

new

new

new

final

Page 55: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

55

Tối thiểu số trạng thái của DFAGiải thuật tạo

for với mỗi nhóm G của do begin

Chia G thành các nhóm nhỏ hơn sao cho hai trạng thái s và t của G sẽ ở cùng một nhóm nhỏ hơn nếu và chỉ nếu các sự truyền trên tất cả các ký hiệu nhập a từ s và t đều đi đến các trạng thái kế tiếp ở trong cùng một nhóm của

Ta thay G bằng các nhóm nhỏ hơn vừa được tạo nên, cho chúng vào

end

new

new

Page 56: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

56

Các phương pháp nén bảng truyền FA Thu giảm hàng và cột dư thừa: Với phương pháp này khi truy cập một phần tử của

bảng truyền ta dùng:

Ynext[yrmap[trạng thái hiện tại],ycmap[ký hiệu nhập]].

Page 57: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

57

Thu giảm hàng và cột dư thừa

Page 58: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

58

Thiết kế bộ sinh bộ phân tích từ vựng Thiết kế phần mềm bằng ngôn ngữ Lex. Có thể tự động sinh ra bộ phân tích từ vựng từ đặc

tả biểu thức chính quy phần mềm.

Page 59: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

59

Thiết kế bộ sinh bộ phân tích từ vựng

Page 60: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

60

Thiết kế bộ sinh bộ phân tích từ vựng Đặt tả Lex có dạng:P1 {hành vi- 1}P2 {hành vi- 2} …….Pn {hành vi- n} Nếu có nhiều mẫu được so trùng, thì bộ nhận dạng

sẽ chọn chuổi trị từ vụng dài nhất. Nếu có nhiều hơn một mẫu so trùng với trị từ vụng dài nhất thì bộ nhận dạng sẽ chọn mẫu được so trùng truớc nhất.

Page 61: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

61

Mẫu so trùng trên cơ sở NFA

Page 62: CHƯƠNG 3 PHÂN TÍCH TỪVỰNG

62