SlideShare a Scribd company logo
1 
BÀI GIẢNG 
CHƯƠNG TRÌNH DỊCH 
Bộ môn khoa học máy tính
Trang 2 
Chương 3: Phân tích cú pháp 
1. Các chiến lược phân tích 
2. Phân tích top-down 
3. Phân tích bottom-up 
4. Phân tích bảng CYK 
5. Phân tích LL 
6. Phân tích đệ quy trên xuống
Trang 3 
1. Các chiến lược phân tích 
 Sử dụng văn phạm phi ngữ cảnh (VPPNC) để 
biểu diễn cú pháp của NNLT 
 Cơ sở phân tích cú pháp đối với VPPNC là bài 
toán thành viên: 
Cho G = (VT, VN, S, P), L(G) = {w  VT*: S * w}, xâu 
vào w 
Câu hỏi: wL(G) ???
Trang 4 
1. Các chiến lược phân tích 
 Chiến lược phân tích top-down: 
Quá trình xây dựng cây phân tích cú pháp theo lối từ 
gốc đến lá. 
Xuất phát từ gốc là ký tự bắt đầu, cố gắng áp dụng 
các sản xuất để xây dựng một cây có tập các nhãn 
của lá từ trái qua phải là xâu vào
Trang 5 
1. Các chiến lược phân tích 
 Chiến lược phân tích bottom-up 
Xuất phát từ các lá có nhãn là các ký tự của xâu vào, 
ta cố gắng áp dụng các sản xuất để xây dựng các nút 
trong. 
Nếu xây dựng được một nút gốc là ký tự bắt đầu thì 
được cây suy dẫn cho xâu vào
Trang 6 
1. Các chiến lược phân tích 
 Có 2 phương pháp 
Phân tích quay lui: trong quá trình xây dựng cây cú 
pháp thực hiện thử lần lượt, có bước quay lại để thử 
sản xuất khác 
Phân tích tất định: trong quá trình xây dựng cây cú 
pháp ta luôn lựa chọn đúng sản xuất cần dùng.
Trang 7 
2. Phân tích top-down 
 Input: Văn phạm G=(VT,VN,S,P), một xâu vào x 
 Output: Cây suy dẫn cho xâu vào x hoặc trả lời 
x không được đoán nhận 
 Thuật toán: đánh số các sản xuất 1, 2, 3… 
Bước 1: Xây dựng một cây chỉ có nút S làm gốc, gọi 
S là nút hoạt động và ký hiệu cần phân tích là ký 
hiệu đầu tiên trên xâu vào.
Trang 8 
2. Phân tích top-down 
 Bước 2: 
Nếu nút hoạt động là một kí hiệu không kết thúc A: 
Chọn sản xuất đầu tiên có A làm vế trái để tạo ra k con 
trực tiếp của A (AX1X2…Xk), sau đó lấy X1 làm nút 
hoạt động. 
Nếu k = 0 (A) thì nút hoạt động là nút bên phải của 
A trên cây.
Trang 9 
2. Phân tích top-down 
 Bước 2: 
Nếu nút hoạt động là kí hiệu kết thúc a thì sẽ so sánh 
a với kí hiệu cần phân tích: 
Trùng nhau: nút hoạt động là nút bên phải của a trên 
cây và kí hiệu cần phân tích là kí hiệu tiếp theo trên 
xâu vào. 
Không trùng: quay lại 1 bước để thử một sản xuất 
khác. Nếu tất cả sản xuất đã được thử thì quay lại 
bước trước đó.
Trang 10 
2. Phân tích top-down 
 Quá trình dừng lại khi: 
Tạo ra cây suy dẫn cho xâu vào 
Thử hết khả năng nhưng không xây dựng lên cây suy 
dẫn. Tức là xâu không được đoán nhận 
 Điều kiện dừng: văn phạm không có đệ qui trái
Trang 11 
2. Phân tích top-down 
 Ví dụ: Cho văn phạm sau 
S  cAd 
A  ab | a 
 Xâu vào là cad 
 Đánh số sản xuất: 
(1) : S  cAd 
(2) : A  ab 
(3) : A  a
Trang 12 
2. Phân tích top-down 
 Quá trình phân tích top-down
Trang 13 
3. Phân tích bottom-up 
 Đây là phương pháp gạt thu gọn (shift Reduce 
Parsing). 
 Sử dụng Stack S dùng để chứa kí hiệu của văn 
phạm cần phân tích. 
 Mỗi bước thực hiện một trong hai hành động gạt 
hoặc thu gọn. Luôn thử thu gọn trước khi gạt
Trang 14 
3. Phân tích bottom-up 
 Input: Văn phạm G không có -sản xuất và 
A + A, xâu vào x 
 Output: x có được đoán nhận hay không? 
 Thuật toán: 
Bước 1: Gạt ký tự đầu tiên của xâu x vào Stack S 
Bước 2: Lặp 
Xét mọi xâu  có thể trên đỉnh Stack. Ví dụ: Stack có 
abcd  d, cd, bcd, abcd.
Trang 15 
3. Phân tích bottom-up 
Nếu tồn tại A   thì thực hiện thu gọn: 
Lấy tất cả các ký hiệu của xâu  trong Stack. 
Đẩy ký hiệu A vào Stack. 
Trong trường hợp có nhiều xâu  cùng thỏa mãn thì 
đánh số để thử lần lượt. 
Nếu không thể thu gọn thì gạt ký hiệu tiếp theo trên 
xâu vào x vào Stack.
Trang 16 
3. Phân tích bottom-up 
 Nếu đã gạt hết ký hiệu trên x mà trong Stack 
không phải còn S thì quay lui lại địa chỉ sau cùng 
mà ở đó đã tiến hành thu gọn (khôi phục hiện 
trạng xâu vào, Stack tại thời điểm trước khi thu 
gọn) 
 Nếu còn một thu gọn nào khác có thể thì sẽ tiến 
hành thử theo thu gọn đó.
Trang 17 
3. Phân tích bottom-up 
 Thuật toán dừng khi đã gạt hết các ký hiệu trên 
xâu vào và trong Stack chỉ có một ký hiệu S. Khi 
đó ta kết luận xâu vào x được đoán nhận. 
 Ngược lại, khi thử hết các trường hợp mà trong 
Stack không chứa chỉ S thì kết luận xâu x không 
được đoán nhận.
Trang 18 
3. Phân tích bottom-up 
 Ví dụ: Cho văn phạm 
S  aABe 
A  Abc | b 
B  d 
 Xâu vào: abbcde
Trang 19
Trang 20 
4. Phân tích bảng CYK 
 Dạng chuẩn Chomsky 
 VPPNC ở dạng chuẩn Chomsky nếu mọi sản xuất 
có dạng A  BC hoặc A  a 
 Mọi văn phạm không chứa  - sản xuất thì đều có 
thể chuyển về dạng chuẩn Chomsky.
Trang 21 
4. Phân tích bảng CYK 
 Mô tả bảng: mỗi ô trong bảng chứa một tập các 
kí hiệu không kết thúc. 
  * 
ij N i j+T = X  V | X  a ...a i-1 
 Xâu vào x = a1a2…an 
  * 
1n N 1 n T = X  V | X  a ...a 
 Nếu xL(G)  S  T1n
Trang 22 
4. Phân tích bảng CYK 
 i - chỉ số cột 
đứng trước 
 j – chỉ số dòng 
đứng sau 
i 
j 
1 
4 
2 
1 
2 3 
3 
4 
T14
  ij N ik i+k,j-k T = X  V |  k  [1.. j - 1]: BT , C  T , X  BCP 
Trang 23 
4. Phân tích bảng CYK 
 Thuật toán xây dựng bảng: 
Bước 1: Xây dựng hàng 1 ( j = 1) 
Ti1=X  VN | X  ai P 
Bước 2: Giả thiết đã xây dựng được các hàng 1, 2, 3, 
…, j -1. Xây dựng hàng j 
Bước 3: Lặp lại bước 2 cho đến khi tính được T1n
Trang 24 
4. Phân tích bảng CYK 
i 
j 
1 
4 
2 
1 
2 3 
3 
4
Trang 25 
4. Phân tích bảng CYK 
 Ví dụ: Cho văn phạm 
S  AA | AS | b 
A  SA | AS | a 
 Xâu vào abaab.
Trang 26 
4. Phân tích bảng CYK 
 Thuật toán xây dựng cây phân tích 
Thủ tục Gen(i, j, A) viết ra dãy sản xuất trong suy dẫn 
A * aiai+1…ai+j-1 
Gọi thủ tục Gen(1, n, S) 
Cây suy dẫn là cây suy dẫn trái nhất
Trang 27 
4. Phân tích bảng CYK 
 Thuật toán xây dựng cây phân tích
Trang 28 
4. Phân tích bảng CYK 
 Ví dụ: 
 S  AA | AS | b 
 A  SA | AS | a
Trang 29 
4. Phân tích bảng CYK 
 Ví dụ: 
 (1) S  AA 
 (2) S  AS 
 (3) S  b 
 (4) A  SA 
 (5) A  AS 
 (6) A  a 
 Dãy sản xuất: 1 6 4 3 5 6 2 6 3
Trang 30 
4. Phân tích bảng CYK 
 Ví dụ: Dãy sản xuất: 1 6 4 3 5 6 2 6 3 
 S  AA  aA  aSA 
  abA  abAS  abaS 
  abaAS  abaaS  abaab
Trang 31 
5. Phân tích LL 
 Cơ sở của phân tích LL(k) dựa trên phương 
pháp phân tích top-down và máy ôtômát đẩy 
xuống 
 Mô hình:
Trang 32 
5. Phân tích LL 
 Bảng phân tích M là mảng hai chiều: 
Mỗi dòng tương ứng với một kí hiệu không kết thúc 
Mỗi cột tương ứng với một kí hiệu kết thúc 
Tại ô dòng A, cột a: ghi sản xuất vế trái là A, vế phải 
là một xâu có thể suy dẫn ra một dạng câu đứng đầu 
là a.
Trang 33 
5. Phân tích LL 
 Thuật toán phân tích LL(1) 
Input: bảng phân tích M, xâu vào x 
Output: Cây phân tích cho x hoặc lỗi 
 Các bước thuật toán: 
Bước 1: Đẩy lần lượt 2 kí hiệu $, S (kí tự đầu) vào 
Stack. Thêm $ vào cuối xâu x. Kí tự đang xét là kí tự 
đầu của xâu x.
Trang 34 
5. Phân tích LL 
 Các bước thuật toán: 
[Lặp] Bước 2: X là kí hiệu trên đỉnh Stack, a là kí hiệu 
đang xét 
Nếu X = a = $  Thành công 
Nếu X = a  $: Lấy X khỏi Stack, kí hiệu đang xét là kí 
hiệu tiếp theo trên xâu vào 
Nếu X là kí hiệu không kết thúc: Xét ô M[X, a] được 
sản xuất X  Y1Y2…Yk thì: 
• Lấy X khỏi Stack 
• Đẩy Yk, …, Y1 vào Stack
Trang 35 
5. Phân tích LL 
 Ví dụ: cho bảng phân tích sau: 
 Xâu vào a + a*a
Trang 36 
5. Phân tích LL 
 Quá trình phân tích
Trang 37 
5. Phân tích LL 
 Định nghĩa First và Follow 
First() là tập các kí hiệu kết thúc bắt đầu các xâu 
suy dẫn được từ . Nếu * thì First() 
Follow(A) là tập các kí hiệu kết thúc mà có thể đứng 
ngay bên phải A trong một dạng câu
Trang 38 
5. Phân tích LL
Trang 39 
5. Phân tích LL 
 Tính First của một ký hiệu 
 (1) Nếu X là ký hiệu kết thúc thì First(X) = {X} 
 (2) Nếu X   là một sản xuất thì First(X) 
 (3) Nếu X  Y1Y2…Yk là một sản xuất: 
 First(Y1) {}  First(X) 
 Nếu   First(Yj) (j<i)  First(Yi){}  First(X). 
 Nếu  First(Yi) (i = 1, 2, …, k) thì   First(X). 
 Lặp lại các quy tắc trên cho đến khi không thêm 
được gì vào First(X)
Trang 40 
5. Phân tích LL 
 Tính First của một xâu  = X1X2…Xk 
 First(X1) {}  First() 
 Nếu   First(Xj) (j<i)  First(Yi){}  First(). 
 Nếu  First(Xi) (i = 1, 2, …, k) thì   First().
Trang 41 
5. Phân tích LL 
 Tính Follow(A). 
 (1) Đặt $ vào Follow(A) với A là k hiệu bắt đầu 
 (2) BA (với   ) thì First(){}  Follow(A). 
 (3) BA (hoặc BA với First()) thì 
Follow(B)  Follow(A). 
 Lặp lại các quy tắc trên cho đến khi không 
thêm được gì vào Follow(A)
Trang 42 
5. Phân tích LL 
 Ví dụ: Cho văn phạm sau: 
 E  TE’ 
 E’  +TE’ |  
 T’  *FT’ |  
 T  FT’ 
 F  (E) | a 
 Tính First và Follow của các kí hiệu không kết 
thúc
Trang 43 
5. Phân tích LL 
 Ví dụ: Tính First
Trang 44 
5. Phân tích LL 
 Tính Follow
Trang 45 
5. Phân tích LL 
 Định nghĩa văn phạm LL(1) 
 Một VPPNC là LL(1) khi thỏa 2 điều kiện sau: 
Nếu A   |  là hai sản xuất phân biệt thì 
First()First() =  
Nếu A * thì First(A)  Follow(A) =  
 Ví dụ: văn phạm ở ví dụ trên là LL(1)
Trang 46 
5. Phân tích LL 
 Thuật toán lập bảng phân tích 
1. Đối với mỗi sản xuất A   thực hiện bước 2 và 3 
2. Đối với mỗi ký hiệu kết thúc a  First(), thêm A   
vào M[A, a] 
3. Nếu   First(), thêm A   vào M[A, b] với b  
Follow(A). 
4. Đặt tất cả các vị trí còn lại của bảng là lỗi.
Trang 47 
5. Phân tích LL 
 Ví dụ: với văn phạm cho ở trên, ta có bảng:
Trang 48 
5. Phân tích LL 
 Định nghĩa văn phạm LL(1) 
 Một VPPNC là LL(1) khi mỗi ô trong bảng phân 
tích không chứa quá một sản xuất. 
 Ví dụ: Văn phạm cho trong ví dụ trên là LL(1)
Trang 49 
5. Phân tích LL 
 Ví dụ: 
S  A | B 
A  aA | b 
B  aB | c 
 Văn phạm này không là LL(1) vì 
First(A)  First(B) = {a}
Trang 50 
5. Phân tích LL 
 Ví dụ: 
S  Aa 
A  aA |  
 Văn phạm này không là LL(1) vì 
A   
First(A)  Follow(A) = {a}
Trang 51 
6. Phân tích đệ quy trên xuống 
 Văn phạm cần phân tích phải là LL(1) 
 Ta thực hiện xây dựng sơ đồ cú pháp cho từng 
sản xuất trong văn phạm 
 Viết từng thủ tục phân tích cho các ký hiệu 
không kết thúc của văn phạm
Trang 52 
6. Phân tích đệ quy trên xuống 
 Xây dựng sơ đồ cú pháp 
Với a là ký hiệu kết thúc 
a 
Với A là ký hiệu không kết thúc 
A
Trang 53 
6. Phân tích đệ quy trên xuống 
 Xây dựng sơ đồ cú pháp 
A  1 | 2 |…| n
Trang 54 
6. Phân tích đệ quy trên xuống 
 Xây dựng sơ đồ cú pháp 
 : X1X2…Xn 
 : {X}
Trang 55 
6. Phân tích đệ quy trên xuống 
 Ví dụ: xây dựng sơ đồ cú pháp cho văn phạm 
S  T A 
A  + T A |  
T  F B 
B  * F B |  
F  (S) | a
Trang 56 
6. Phân tích đệ quy trên xuống 
 Viết chương trình 
 Thủ tục getch() đọc một kí hiệu lưu vào biến ch 
a 
A 
If ch=‘a’ then getch() 
Else Error 
A; //gọi thủ tục phân tích A 
If ch in First(1) then T(1) 
Else if ch in First(2) then T(2) 
…. 
Else if ch in First(n) then T(n)
Trang 57 
6. Phân tích đệ quy trên xuống 
Begin T(X1); T(X2); ... T(Xn); End; 
While ch in First(X) do T(X) 
Chương trình chính Begin 
Getch(); S; {S kí tự đầu} 
End. 
 Viết chương trình
Trang 58 
6. Phân tích đệ quy trên xuống 
 Ví dụ: 
 Procedure S 
Procedure F; 
Procedure B; 
Procedure T; 
Procedure A;
Trang 59 
6. Phân tích đệ quy trên xuống 
 Ví dụ: 
 Procedure S; 
 Begin 
 T; A; 
 End; 
 Procedure A; 
 Begin 
 if ch = ‘+’ then Begin 
 getch(); T; A; 
 End; 
 End;
Trang 60 
6. Phân tích đệ quy trên xuống 
 Ví dụ: 
 Procedure B 
 Begin 
 if ch = ‘*’ then Begin 
 getch(); F; B; 
 End; 
 End; 
 Procedure T; 
 Begin 
 F; B; 
 End;
Trang 61 
6. Phân tích đệ quy trên xuống 
 Ví dụ: 
 Procedure F; 
 Begin 
 if ch=‘(‘ then Begin 
 getch(); S; 
 If ch = ‘)’ then getch() 
 Else Error; 
 End 
 Else if ch=‘a’ then getch() 
 else Error; 
 End;

More Related Content

PDF
Xử lý tín hiệu số
PPTX
chuong 4. dai so boole
PDF
Chuẩn hóa lược đồ quan hệ
PPT
Mạng neuron, trí tuệ nhân tạo
PDF
Kiến trúc máy tính và hợp ngữ bài 02
PDF
Tài liệu tổng kểt môn mạng máy tính
DOCX
Báo cáo phân tích thiết kế đồ án game
Xử lý tín hiệu số
chuong 4. dai so boole
Chuẩn hóa lược đồ quan hệ
Mạng neuron, trí tuệ nhân tạo
Kiến trúc máy tính và hợp ngữ bài 02
Tài liệu tổng kểt môn mạng máy tính
Báo cáo phân tích thiết kế đồ án game

What's hot (20)

DOC
Bài giảng kiến trúc máy tính
DOCX
[Báo cáo] Bài tập lớn Tổ chức quy hoạch mạng viễn thông: Mentor
PDF
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tính
PDF
[BTL] Kiểm tra tính ổn định của hệ thống liên tục
PDF
BÀI GIẢNG NHẬP MÔN LẬP TRÌNH KHOA HỌC DỮ LIỆU
PDF
Hướng dẫn viết báo cáo chuẩn - HUST
PPT
Đại số boolean và mạch logic
PDF
Bài Tập Xử Lí Tín Hiệu Số
DOC
Hướng dẫn sử dụng phần mềm packet tracer
PPT
chuong 3. quan he
DOC
Hệ thống thông tin
PDF
Giáo trình phân tích thiết kế hệ thống thông tin
PDF
Bài giang và bài tập môn xác suất thống kê
PDF
Đệ Quy, Quay Lui, Nhánh Cận
DOCX
Khái niệm thông tin và dữ liệu
PDF
Bảng Student
DOC
Luận văn: Nghiên cứu hệ thống trợ lý thông minh ảo, HAY
DOCX
Tóm tắt về track, sector, cluster, cylinder
PPT
chuong 5. do thi (phan 1)
DOC
Giáo trình mạng máy tính
Bài giảng kiến trúc máy tính
[Báo cáo] Bài tập lớn Tổ chức quy hoạch mạng viễn thông: Mentor
Tính toán khoa học - Chương 2: Hệ phương trình tuyến tính
[BTL] Kiểm tra tính ổn định của hệ thống liên tục
BÀI GIẢNG NHẬP MÔN LẬP TRÌNH KHOA HỌC DỮ LIỆU
Hướng dẫn viết báo cáo chuẩn - HUST
Đại số boolean và mạch logic
Bài Tập Xử Lí Tín Hiệu Số
Hướng dẫn sử dụng phần mềm packet tracer
chuong 3. quan he
Hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
Bài giang và bài tập môn xác suất thống kê
Đệ Quy, Quay Lui, Nhánh Cận
Khái niệm thông tin và dữ liệu
Bảng Student
Luận văn: Nghiên cứu hệ thống trợ lý thông minh ảo, HAY
Tóm tắt về track, sector, cluster, cylinder
chuong 5. do thi (phan 1)
Giáo trình mạng máy tính
Ad

Similar to Bg chuong trinh dich chuong 3 (20)

PDF
Baitap ktlt
DOC
Baitap ktlt
PDF
C02. Ky thuat to chuc va xu ly du lieu tren mang 1 chieu, mang 2 chieu.pdf
PDF
bài tập cấu trúc dữ liệu 4
PPT
Bai giang 4 thuat toan
PPT
Thuat toan tin hoc
PPTX
Cấu trúc dữ liệu và giải thuật Bai 2_Ky Thuat Tim Kiem.pptx
PPTX
thuyết-trình chính.pptxccsascacacascacacc
PPT
Chuong 2 phan tich cac thuat toan sap xep va tim kiem
PPTX
Chương 6. Cây cấu trúc rời rạc bài tập + lí thuyết
PPT
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
PPT
Baigiang4 thuattoan-120116191825-phpapp02
PPTX
Baigiang - bai4. Bài Toán Và Thuật Toán
PDF
Tài liệu ôn thi Toán Rời Rạc Đại học khoa học tự nhiên
PPTX
Bai giang
PDF
Ctdl 1993
PDF
CCD-Chương 4-Thuật toán LL.pdf dấdâdaddđâs
DOC
Kiến thức cơ bản
PPT
Ds10.ham so.nls
Baitap ktlt
Baitap ktlt
C02. Ky thuat to chuc va xu ly du lieu tren mang 1 chieu, mang 2 chieu.pdf
bài tập cấu trúc dữ liệu 4
Bai giang 4 thuat toan
Thuat toan tin hoc
Cấu trúc dữ liệu và giải thuật Bai 2_Ky Thuat Tim Kiem.pptx
thuyết-trình chính.pptxccsascacacascacacc
Chuong 2 phan tich cac thuat toan sap xep va tim kiem
Chương 6. Cây cấu trúc rời rạc bài tập + lí thuyết
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Baigiang4 thuattoan-120116191825-phpapp02
Baigiang - bai4. Bài Toán Và Thuật Toán
Tài liệu ôn thi Toán Rời Rạc Đại học khoa học tự nhiên
Bai giang
Ctdl 1993
CCD-Chương 4-Thuật toán LL.pdf dấdâdaddđâs
Kiến thức cơ bản
Ds10.ham so.nls
Ad

More from Trần Văn Nam (20)

PDF
Tut6 solution
PDF
Tut5 solution
PDF
Tut4 solution
PDF
PDF
PDF
Stl string
PDF
Phan 2 chuong 8 (chuoi ky tu)
PDF
Phan 2 chuong 9 (cau truc)
PDF
Phan 2 chuong 10 (tap tin)
PDF
Lect09 string
DOCX
Hướng dẫn làm bt về chuỗi.doc
PDF
Ktlt lab full
PDF
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
PDF
Lect05 array
PDF
Huong dan thao_tac_file
DOCX
Cam bien gia toc
PDF
Bai tap c
PDF
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
Tut6 solution
Tut5 solution
Tut4 solution
Stl string
Phan 2 chuong 8 (chuoi ky tu)
Phan 2 chuong 9 (cau truc)
Phan 2 chuong 10 (tap tin)
Lect09 string
Hướng dẫn làm bt về chuỗi.doc
Ktlt lab full
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Lect05 array
Huong dan thao_tac_file
Cam bien gia toc
Bai tap c
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình

Bg chuong trinh dich chuong 3

  • 1. 1 BÀI GIẢNG CHƯƠNG TRÌNH DỊCH Bộ môn khoa học máy tính
  • 2. Trang 2 Chương 3: Phân tích cú pháp 1. Các chiến lược phân tích 2. Phân tích top-down 3. Phân tích bottom-up 4. Phân tích bảng CYK 5. Phân tích LL 6. Phân tích đệ quy trên xuống
  • 3. Trang 3 1. Các chiến lược phân tích  Sử dụng văn phạm phi ngữ cảnh (VPPNC) để biểu diễn cú pháp của NNLT  Cơ sở phân tích cú pháp đối với VPPNC là bài toán thành viên: Cho G = (VT, VN, S, P), L(G) = {w  VT*: S * w}, xâu vào w Câu hỏi: wL(G) ???
  • 4. Trang 4 1. Các chiến lược phân tích  Chiến lược phân tích top-down: Quá trình xây dựng cây phân tích cú pháp theo lối từ gốc đến lá. Xuất phát từ gốc là ký tự bắt đầu, cố gắng áp dụng các sản xuất để xây dựng một cây có tập các nhãn của lá từ trái qua phải là xâu vào
  • 5. Trang 5 1. Các chiến lược phân tích  Chiến lược phân tích bottom-up Xuất phát từ các lá có nhãn là các ký tự của xâu vào, ta cố gắng áp dụng các sản xuất để xây dựng các nút trong. Nếu xây dựng được một nút gốc là ký tự bắt đầu thì được cây suy dẫn cho xâu vào
  • 6. Trang 6 1. Các chiến lược phân tích  Có 2 phương pháp Phân tích quay lui: trong quá trình xây dựng cây cú pháp thực hiện thử lần lượt, có bước quay lại để thử sản xuất khác Phân tích tất định: trong quá trình xây dựng cây cú pháp ta luôn lựa chọn đúng sản xuất cần dùng.
  • 7. Trang 7 2. Phân tích top-down  Input: Văn phạm G=(VT,VN,S,P), một xâu vào x  Output: Cây suy dẫn cho xâu vào x hoặc trả lời x không được đoán nhận  Thuật toán: đánh số các sản xuất 1, 2, 3… Bước 1: Xây dựng một cây chỉ có nút S làm gốc, gọi S là nút hoạt động và ký hiệu cần phân tích là ký hiệu đầu tiên trên xâu vào.
  • 8. Trang 8 2. Phân tích top-down  Bước 2: Nếu nút hoạt động là một kí hiệu không kết thúc A: Chọn sản xuất đầu tiên có A làm vế trái để tạo ra k con trực tiếp của A (AX1X2…Xk), sau đó lấy X1 làm nút hoạt động. Nếu k = 0 (A) thì nút hoạt động là nút bên phải của A trên cây.
  • 9. Trang 9 2. Phân tích top-down  Bước 2: Nếu nút hoạt động là kí hiệu kết thúc a thì sẽ so sánh a với kí hiệu cần phân tích: Trùng nhau: nút hoạt động là nút bên phải của a trên cây và kí hiệu cần phân tích là kí hiệu tiếp theo trên xâu vào. Không trùng: quay lại 1 bước để thử một sản xuất khác. Nếu tất cả sản xuất đã được thử thì quay lại bước trước đó.
  • 10. Trang 10 2. Phân tích top-down  Quá trình dừng lại khi: Tạo ra cây suy dẫn cho xâu vào Thử hết khả năng nhưng không xây dựng lên cây suy dẫn. Tức là xâu không được đoán nhận  Điều kiện dừng: văn phạm không có đệ qui trái
  • 11. Trang 11 2. Phân tích top-down  Ví dụ: Cho văn phạm sau S  cAd A  ab | a  Xâu vào là cad  Đánh số sản xuất: (1) : S  cAd (2) : A  ab (3) : A  a
  • 12. Trang 12 2. Phân tích top-down  Quá trình phân tích top-down
  • 13. Trang 13 3. Phân tích bottom-up  Đây là phương pháp gạt thu gọn (shift Reduce Parsing).  Sử dụng Stack S dùng để chứa kí hiệu của văn phạm cần phân tích.  Mỗi bước thực hiện một trong hai hành động gạt hoặc thu gọn. Luôn thử thu gọn trước khi gạt
  • 14. Trang 14 3. Phân tích bottom-up  Input: Văn phạm G không có -sản xuất và A + A, xâu vào x  Output: x có được đoán nhận hay không?  Thuật toán: Bước 1: Gạt ký tự đầu tiên của xâu x vào Stack S Bước 2: Lặp Xét mọi xâu  có thể trên đỉnh Stack. Ví dụ: Stack có abcd  d, cd, bcd, abcd.
  • 15. Trang 15 3. Phân tích bottom-up Nếu tồn tại A   thì thực hiện thu gọn: Lấy tất cả các ký hiệu của xâu  trong Stack. Đẩy ký hiệu A vào Stack. Trong trường hợp có nhiều xâu  cùng thỏa mãn thì đánh số để thử lần lượt. Nếu không thể thu gọn thì gạt ký hiệu tiếp theo trên xâu vào x vào Stack.
  • 16. Trang 16 3. Phân tích bottom-up  Nếu đã gạt hết ký hiệu trên x mà trong Stack không phải còn S thì quay lui lại địa chỉ sau cùng mà ở đó đã tiến hành thu gọn (khôi phục hiện trạng xâu vào, Stack tại thời điểm trước khi thu gọn)  Nếu còn một thu gọn nào khác có thể thì sẽ tiến hành thử theo thu gọn đó.
  • 17. Trang 17 3. Phân tích bottom-up  Thuật toán dừng khi đã gạt hết các ký hiệu trên xâu vào và trong Stack chỉ có một ký hiệu S. Khi đó ta kết luận xâu vào x được đoán nhận.  Ngược lại, khi thử hết các trường hợp mà trong Stack không chứa chỉ S thì kết luận xâu x không được đoán nhận.
  • 18. Trang 18 3. Phân tích bottom-up  Ví dụ: Cho văn phạm S  aABe A  Abc | b B  d  Xâu vào: abbcde
  • 20. Trang 20 4. Phân tích bảng CYK  Dạng chuẩn Chomsky  VPPNC ở dạng chuẩn Chomsky nếu mọi sản xuất có dạng A  BC hoặc A  a  Mọi văn phạm không chứa  - sản xuất thì đều có thể chuyển về dạng chuẩn Chomsky.
  • 21. Trang 21 4. Phân tích bảng CYK  Mô tả bảng: mỗi ô trong bảng chứa một tập các kí hiệu không kết thúc.   * ij N i j+T = X  V | X  a ...a i-1  Xâu vào x = a1a2…an   * 1n N 1 n T = X  V | X  a ...a  Nếu xL(G)  S  T1n
  • 22. Trang 22 4. Phân tích bảng CYK  i - chỉ số cột đứng trước  j – chỉ số dòng đứng sau i j 1 4 2 1 2 3 3 4 T14
  • 23.   ij N ik i+k,j-k T = X  V |  k  [1.. j - 1]: BT , C  T , X  BCP Trang 23 4. Phân tích bảng CYK  Thuật toán xây dựng bảng: Bước 1: Xây dựng hàng 1 ( j = 1) Ti1=X  VN | X  ai P Bước 2: Giả thiết đã xây dựng được các hàng 1, 2, 3, …, j -1. Xây dựng hàng j Bước 3: Lặp lại bước 2 cho đến khi tính được T1n
  • 24. Trang 24 4. Phân tích bảng CYK i j 1 4 2 1 2 3 3 4
  • 25. Trang 25 4. Phân tích bảng CYK  Ví dụ: Cho văn phạm S  AA | AS | b A  SA | AS | a  Xâu vào abaab.
  • 26. Trang 26 4. Phân tích bảng CYK  Thuật toán xây dựng cây phân tích Thủ tục Gen(i, j, A) viết ra dãy sản xuất trong suy dẫn A * aiai+1…ai+j-1 Gọi thủ tục Gen(1, n, S) Cây suy dẫn là cây suy dẫn trái nhất
  • 27. Trang 27 4. Phân tích bảng CYK  Thuật toán xây dựng cây phân tích
  • 28. Trang 28 4. Phân tích bảng CYK  Ví dụ:  S  AA | AS | b  A  SA | AS | a
  • 29. Trang 29 4. Phân tích bảng CYK  Ví dụ:  (1) S  AA  (2) S  AS  (3) S  b  (4) A  SA  (5) A  AS  (6) A  a  Dãy sản xuất: 1 6 4 3 5 6 2 6 3
  • 30. Trang 30 4. Phân tích bảng CYK  Ví dụ: Dãy sản xuất: 1 6 4 3 5 6 2 6 3  S  AA  aA  aSA   abA  abAS  abaS   abaAS  abaaS  abaab
  • 31. Trang 31 5. Phân tích LL  Cơ sở của phân tích LL(k) dựa trên phương pháp phân tích top-down và máy ôtômát đẩy xuống  Mô hình:
  • 32. Trang 32 5. Phân tích LL  Bảng phân tích M là mảng hai chiều: Mỗi dòng tương ứng với một kí hiệu không kết thúc Mỗi cột tương ứng với một kí hiệu kết thúc Tại ô dòng A, cột a: ghi sản xuất vế trái là A, vế phải là một xâu có thể suy dẫn ra một dạng câu đứng đầu là a.
  • 33. Trang 33 5. Phân tích LL  Thuật toán phân tích LL(1) Input: bảng phân tích M, xâu vào x Output: Cây phân tích cho x hoặc lỗi  Các bước thuật toán: Bước 1: Đẩy lần lượt 2 kí hiệu $, S (kí tự đầu) vào Stack. Thêm $ vào cuối xâu x. Kí tự đang xét là kí tự đầu của xâu x.
  • 34. Trang 34 5. Phân tích LL  Các bước thuật toán: [Lặp] Bước 2: X là kí hiệu trên đỉnh Stack, a là kí hiệu đang xét Nếu X = a = $  Thành công Nếu X = a  $: Lấy X khỏi Stack, kí hiệu đang xét là kí hiệu tiếp theo trên xâu vào Nếu X là kí hiệu không kết thúc: Xét ô M[X, a] được sản xuất X  Y1Y2…Yk thì: • Lấy X khỏi Stack • Đẩy Yk, …, Y1 vào Stack
  • 35. Trang 35 5. Phân tích LL  Ví dụ: cho bảng phân tích sau:  Xâu vào a + a*a
  • 36. Trang 36 5. Phân tích LL  Quá trình phân tích
  • 37. Trang 37 5. Phân tích LL  Định nghĩa First và Follow First() là tập các kí hiệu kết thúc bắt đầu các xâu suy dẫn được từ . Nếu * thì First() Follow(A) là tập các kí hiệu kết thúc mà có thể đứng ngay bên phải A trong một dạng câu
  • 38. Trang 38 5. Phân tích LL
  • 39. Trang 39 5. Phân tích LL  Tính First của một ký hiệu  (1) Nếu X là ký hiệu kết thúc thì First(X) = {X}  (2) Nếu X   là một sản xuất thì First(X)  (3) Nếu X  Y1Y2…Yk là một sản xuất:  First(Y1) {}  First(X)  Nếu   First(Yj) (j<i)  First(Yi){}  First(X).  Nếu  First(Yi) (i = 1, 2, …, k) thì   First(X).  Lặp lại các quy tắc trên cho đến khi không thêm được gì vào First(X)
  • 40. Trang 40 5. Phân tích LL  Tính First của một xâu  = X1X2…Xk  First(X1) {}  First()  Nếu   First(Xj) (j<i)  First(Yi){}  First().  Nếu  First(Xi) (i = 1, 2, …, k) thì   First().
  • 41. Trang 41 5. Phân tích LL  Tính Follow(A).  (1) Đặt $ vào Follow(A) với A là k hiệu bắt đầu  (2) BA (với   ) thì First(){}  Follow(A).  (3) BA (hoặc BA với First()) thì Follow(B)  Follow(A).  Lặp lại các quy tắc trên cho đến khi không thêm được gì vào Follow(A)
  • 42. Trang 42 5. Phân tích LL  Ví dụ: Cho văn phạm sau:  E  TE’  E’  +TE’ |   T’  *FT’ |   T  FT’  F  (E) | a  Tính First và Follow của các kí hiệu không kết thúc
  • 43. Trang 43 5. Phân tích LL  Ví dụ: Tính First
  • 44. Trang 44 5. Phân tích LL  Tính Follow
  • 45. Trang 45 5. Phân tích LL  Định nghĩa văn phạm LL(1)  Một VPPNC là LL(1) khi thỏa 2 điều kiện sau: Nếu A   |  là hai sản xuất phân biệt thì First()First() =  Nếu A * thì First(A)  Follow(A) =   Ví dụ: văn phạm ở ví dụ trên là LL(1)
  • 46. Trang 46 5. Phân tích LL  Thuật toán lập bảng phân tích 1. Đối với mỗi sản xuất A   thực hiện bước 2 và 3 2. Đối với mỗi ký hiệu kết thúc a  First(), thêm A   vào M[A, a] 3. Nếu   First(), thêm A   vào M[A, b] với b  Follow(A). 4. Đặt tất cả các vị trí còn lại của bảng là lỗi.
  • 47. Trang 47 5. Phân tích LL  Ví dụ: với văn phạm cho ở trên, ta có bảng:
  • 48. Trang 48 5. Phân tích LL  Định nghĩa văn phạm LL(1)  Một VPPNC là LL(1) khi mỗi ô trong bảng phân tích không chứa quá một sản xuất.  Ví dụ: Văn phạm cho trong ví dụ trên là LL(1)
  • 49. Trang 49 5. Phân tích LL  Ví dụ: S  A | B A  aA | b B  aB | c  Văn phạm này không là LL(1) vì First(A)  First(B) = {a}
  • 50. Trang 50 5. Phân tích LL  Ví dụ: S  Aa A  aA |   Văn phạm này không là LL(1) vì A   First(A)  Follow(A) = {a}
  • 51. Trang 51 6. Phân tích đệ quy trên xuống  Văn phạm cần phân tích phải là LL(1)  Ta thực hiện xây dựng sơ đồ cú pháp cho từng sản xuất trong văn phạm  Viết từng thủ tục phân tích cho các ký hiệu không kết thúc của văn phạm
  • 52. Trang 52 6. Phân tích đệ quy trên xuống  Xây dựng sơ đồ cú pháp Với a là ký hiệu kết thúc a Với A là ký hiệu không kết thúc A
  • 53. Trang 53 6. Phân tích đệ quy trên xuống  Xây dựng sơ đồ cú pháp A  1 | 2 |…| n
  • 54. Trang 54 6. Phân tích đệ quy trên xuống  Xây dựng sơ đồ cú pháp  : X1X2…Xn  : {X}
  • 55. Trang 55 6. Phân tích đệ quy trên xuống  Ví dụ: xây dựng sơ đồ cú pháp cho văn phạm S  T A A  + T A |  T  F B B  * F B |  F  (S) | a
  • 56. Trang 56 6. Phân tích đệ quy trên xuống  Viết chương trình  Thủ tục getch() đọc một kí hiệu lưu vào biến ch a A If ch=‘a’ then getch() Else Error A; //gọi thủ tục phân tích A If ch in First(1) then T(1) Else if ch in First(2) then T(2) …. Else if ch in First(n) then T(n)
  • 57. Trang 57 6. Phân tích đệ quy trên xuống Begin T(X1); T(X2); ... T(Xn); End; While ch in First(X) do T(X) Chương trình chính Begin Getch(); S; {S kí tự đầu} End.  Viết chương trình
  • 58. Trang 58 6. Phân tích đệ quy trên xuống  Ví dụ:  Procedure S Procedure F; Procedure B; Procedure T; Procedure A;
  • 59. Trang 59 6. Phân tích đệ quy trên xuống  Ví dụ:  Procedure S;  Begin  T; A;  End;  Procedure A;  Begin  if ch = ‘+’ then Begin  getch(); T; A;  End;  End;
  • 60. Trang 60 6. Phân tích đệ quy trên xuống  Ví dụ:  Procedure B  Begin  if ch = ‘*’ then Begin  getch(); F; B;  End;  End;  Procedure T;  Begin  F; B;  End;
  • 61. Trang 61 6. Phân tích đệ quy trên xuống  Ví dụ:  Procedure F;  Begin  if ch=‘(‘ then Begin  getch(); S;  If ch = ‘)’ then getch()  Else Error;  End  Else if ch=‘a’ then getch()  else Error;  End;