intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Xây dựng chương trình dịch: Bài 8 - Văn phạm LL(k)

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:21

7
lượt xem
3
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng "Xây dựng chương trình dịch: Bài 8 - Văn phạm LL(k)" cung cấp cho người học các kiến thức: phân cấp các ngôn ngữ phi ngữ cảnh; ngôn ngữ LL(k); văn phạm LL đơn giản; điều kiện nhận biết văn phạm LL; điều kiện LL trên sơ đồ cú pháp; kiểm tra điều kiện LL trên văn phạm KPL;... Mời các bạn cùng tham khảo nội dung chi tiết.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Xây dựng chương trình dịch: Bài 8 - Văn phạm LL(k)

  1. Bài 8. Văn phạm LL(k)
  2. Phân cấp các ngôn ngữ phi ngữ cảnh
  3. Ngô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 • Được sinh ra nhờ văn phạm LL(k)
  4. 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ết thú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)
  5. FIRSTk(a) Định nghĩa : Cho văn phạm G = (S, D, P, S), số nguyên 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ừ  ( 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))
  6. FOLLOWk(a) k ký hiệu kết thúc đầu tiên tiếp sau xâu được suy dẫn từ . Đặc biệt , khi A là ký hiệu không kết thúc, S suy dẫn ra bA thì FOLLOW1(A) ={$}
  7. FOLLOWk(a) FOLLOWk(a) = {x Î S* | S Þ* bad và xÎ FIRSTk(d)} Đặc biệt , khi a =A Î D* , S Þ* bA thì FOLLOW1(A) ={$}
  8. Vă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ới mọi cặp suy dẫn trái S =>* xAa => xb1a =>* xZ1 S =>* xAa => xb2a =>* xZ2 Nếu FIRSTk(Z1) = FIRSTk(Z2) thì b1 = b2
  9. Ví dụ Văn phạm G với các sản xuất : S ® aAS | b A ® bSA | a là LL(1)
  10. Vă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
  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 • Nếu ai Þ * e thì FIRST1(aj) Ç FOLLOW1(A) =Æ j¹i
  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ơ đồ
  13. Kiểm tra điều kiện LL(1) trên văn phạm KPL 02) ::= KW_CONST 03) ::= • FIRST(VP1) = {KW_CONST} • FIRST(VP2) ={KW_TYPE, KW_VAR, KW_PROCEDURE, KW_FUNCTION, KW_BEGIN} • FIRST(VP1) Ç FIRST(VP2) = Æ • Các sản xuất của thỏa điều kiện LL(1)
  14. Lệnh 49) Statement ::= AssignSt 50) Statement ::= CallSt 51) Statement ::= GroupSt 52) Statement ::= IfSt 53) Statement ::= WhileSt 54) Statement ::= ForSt 55) 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} • FOLLOW (Statement) ={SB_SEMICOLON, KW_END, KW_ELSE}
  15. Mộ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} Có thể chứng minh các sản xuât này thỏa đk LL(2)
  16. Một số sơ đồ KPL thỏa điều kiện LL(1)
  17. Statement thỏa điều kiện LL(1)?
  18. Biế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)
  19. Sơ đồ cú pháp của assignst • Thỏa điều kiện LL(2)
  20. Sơ đồ 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2