slide chương 3 trình phiên dịch phân tích cú pháp

60 31 0
slide chương 3 trình phiên dịch phân tích cú pháp

Đ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

CHƢƠNG III Phân tích cú pháp Mục tiêu: -Nắm đƣợc vai trị giai đoạn phân tích cú pháp - Văn phạm phi ngữ cảnh (context- free grammar),cách phân tích cú pháp từ dƣới lên- từ xuống (top-down and bottom-up parsing) -Bộ phân tích cú pháp LR CuuDuongThanCong.com https://fb.com/tailieudientucntt Vai trị phân tích cú pháp • Đây giai đoạn thứ trình biên dịch • Nhiệm vụ chính: Nhận chuỗi token từ phân tích từ vựng xác định chuỗi có đƣợc sinh văn phạm ngơn ngữ nguồn không Source Lexical Token program analyzer Get next token Parser Parse Rest of tree front end Symbol table CuuDuongThanCong.com https://fb.com/tailieudientucntt • Các phƣơng pháp phân tích cú pháp (PTCP) chia làm hai loại: Phân tích từ xuống (top- down parsing) phân tích từ dƣới lên (bottom- up parsing) • Trong q trình biên dịch xuất nhiều lỗi giai đoạn PTCP phân tích cú pháp phải phát thơng báo lỗi xác cho ngƣời lập trình đồng thơi khơng làm chậm chƣơng trình đƣợc viết CuuDuongThanCong.com https://fb.com/tailieudientucntt Văn phạm phi ngữ cảnh • Để định nghĩa cấu trúc ngơn ngữ lập trình ta dùng văn phạm phi ngữ cảnh (Context-free grammars) hay gọi tắt văn phạm • Một văn phạm bao gồm: - Các kí hiệu kết thúc (terminals): Chính - - token Các kí hiệu chƣa kết thúc (nonterminals): Là biến kí hiệu tập xâu kí tự Các luật sinh (productions): Xác định cách thức hình thành xâu từ kí hiệu kết thúc chƣa kết thúc CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ 3.1: Văn phạm sau định nghĩa biểu thức số học đơn giản E E A E | (E) | -E | id A +|-|*|/| Trong E, A kí tự chƣa kết thúc (E cịn kí tự bắt đầu), kí tự cịn lại kí tự kết thúc CuuDuongThanCong.com https://fb.com/tailieudientucntt • Dẫn xuất (derivation): Ta nói A A luật sinh ( đọc dẫn xuất suy ra) • Nếu n ta nói dẫn xuất n • Kí hiệu: * dẫn xuất bƣớc, + dẫn xuất bƣớc • Cho văn phạm G với kí tự bắt đầu S, L(G) ngôn ngữ đƣợc sinh G Mọi xâu L(G) chứa kí hiệu kết thúc G CuuDuongThanCong.com https://fb.com/tailieudientucntt • Ta nói xâu w L(G) S + w, w đƣợc gọi câu (sentence) văn phạm G • Một ngơn ngữ đƣợc sinh văn phạm phi ngữ cảnh đƣợc gọi ngôn ngữ phi ngữ cảnh (context- free language) • Hai văn phạm đƣợc gọi tƣơng đƣơng sinh ngơn ngữ • Nếu S * ( chứa kí hiệu chƣa kết thúc) thí ta nói dạng câu (sentence form) G Một câu dạng câu khơng chứa kí hiệu chƣa kết thúc CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ 3.2: Xâu –(id+id) câu văn phạm ví dụ 3.1 E -E -(E) -(E+E) -(id+E) (id+id) • Một dẫn xuất đƣợc gọi trái (leftmost) bƣớc kí hiệu chƣa kết thúc bên trái đƣợc thay thế, kí hiệu lm Nếu S *lm đƣợc gọi dạng câu trái • Tƣơng tự ta có dẫn xuất phải (rightmost) hay cịn gọi dẫn xuất tắc, kí hiệu rm CuuDuongThanCong.com https://fb.com/tailieudientucntt • Cây phân tích cú pháp (parse tree) dạng biểu diễn hình học dẫn xuất Ví dụ parse tree cho biểu thức –(id+id) là: E E - CuuDuongThanCong.com ( E ) E | id + E | id https://fb.com/tailieudientucntt • Tính mơ hồ văn phạm (ambiguity): Một văn phạm sinh nhiều parse tree cho câu đƣợc gọi văn phạm mơ hồ Nói cách khác văn phạm mơ hồ sinh nhiều dẫn xuất trái dẫn xuất phải cho câu • Loại bỏ mơ hồ văn phạm: Ta xét ví dụ văn phạm sau Stmt CuuDuongThanCong.com if expr then stmt | if expr then stmt else stmt | other https://fb.com/tailieudientucntt 10 Ví dụ 3.12: Giả sử I = {E' E., E E + T} Ta có I' = { E E + T} goto (I, +) = closure(I') bao gồm mục : E T T F F E+.T T*F F (E) id CuuDuongThanCong.com https://fb.com/tailieudientucntt 46 • Giải thuật xây dựng họ tập hợp mục LR(0) (kí hiệu C) văn phạm G' procedure Item (G') begin C := {closure({ S' S}) }; repeat hiệu X) For Với tập mục I C ký văn phạm X cho goto (I, goto(I, X) C thêm goto(I, X) vào C; until Khơng cịn tập hợp mục thêm vào C; 47 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ 3.13: Xây dựng họ tập hợp mục ví dụ 3.11 closure({E' I0: E}) goto (I0, E) I1: goto (I0, T) I2: goto (I0,F) goto (I0, ( ) I4 : I3: CuuDuongThanCong.com E' E E T T F F E' E E T T F E E T T F ·E ·E+T ·T ·T*F ·F · (E) · id E· E·+T T· T·*F F· (· E) ·E+T ·T ·T* F ·F · (E) goto (I0, id) I5: goto (I1, +) I6 : F E T T F F T F F F E E T T F goto (I2, *) I7: goto (I4, E) I8 : goto (I6,T) goto id · E+·T ·T*F ·F · (E) · id T* · F · (E) · id (E ·) E·+T E+T· T·*F T*F· (E) · I9: https://fb.com/tailieudientucntt 48 • Xây dựng SLR parsing table Xây dựng họ tập hợp mục G': C = { I0, I1, , In } Trạng thái i đƣợc xây dựng từ Ii Các action tƣơng ứng trạng thái i xác định nhƣ sau: a) Nếu A a Ii goto (Ii, a) = Ij action[i, a] = "shift j", a ký hiệu kết thúc b) Nếu A Ii action[i, a] = "reduce (A )", với a FOLLOW(A), A S' c) Nếu S' S · Ii action[i, $] = "accept" Nếu action đụng độ đƣợc sinh luật trên, ta nói văn phạm SLR(1) Giải 49 thuật thất bại CuuDuongThanCong.com https://fb.com/tailieudientucntt Xây dựng bảng phân tích LR tắc • LR tắc (canonical LR) kĩ thuật chung để xây dựng LR parsing table cho văn phạm • Một mục LR(1) (item) cặp [A , a] A luật sinh, a- kí tự lookahead kí hiệu kết thúc $ • Nếu a khơng có ý nghĩa nhƣng = việc reduce theo luật A đƣợc thực kí tự đọc vào a 50 CuuDuongThanCong.com https://fb.com/tailieudientucntt • Phép tốn bao đóng (Closure): Giả sử I tập mục LR(1) văn phạm G bao đóng closure(I) tập mục đƣợc xây dựng từ I nhƣ sau: Tất mục I đƣợc thêm vào closure(I) Nếu [A B , a] closure(I), B luật sinh b FIRST( a) thêm [B , b] vào closure(I) chƣa có Lặp lại bƣớc khơng thể thêm vào closure(I) đƣợc • Phép tốn goto: Nếu I tập mục X ký hiệu văn phạm goto(I, X) bao đóng tập hợp mục [A CuuDuongThanCong.com https://fb.com/tailieudientucntt 51 • Giải thuật xây dựng họ tập hợp mục LR(1) (kí hiệu C) văn phạm G' procedure Item (G') begin C := {closure({[ S' S, $]})}; repeat hiệu X) For Với tập mục I C ký văn phạm X cho goto (I, goto(I, X) C thêm goto(I, X) vào C; until Khơng cịn tập hợp mục thêm vào C; 52 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ 3.14: Xây dựng họ tập hợp mục LR(1) cho văn phạm dƣới closure({S' I0: S}) (1) (2) (3) goto (I0, S) I1: goto (I0, C) I2: CuuDuongThanCong.com S' S C C S CC cC d · S, $ · CC, $ · cC, c/d · d, c/d S ·, $ goto (I0, d ) I4: S C C C ·C, $ · cC, $ · d, $ goto (I2, c) I6: C C C c ·C, c/d · cC, c/d goto (I2, I7: · d, c/d d) S' S C C S' goto (I2, C) I5: C d ·, c/d S CC ·, $ C C C c · C, $ · cC, $ · d, $ C d ·, $ C cC ·, c/d C cC ·, $ https://fb.com/tailieudientucntt 53 • Xây dựng canonical LR parsing table Xây dựng họ tập hợp mục LR(1) G': C = {I0, I1, , In } Trạng thái i đƣợc xây dựng từ Ii Các action tƣơng ứng trạng thái i xác định nhƣ sau: a) Nếu [A a , b] Ii goto (Ii, a) = Ij action[i, a] = "shift j", a ký hiệu kết thúc b) Nếu [A , a] Ii action[i, a] = "reduce (A )", A S' c) Nếu [S' S ·, $] Ii action[i, $] = "accept" Nếu action đụng độ đƣợc sinh luật trên, ta nói văn phạm khơng phải LR(1) Giải thuật thất bại 54 Nếu goto (I ,A)=I goto [i, A] = j, A kí hiệu CuuDuongThanCong.com https://fb.com/tailieudientucntt • Canonical LR parsing table cho văn phạm ví dụ 3.14 State Action c d s3 s4 Goto $ S C acc s6 s7 s3 s4 r3 r3 r1 s6 s7 r3 CuuDuongThanCong.com r2 r2 r2 https://fb.com/tailieudientucntt 55 Xây dựng bảng phân tích LALR • LALR phƣơng pháp canonical parsing trạng thái đƣợc nhóm lại với nhờ bảng phân tich cấu trúc có kích thƣớc nhỏ (có thể so sánh với SLR) • Hạt nhân (core) tập hợp mục LR(1) có dạng {[A , a]}, A luật sinh a ký hiệu kết thúc có hạt nhân (core) tập hợp {A } • Trong họ tập hợp mục LR(1) C = {I0, I1, , In} có tập hợp mục có 56 chung hạt nhân CuuDuongThanCong.com https://fb.com/tailieudientucntt • Xây dựng LALR parsing table Xây dựng họ tập hợp mục LR(1) G': C = {I0, I1, , In } Nhóm mục có core C đƣợc C' = {J0, J1, , Jm } Trạng thái i đƣợc xây dựng từ Ji Các action tƣơng ứng trạng thái i xác định tƣơng tự nhƣ canonical LR Nếu action đụng độ đƣợc sinh luật trên, ta nói văn phạm khơng phải LALR(1) Giải thuật thất bại Xây dựng bảng goto : Giả sử J = I1 I2 Ik Vì I1, I2, Ik có chung hạt nhân nên goto (I1,X), goto (I2,X), , goto (Ik,X) có chung hạt nhân 57 CuuDuongThanCong.com https://fb.com/tailieudientucntt • LALR parsing table cho văn phạm ví dụ 3.14 State Action c d s36 s47 Goto $ S C acc s36 s47 36 s36 s47 89 47 r3 r3 r1 89 CuuDuongThanCong.com r3 r2 r2 r2 https://fb.com/tailieudientucntt 58 Công cụ phân tích cú pháp Yacc • Giống nhƣ Lex, Yacc (yet another compiler compiler) câu lệnh sẵn có UNIX công cụ hữu hiệu cho phép xây dựng phân tích cú pháp cách tự động • Yacc đƣợc tạo S C Johnson vào năm đầu thập kỉ 70 • Yacc sử dụng phƣơng pháp LALR CuuDuongThanCong.com https://fb.com/tailieudientucntt 59 Yacc specification translate.y y.tab.c input CuuDuongThanCong.com Yacc compiler y.tab.c C a.out compiler a.out output https://fb.com/tailieudientucntt 60 ... 28 Phân tích cú pháp từ dƣới lên • Giới thiệu kiểu phân tích cú pháp từ dƣới lên tổng quát gọi phân tích cú pháp Shift –Reduce • Một phƣơng pháp tổng quát kỹ thuật Shift - Reduce phân tích cú pháp. .. https://fb.com/tailieudientucntt Phân tích cú pháp từ xuống • Phân tích cú pháp (PTCP) từ xuống đƣợc xem nhƣ cố gắng tìm kiếm dẫn xuất trái cho chuỗi nhập Nó xem nhƣ cố gắng xây dựng phân tích cú pháp nút gốc phát... phƣơng pháp phân tích cú pháp (PTCP) chia làm hai loại: Phân tích từ xuống (top- down parsing) phân tích từ dƣới lên (bottom- up parsing) • Trong q trình biên dịch xuất nhiều lỗi giai đoạn PTCP phân

Ngày đăng: 01/09/2021, 20:03

Hình ảnh liên quan

thức hình thành các xâu từ các kí hiệu kết thúc và chƣa kết thúc - slide chương 3 trình phiên dịch phân tích cú pháp

th.

ức hình thành các xâu từ các kí hiệu kết thúc và chƣa kết thúc Xem tại trang 4 của tài liệu.
dạng biểu diễn hình học của dẫn xuất. Ví dụ parse tree cho biểu thức –(id+id) là: - slide chương 3 trình phiên dịch phân tích cú pháp

d.

ạng biểu diễn hình học của dẫn xuất. Ví dụ parse tree cho biểu thức –(id+id) là: Xem tại trang 9 của tài liệu.
định các tập hợp cho phép xây dựng bảng phân tích M và phục hồi lỗi - slide chương 3 trình phiên dịch phân tích cú pháp

nh.

các tập hợp cho phép xây dựng bảng phân tích M và phục hồi lỗi Xem tại trang 25 của tài liệu.
4. Ô còn trống trong bảng tƣơng ứng với lỗi (error). - slide chương 3 trình phiên dịch phân tích cú pháp

4..

Ô còn trống trong bảng tƣơng ứng với lỗi (error) Xem tại trang 28 của tài liệu.
• Mô hình của LR parser - slide chương 3 trình phiên dịch phân tích cú pháp

h.

ình của LR parser Xem tại trang 36 của tài liệu.
• Cấu hình (configuration) của một bộ phân - slide chương 3 trình phiên dịch phân tích cú pháp

u.

hình (configuration) của một bộ phân Xem tại trang 38 của tài liệu.
• Có 3 phƣơng pháp xây dựng một bảng - slide chương 3 trình phiên dịch phân tích cú pháp

3.

phƣơng pháp xây dựng một bảng Xem tại trang 41 của tài liệu.
Xây dựng bảng phân tích LR chính tắc - slide chương 3 trình phiên dịch phân tích cú pháp

y.

dựng bảng phân tích LR chính tắc Xem tại trang 50 của tài liệu.
nhau nhờ đó bảng phân tich cấu trúc có kích thƣớc nhỏ hơn (có thể so sánh với SLR) - slide chương 3 trình phiên dịch phân tích cú pháp

nhau.

nhờ đó bảng phân tich cấu trúc có kích thƣớc nhỏ hơn (có thể so sánh với SLR) Xem tại trang 56 của tài liệu.
3. Xây dựng bảng goto: Giả sử J = I1 I 2. Ik . Vì I 1, I2, ... Ikcó chung hạt nhân nên goto (I1 ,X), goto  (I 2,X), ..., goto (Ik,X) cũng có chung hạt nhân - slide chương 3 trình phiên dịch phân tích cú pháp

3..

Xây dựng bảng goto: Giả sử J = I1 I 2. Ik . Vì I 1, I2, ... Ikcó chung hạt nhân nên goto (I1 ,X), goto (I 2,X), ..., goto (Ik,X) cũng có chung hạt nhân Xem tại trang 57 của tài liệu.

Tài liệu cùng người dùng

Tài liệu liên quan