Bài 8
Trang 3Ngơn ngữ LL(k)
• Xem trước k ký hiệu trên xâu vào để quyết định sản xuất được sử dụng
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
Trang 5FIRSTk(a)
Định nghĩa : Cho văn phạm G = (S, D, P, S), số
ngun dương k , a Ỵ V*
FIRSTk(a) = { x Ỵ S* | a =>*xb và |x| = k hoặc a =>* x và |x| < k}
( Tập các xâu x ỴS* có k ký hiệu trái nhất suy dẫn từ
Trang 6FOLLOWk(a)
k ký hiệu kết thúc đầu tiên tiếp sau xâu được suy dẫn từ .
Trang 7FOLLOWk(a)
FOLLOWk(a) = {x ẻ S* | S ị* bad v xỴ FIRSTk(d)}
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 =>* xZ1S =>* xAa => xb2a =>* xZ2
Trang 9Ví dụ
Văn phạm G với các sản xuất :S ® aAS | b
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
Trang 11Điều kiện nhận biết văn phạm LL(1)
• Định lý Văn phạm G = (S, D, P, S) là LL(1) khi và
chỉ khi mọi tập A- sản xuất trong P có dạng • A ® a1 | a2 | | an , n ³ 2 thoả mãn
FIRST1(ai) ầ FIRST1(aj) = ặ , i ạ j
ã Nu ai Þ * e thì
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
Trang 13Kiểm tra điều kiện LL(1) trên văn phạm KPL
02) <Block> ::= KW_CONST <ConstDecl><ConstDecls> <Block2>03) <Block> ::= <Block2>
• FIRST(VP1) = {KW_CONST}
• FIRST(VP2) ={KW_TYPE, KW_VAR, KW_PROCEDURE, KW_FUNCTION, KW_BEGIN}
ã FIRST(VP1) ầ FIRST(VP2) = ặ
Trang 14Lệnh49) Statement ::= AssignSt50) Statement ::= CallSt51) Statement ::= GroupSt52) Statement ::= IfSt53) Statement ::= WhileSt54) Statement ::= ForSt55) Statement ::= e• FIRST (AssignSt)={TK_IDENT}• FIRST (CallSt)={KW_CALL}• FIRST (GroupSt)={KW_BEGIN}• FIRST (IfSt)={KW_IF}• FIRST (WhileSt)={KW_WHILE}• FIRST (ForSt)={KW_FOR}
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 ExpressionVP2
Và
86) Factor ::= UnsignedConstant VP3
87) Factor ::= Variable VP4
88) Factor ::= FunctionApptication VP5
89) Factor ::= SB_LPAR Expression SB_RPAR VP6
FIRST(VP1) = {TK_IDENT} = FIRST(VP2)
FIRST(VP3) = {TK_NUMBER,TK_CHAR, TK_IDENT}FIRST(VP4) = {TK_IDENT}
FIRST(VP5) = {TK_IDENT}FIRST(VP6) = {SB_LPAR}
Trang 18Biến đổi sơ đồ cú pháp
• Nhánh assignst bắt đầu bằng IDENTIFIER
Trang 19Sơ đồ cú pháp của assignst
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