FIRSTk a Định nghĩa : Cho văn phạm G phi ngữ cảnh, số nguyên dương k , a là một xâu bao gồm ký hiệu kếtthúc và không kết thúc FIRSTk là tập các xâu x gồm k ký hiệu kết thúc trái nhất củ
Trang 1Bài 8
Văn phạm LL(k)
Trang 2Phân cấp các ngôn ngữ phi ngữ cảnh
Trang 4FIRSTk( a )
Định nghĩa : Cho văn phạm G phi ngữ cảnh, số
nguyên dương k , a là một xâu bao gồm ký hiệu kếtthúc và không kết thúc
FIRSTk() là tập các xâu x gồm k ký hiệu kết thúc trái nhất của các xâu suy dẫn từ (Kể cả trường hợp x không có đủ k ký hiệu nhưng suy dẫn ra x , không còn ký hiệu nào sau x)
Trang 5( Tập các xâu x ÎS* có k ký hiệu trái nhất suy dẫn từ
( Kể cả trường hợp x không có đủ k ký hiệu nhưng x , không còn ký hiệu nào sau x))
Trang 7FOLLOW k (a)
FOLLOWk(a) = {x Î S* | S Þ* bad và xÎ FIRSTk(d)}
Đặc biệt , khi a =A Î D* , S Þ* bA thì FOLLOW1(A)
={$}
Trang 8Văn phạm LL(k)
Định nghĩa văn phạm phi ngữ cảnh
G = (S, D, P, S) là LL(k) với k cho trước nếu vớimọi cặp suy dẫn trái
S =>* xAa => xb1a =>* xZ1
S =>* xAa => xb2a =>* xZ2Nếu FIRSTk(Z1) = FIRSTk(Z2) thì b1 = b2
Trang 10Văn phạm LL(1) đơn giản
Văn phạm G = (S, D, P, S) là LL(1) đơn giản nếu mọi sản xuất của văn phạm có dạng
A ® a1a1 | a2a2 | anan, ai Î S 1£ i £ n
Trong đó ai ¹ aj với i ¹ j
Trang 11Điều kiện nhận biết văn phạm LL(1)
Trang 12Điều kiện LL(1) trên sơ đồ cú pháp
• Ở mỗi lối rẽ, các nhánh phải bắt đầu bằng các ký hiệu khác nhau
• Nếu biểu đồ có chứa một đường rỗng thì mọi ký
hiệu đứng sau ký hiệu được biểu diễn bởi biểu đồ phải khác các ký hiệu đứng đầu các nhánh của sơ đồ
Trang 13Kiểm tra điều kiện LL(1) trên văn
Trang 15Một số sản xuất vi phạm đk LL(1)
56) AssignSt ::= Variable SB_ASSIGN Expession VP1
57) AssignSt ::= FunctionIdent SB_ASSIGN Expression VP2
Và
FIRST(VP1) = {TK_IDENT} = FIRST(VP2)
FIRST(VP3) = {TK_NUMBER,TK_CHAR, TK_IDENT}
Trang 16Một số sơ đồ KPL thỏa điều kiện LL(1)
Trang 17Statement thỏa điều kiện LL(1)?
Trang 18Biến đổi sơ đồ cú pháp
• Nhánh assignst bắt đầu bằng IDENTIFIER
• Nhánh rỗng ® FOLLOW(statement) ={; , ELSE, END} ® LL(1)
Trang 19Sơ đồ cú pháp của assignst
• Thỏa điều kiện LL(2)
Trang 20Sơ đồ cú pháp của factor
• Khó kiểm tra điều kiện LL(1) khi unsignedconstant, variable và functionidentifier đều có thể là một định danh
• Cần chuyển đổi về dạng tường minh hơn Việc phân biệt định danh đóng vai trò gì (hằng, biến, hàm) do bộ phân tích ngữ
nghĩa đảm nhiệm
Trang 21Factor không thỏa điều kiện LL(1) ® LL(2)