Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

137 2K 18
Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

Đ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

IT4073:NGÔN NGỮ PHƯƠNG PHÁP DỊCH Phạm Đăng Hải haipd@soict.hut.edu.vn Chương 3: Phân tích cú pháp Bài tốn phân tích cú pháp Phương pháp phân tích cú pháp quay lui Phương pháp phân tích bảng Phương pháp phân tích cú pháp tất định Phân tích cú pháp cho PL/0 02/24/14 Bài toán phân tích cú pháp Bài tốn đặt Cho – Văn phạm phi ngữ cảnh G Trong chương trình dịch, xâu ω chuỗi token thu từ giai đoạn Program Vidu; trước – phân tích từ vựng G = (VT, VN, P, S) – Xâu ω V*T Hỏi – ω∈ L(G)? Begin X := 10 Nếu ω ∈ L(G) End PROGRAM IDENT SEMICOLON BEGIN IDENT ASSIGN NUMBER END PERIOD – Chỉ sản xuất sử dụng để sinh ω – Cấu trúc nên suy dẫn 02/24/14 Bài tốn phân tích cú pháp Phương pháp phân tích • Kiểm tra xâu phân tích từ trái qua phải – Kiểm tra ký hiệu trái xâu cần phân tích – Tới ký hiệu tiếp, Cho tới ký hiệu cuối • Phương pháp xây dựng phân tích – Trên xuống (Top-down): S ⇒ * ω? – Dưới lên (Bottom-up): ω *⇐ S? • Phương pháp lựa chọn sản xuất (A→α1|…|αn) – Quay lui (backtracking) • Thử sản xuất – Tất định (deterministic) 02/24/14 • Xác định sản xuất thích hợp Bài tốn phân tích cú pháp Phân tích trái • Phân tích trái xâu α dãy sản xuất sử dụng suy dẫn trái từ S α • Các sản xuất đánh số thứ tự 1, p – Phân tích danh sách số từ đến p • Ví dụ cho văn phạm E → T+E E → T T → F* T T → F F → (E) F → a 02/24/14 Xét xâu a*(a+a) E ⇒2 T ⇒3 F*T ⇒6 a*T ⇒4 a*F ⇒5a*(E) ⇒1 a*(T+E) ⇒4 a*(F+E) ⇒6 a*(a+E) ⇒2 a*(a+T) ⇒4 a*(a+F) ⇒6 a*(a+a) Phân tích trái xâu a*(a+a) 23645146246 Chương 3: Phân tích cú pháp Bài tốn phân tích cú pháp Phương pháp phân tích cú pháp quay lui Phương pháp phân tích bảng Phương pháp phân tích cú pháp tất định Phân tích cú pháp cho PL/0 02/24/14 Phương pháp phân tích quay lui Giới thiệu • Tư tưởng chủ yếu giải thuật – Xây dựng phân tích cú pháp (cây suy dẫn) cho xâu ω • Thuật tốn Top-down – Đi từ nút gốc tới nút • Thuật tốn Bottom –up – Q trình phân tích gạt thu gọn 02/24/14 Phương pháp phân tích quay lui Phân tích Top-down Cho VPPNC G = (VT, VN, P, S) ∀ sản xuất A→α1|…|αn đánh số 1, 2, Xây dựng phân tích cho xâu ω: Khởi tạo - Xây dựng có nút gốc S - S (Start symbol): Ký hiệu khởi đầu - Gọi ký hiệu cần phân tích ký hiệu xâu ω - Gọi S nút hoạt động, 02/24/14 Phương pháp phân tích quay lui Phân tích Top-down Tạo nút (một cách đệ quy)  Nút hoạt động ký hiệu không kết thúc A – Chọn sản xuất A chưa áp dụng: A →X1X2 .Xk (k ≥0) – Tạo k trực tiếp A với nhãn X1, X2, Xk – Nếu k > 0, Lấy X1 làm nút hoạt động – Nếu k = 0, (sản xuất A → ε), lấy nút bên phải (ngay sau) A nút hoạt động Tiếp tục thực bước 02/24/14 Phương pháp phân tích quay lui Phân tích Top-down Tạo nút (một cách đệ quy)  Nút hoạt động ký hiệu kết thúc a - So sánh a với ký hiệu cần phân tích – Nếu trùng • Nút hoạt động nút bên phải a • Ký hiệu cần phân tích ký hiệu xâu vào – Nếu không trùng • Quay lại bước sử dụng sản xuất thử sản xuất tiếp – Nếu hết khả năng, quay lại bước trước 02/24/14 10 Phương pháp phân tích tất định Phân tích Bottom-Up • Văn phạm LL(k) • Văn phạm LL(1) • Phân tích xem trước • Phân tích đệ quy xuống 02/24/14 123 Chương 3: Phân tích cú pháp Giới thiệu Phương pháp phân tích cú pháp quay lui Phương pháp phân tích bảng Phương pháp phân tích cú pháp tất định Xây dựng phân tích cú pháp cho PL/0 02/24/14 124 Phương pháp phân tích tất định Nguyên tắc • Văn phạm PL/0 LL(1) – Sử dụng phương pháp phân tích xem trước • Bảng phân tích lớn – Dùng phương pháp đệ quy xuống • Bộ phân tích cú pháp – Gồm tập thủ tục, thủ tục ứng với sơ đồ – Luôn đọc trước ký hiệu/từ tố • Xem trước từ tố cho phép chọn đường gặp điểm rẽ nhánh sơ đồ cú pháp – Khi thoát khỏi thủ tục triển khai đích, ln có từ tố đọc dơi 02/24/14 125 Phương pháp phân tích tất định Các thủ tục • Token * getToken() //phân tích từ vựng • void error (const char msg[]);//Báo lỗi • void factor(void);//phân tích nhân tử • void term(void);//phân tích số hạng • void expression(void); // phân tích biểu thức • void condition(void); // phân tích điều kiện • void statement(void); // phân tích câu lệnh • void block(void); // phân tích khối câu lệnh • void basictype(void); // kiểu biến • void program(); 02/24/14 //Phân tích chương trình 126 Phương pháp phân tích tất định Term void term() { factor(); while(Token == times || Token == slash) { getToken(); factor(); } } 02/24/14 127 Phương pháp phân tích tất định Term (Thực hành KPL) ::= := Times := Slash void Term(){ Factor(); Term2(); } 02/24/14 FOLLOW( := ε void Term2(){ switch(Token){ case Times: Eat(Times); Factor(); Term2(); break; case Slash:… case KW_TO : case KW_DO : …………… case KW_END : break; Default: Error(Invalid Term) } 128 Phương pháp phân tích tất định Expression void expression() { if(Token== plus || Token == minus) getToken(); term(); while(Token == plus || Token == minus){ getToken(); term(); } } 02/24/14 129 Phương pháp phân tích tất định Expression (Thực hành KPL) ::= Plus ::= Minus ::= ::= ::=Plus ::=Minus ::= ε void compileExpression2() { compileTerm(); compileExpression3(); } 02/24/14 void compileExpression() { switch (Token) { case SB_PLUS: eat(SB_PLUS); Expression2(); break; case SB_MINUS: eat(Minus); Expression2(); break; default: Expression2(); } } 130 Phương pháp phân tích tất định Expression (Thực hành KPL) void compileExpression3() { switch (Token) { case Plus: eat(Plus); compileTerm(); compileExpression3(); break; case Minus: eat(Minus); compileTerm(); compileExpression3(); break; 02/24/14 // check the FOLLOW set case KW_TO: case KW_DO: case SB_RPAR: case SB_COMMA: case SB_EQ: case SB_NEQ: case SB_LE: case SB_LT: case SB_GE: case SB_GT: case SB_RSEL: case SB_SEMICOLON: case KW_END: case KW_ELSE: case KW_THEN: break; default: Error(Lỗi biểu thức); } }//compileExpression() 131 Phương pháp phân tích tất định Condition void condition() { expression(); if(Token == eql || Token == neq || Token == lss || Token == leq || Token == grt || Token == geq){ getsym(); expression(); }else { error("condition: syntax error"); } } 02/24/14 132 Phương pháp phân tích tất định Statement 02/24/14 133 Phương pháp phân tích tất định Statement void statement() { if(Token==Ident){ //variable := getToken(); //array variable ? if(Token==assign){ getToken(); Expresion(); }else Error(“Thieu toan tu gan”) } else… } 02/24/14 134 Phương pháp phân tích tất định Statement if (Token == KW_CALL){ getToken(); if(Token == Ident){ if(Token == Lparen){ getToken(); Expression(); while(Token==comma){ getToken(); Expression(); } if(Token = Rparen) getToken() else Error(“Thiếu dấu đóng ngoặc); } }else Error(“Thiếu tên thủ tục/hàm”); }else 02/24/14 135 Phương pháp phân tích tất định Statement if (Token == KW_BEGIN){ getToken() Statement(); while (Token == Semicolon) { getToken(); Statement(); } if(Token==KW_END) getToken() else Error(“Thiếu từ khóa End”); }else 02/24/14 136 Phương pháp phân tích tất định Program void Program(){ if(Token=KW_PROGRAM){ getToken(); if (Token==Ident){ getToken(); if(Token==Semicolon){ getToken(); Block(); if(Token==Period) printf(“Thành công”); else Error(“Thiếu dấu ”); }else Error(“Thiếu dấu chấm phẩy”); }else Error(“Thiếu tên chương trình”); }else Error(Thiếu từ khóa Program) } 02/24/14 137 .. .Chương 3: Phân tích cú pháp Bài tốn phân tích cú pháp Phương pháp phân tích cú pháp quay lui Phương pháp phân tích bảng Phương pháp phân tích cú pháp tất định Phân tích cú pháp cho PL/0... a*(a+a) Phân tích trái xâu a*(a+a) 23645146246 Chương 3: Phân tích cú pháp Bài tốn phân tích cú pháp Phương pháp phân tích cú pháp quay lui Phương pháp phân tích bảng Phương pháp phân tích cú pháp. .. 02/24/14 33 Chương 3: Phân tích cú pháp Giới thiệu Phương pháp phân tích cú pháp quay lui Phương pháp phân tích bảng Phương pháp phân tích cú pháp tất định Xây dựng phân tích cú pháp cho PL/0

Ngày đăng: 24/02/2014, 07:20

Hình ảnh liên quan

3. Phương pháp phân tích bảng - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

3..

Phương pháp phân tích bảng Xem tại trang 2 của tài liệu.
3. Phương pháp phân tích bảng - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

3..

Phương pháp phân tích bảng Xem tại trang 6 của tài liệu.
Hình trạng của giải thuật - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

Hình tr.

ạng của giải thuật Xem tại trang 17 của tài liệu.
– Bắt đầu từ hình trạng đầu, tính liên tiếp các hình trạng tiếp theo cho đến khi khơng tính  được nữa. - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

t.

đầu từ hình trạng đầu, tính liên tiếp các hình trạng tiếp theo cho đến khi khơng tính được nữa Xem tại trang 18 của tài liệu.
Hình trạng của giải thuật Bộ bốn (s, i, α, β) - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

Hình tr.

ạng của giải thuật Bộ bốn (s, i, α, β) Xem tại trang 27 của tài liệu.
3. Phương pháp phân tích bảng - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

3..

Phương pháp phân tích bảng Xem tại trang 34 của tài liệu.
Giải thuật CYK - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

i.

ải thuật CYK Xem tại trang 36 của tài liệu.
– Tạo bảng phân tích tam giác theo xâu cần phân tích - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

o.

bảng phân tích tam giác theo xâu cần phân tích Xem tại trang 36 của tài liệu.
Giải thuật CYK→Mơ tả bảng - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

i.

ải thuật CYK→Mơ tả bảng Xem tại trang 40 của tài liệu.
Giải thuật CYK→Xây dựng bảng - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

i.

ải thuật CYK→Xây dựng bảng Xem tại trang 41 của tài liệu.
3. Phương pháp phân tích tất định - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

3..

Phương pháp phân tích tất định Xem tại trang 42 của tài liệu.
Giải thuật CYK→Xây dựng bảng→Ví dụ - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

i.

ải thuật CYK→Xây dựng bảng→Ví dụ Xem tại trang 42 của tài liệu.
• Là q trình ngược với xây dựng bảng - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

q.

trình ngược với xây dựng bảng Xem tại trang 43 của tài liệu.
3. Phương pháp phân tích bảng - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

3..

Phương pháp phân tích bảng Xem tại trang 61 của tài liệu.
• Hình trạng của thuật tốn là bộ 3 (x#,α#, π) - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

Hình tr.

ạng của thuật tốn là bộ 3 (x#,α#, π) Xem tại trang 107 của tài liệu.
3. Phương pháp phân tích bảng - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

3..

Phương pháp phân tích bảng Xem tại trang 124 của tài liệu.
• Bảng phân tích lớn - Tài liệu NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 3: Phân tích cú pháp docx

Bảng ph.

ân tích lớn Xem tại trang 125 của tài liệu.

Từ khóa liên quan

Mục lục

  • IT4073:NGÔN NGỮ và PHƯƠNG PHÁP DỊCH

  • Chương 3: Phân tích cú pháp

  • Bài toán đặt ra

  • Phương pháp phân tích

  • Phân tích trái

  • Slide 6

  • Giới thiệu

  • Phân tích Top-down

  • Slide 9

  • Slide 10

  • Slide 11

  • Slide 12

  • Phân tích Top-down  Ví dụ

  • Phân tích Top-down  Bài tập

  • Giải thuật phân tích Top-down quay lui (1/8)

  • Giải thuật phân tích Top-down quay lui (2/8)

  • Giải thuật phân tích Top-down quay lui (3/8)

  • Giải thuật phân tích Top-down quay lui (4/8)

  • Giải thuật phân tích Top-down quay lui (5/8)

  • Giải thuật phân tích Top-down quay lui (6/8)

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

  • Đang cập nhật ...

Tài liệu liên quan