1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng xây dựng chương trình dịch bài 8 văn phạm ll(k)

21 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Bài Văn phạm LL(k) Phân cấp ngôn ngữ phi ngữ cảnh Ngơn ngữ LL(k) • Xem trước k ký hiệu xâu vào để định sản xuất sử dụng • Được sinh nhờ văn phạm LL(k) FIRSTk(a) Định nghĩa : Cho văn phạm G phi ngữ cảnh, số nguyên dương k , a xâu bao gồm ký hiệu kết thúc không kết thúc FIRSTk() tập xâu x gồm k ký hiệu kết thúc trái xâu suy dẫn từ  (Kể trường hợp x khơng có đủ k ký hiệu  suy dẫn x , khơng cịn ký hiệu sau x) FIRSTk(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 |x| = k a =>* x |x| < k} ( Tập xâu x ỴS* có k ký hiệu trái suy dẫn từ  ( Kể trường hợp x khơng có đủ k ký hiệu  x , khơng cịn ký hiệu sau x)) FOLLOWk(a) k ký hiệu kết thúc tiếp sau xâu suy dẫn từ  Đặc biệt , A ký hiệu không kết thúc, S suy dẫn bA FOLLOW1(A) ={$} FOLLOWk(a) FOLLOWk(a) = {x Ỵ S* | S ị* bad v xẻ FIRSTk(d)} c bit , a =A ẻ D* , S ị* bA thỡ FOLLOW1(A) ={$} Văn phạm LL(k) Định nghĩa văn phạm phi ngữ cảnh G = (S, D, P, S) LL(k) với k cho trước với cặp suy dẫn trái S =>* xAa => xb1a =>* xZ1 S =>* xAa => xb2a =>* xZ2 Nếu FIRSTk(Z1) = FIRSTk(Z2) b1 = b2 Ví dụ Văn phạm G với sản xuất : S ® aAS | b A ® bSA | a LL(1) Văn phạm LL(1) đơn giản Văn phạm G = (S, D, P, S) LL(1) đơn giản sản xuất văn phạm có dạng A ® a1a1 | a2a2 | anan, Ỵ S 1£ i £ n Trong ¹ aj với i ¹ j Đ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) LL(1) tập A- sản xuất P có dạng • A ® a1 | a2 | | an , n ³ thoả mãn FIRST1(ai) Ç FIRST1(aj) = ặ , i j ã Nu ị * e thỡ FIRST1(aj) ầ FOLLOW1(A) =ặ jại iu kiện LL(1) sơ đồ cú pháp • Ở lối rẽ, nhánh phải bắt đầu ký hiệu khác • Nếu biểu đồ có chứa đường rỗng ký hiệu đứng sau ký hiệu biểu diễn biểu đồ phải khác ký hiệu đứng đầu nhánh sơ đồ Kiểm tra điều kiện LL(1) văn phạm KPL 02) 03) ::= KW_CONST ::= • FIRST(VP1) = {KW_CONST} • FIRST(VP2) ={KW_TYPE, KW_VAR, KW_PROCEDURE, KW_FUNCTION, KW_BEGIN} • FIRST(VP1) ầ FIRST(VP2) = ặ ã Cỏc sn xut ca thỏa điều kiện LL(1) Lệnh 49) 50) 51) 52) 53) 54) 55) • • • • • • • Statement Statement Statement Statement Statement Statement Statement ::= ::= ::= ::= ::= ::= ::= AssignSt CallSt GroupSt IfSt WhileSt ForSt 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} 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) 87) 88) 89) Factor Factor Factor Factor ::= ::= ::= ::= UnsignedConstant VP3 Variable VP4 FunctionApptication VP5 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 sản xuât thỏa đk LL(2) Một số sơ đồ KPL thỏa điều kiện LL(1) Statement thỏa điều kiện LL(1)? Biến đổi sơ đồ cú pháp • Nhánh assignst bắt đầu IDENTIFIER • Nhánh rỗng ® FOLLOW(statement) ={; , ELSE, END} ® LL(1) Sơ đồ cú pháp assignst • Thỏa điều kiện LL(2) Sơ đồ cú pháp factor • Khó kiểm tra điều kiện LL(1) unsignedconstant, variable functionidentifier định danh • Cần chuyển đổi dạng tường minh Việc phân biệt định danh đóng vai trị (hằng, biến, hàm) phân tích ngữ nghĩa đảm nhiệm Factor khơng thỏa điều kiện LL(1) ® LL(2)

Ngày đăng: 10/10/2023, 18:29

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w