1. Trang chủ
  2. » Thể loại khác

CHƯƠNG TRÌNH DỊCH Bài 9: Phân tích văn phạm bằng thuật toán bottom-up

26 82 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

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 635,36 KB

Nội dung

CHƯƠNG TRÌNH DỊCH Bài 9: Phân tích văn phạm thuật toán bottom-up Nội dung Ý tưởng & thuật tốn Ví dụ minh họa Cài đặt bottom-up đơn giản     Cấu trúc luật văn phạm Cấu trúc suy diễn trực tiếp Máy phân tích: hàm hỗ trợ Máy phân tích: hàm Đánh giá bottom-up Bài tập TRƯƠNG XUÂN NAM Phần Ý tưởng & thuật toán TRƯƠNG XUÂN NAM Bottom-up: ý tưởng  Cho văn phạm G với luật sinh: S→E+S|E E→1|2|3|4|5|(S)  Xâu vào: W = (1 + + (3 + 4)) +  Thu gọn W thành S: (1+2+(3+4))+5(E+2+(3+4))+5 (E+E+(3+4))+5(E+E+(E+4))+5 (E+E+(E+E))+5(E+E+(E+S))+5 (E+E+(S))+5(E+E+E)+5 (E+E+S)+5(E+S)+5(S)+5 E+5E+EE+SS TRƯƠNG XUÂN NAM Bottom-up: mục tiêu & ý tưởng  Mục tiêu: số nhiều suy dẫn dạng S * w, thuật toán tìm suy dẫn phải  Ý tưởng chính:  Thử sai quay lui lực tính tốn máy tính  Dị ngược q trình suy dẫn w  wn-1  …  w1  S kĩ thuật thu-gọn: tìm xem wi có chứa vế phải luật hay khơng, có thay phần vế phải vế trái tương ứng  Nếu wi  S chắn cần phải thu-gọn, wi không chứa vế phải luật nhánh thử sai cần quay lui, ngược lại thu-gọn thử tiếp TRƯƠNG XUÂN NAM Bottom-up: thuật toán A = w Với chuỗi A đạt trình lần ngược:  Nếu A = “S”: • Kết luận: q trình tìm kiếm thành cơng • Lưu lại kết (chuỗi biến đổi từ đầu để A) • Kết thúc trình tìm kiếm  * Duyệt tất luật sinh dạng x → α, α chuỗi A thì: • Áp dụng thu-gọn: α A x, ta A’ • Thử bước với chuỗi A = A’  Nếu khơng có phương án thu gọn quay lui TRƯƠNG XUÂN NAM Phần Ví dụ minh họa TRƯƠNG XUÂN NAM Bottom-up: ví dụ Cho tập luật S → AB, A → ab, B → aba Chỉ trình thu gọn chuỗi w = ababa …  Áp dụng luật A → ab, thu gọn ababa  Aaba  Chuỗi Aaba có phương án thu gọn: Aaba  AAa Aaba  AB TRƯƠNG XUÂN NAM Bottom-up: ví dụ  Áp dụng luật A → ab, thu gọn Aaba  AAa  Đến nhánh ngưng khơng thu gọn tiếp  Áp dụng luật B → aba, thu gọn Aaba  AB TRƯƠNG XUÂN NAM Bottom-up: ví dụ  Áp dụng luật S → AB, thu gọn AB  S  Đến điều kiện A = “S” xảy ra:  Thuật toán dừng, kết luận thu gọn thành cơng  Lưu lại q trình suy dẫn ngược TRƯƠNG XUÂN NAM 10 Cấu trúc luật văn phạm class Rule { public string left, right; public Rule(string l, string r) { left = l; right = r; } public string ToFineString() { string s = left + " >"; for (int i = 0; i < right.Length; i++) s += " " + right[i]; return s; } } TRƯƠNG XUÂN NAM 12 Cấu trúc suy diễn trực tiếp class Step { public int ruleNumber, position; public Step(int r, int p) { ruleNumber = r; position = p; } } Giải thích:  Biến ruleNumber lưu số thứ tự luật dùng  Biến position lưu vị trí áp dụng luật TRƯƠNG XN NAM 13 Máy phân tích: hàm hỗ trợ class PTBU { public List rules = new List(); public List steps; string word = null; public void AddRule(string left, string right) { rules.Add(new Rule(left, right)); } public void PrintAllRules() { Console.WriteLine(""); foreach (Rule r in rules) Console.WriteLine(" " + r.ToFineString()); } TRƯƠNG XUÂN NAM 14 Máy phân tích: hàm hỗ trợ public void PrintSteps() { Console.WriteLine("Doan nhan cong sau string w = word; foreach (Step s in steps) { string x = DoBackStep(w, s); } } string DoBackStep(string w, Step s) { string w1 = w.Substring(0, s.position); string w2 = w.Substring(s.position + rules[s.ruleNumber].right.Length); return w1 + rules[s.ruleNumber].left + w2; } TRƯƠNG XUÂN NAM 15 Máy phân tích: hàm public bool Process(string x) { steps = new List(); word = x; return BottomUp(x); } // áp dụng luật k vị trí i chuỗi w? bool CanApplyHere(string w, int i, int k) { string s = w.Substring(i); if (s.Length > rules[k].right.Length) s = s.Substring(0, rules[k].right.Length); return (s == rules[k].right); } TRƯƠNG XUÂN NAM 16 Máy phân tích: hàm public bool BottomUp(string w) { if ("S" == w) return true; for (int i = 0; i < w.Length; i++) for (int k = 0; k < rules.Count; k++) if (CanApplyHere(w, i, k)) { Step st = new Step(k, i); steps.Add(st); if (BottomUp(DoBackStep(w, st))) return true; steps.RemoveAt(steps.Count - 1); } return false; } TRƯƠNG XUÂN NAM 17 Thử nghiệm class Program { public static void Main() { PTBU parser = new PTBU(); parser.AddRule("S", "AB"); parser.AddRule("A", "ab"); parser.AddRule("B", "aba"); parser.PrintAllRules(); if (parser.Process("ababa")) parser.PrintSteps(); } } TRƯƠNG XUÂN NAM 18 Phần Đánh giá bottom-up TRƯƠNG XUÂN NAM 19 Đánh giá bottom-up  Đặc trưng:  Dễ hiểu: cài đặt đơn giản  Chậm: duyệt tồn bộ, khơng có bước cắt nhánh  Không vạn năng: không làm việc với văn phạm có suy dẫn rỗng (A → ) đệ quy (A + A)  Không dễ loại bỏ kết trùng lặp (trường hợp muốn tìm phương án suy dẫn)  Ý tưởng cải tiến:  * Quy hoạch động: sử dụng lại kết duyệt cũ  * Cắt nhánh sớm: dựa đặc trưng số luật để loại bỏ phương án khơng có tương lai TRƯƠNG XN NAM 20 Phần Bài tập TRƯƠNG XUÂN NAM 21 Bài tập Chỉ q trình thu gọn theo phân tích bottom-up chuỗi raid thuộc văn phạm G sau:  S→rXd|rZd  X→oa|ea  Z→ai Chỉ trình thu gọn theo phân tích bottom-up chuỗi (a=(b+a)) thuộc văn phạm G sau:     S→B B→R|(B) R→E=E E→a|b|(E+E) TRƯƠNG XUÂN NAM 22 Bài tập Chỉ q trình thu gọn theo phân tích bottom-up cho chuỗi (5+7)*3 thuộc văn phạm G sau:  E→E+T|T  T→T*F|F  F → ( E ) | số Chỉ q trình thu gọn theo phân tích bottom-up chuỗi true and not false với tập luật:  E → E and T | T  T → T or F | F  F → not F | ( E ) | true | false TRƯƠNG XUÂN NAM 23 Bài tập Chỉ trình thu gọn theo phân tích bottom-up chuỗi abbcbd thuộc văn phạm G có tập luật:  S→aA|bA  A→cA|bA|d Có thể thực phân tích bottom-up chuỗi aaab thuộc văn phạm G hay không? Chỉ phương án xử lý có  S→AB  A→aA|  B→b|bB TRƯƠNG XUÂN NAM 24 Bài tập (lập trình) Hãy chỉnh sửa thuật tốn top-down bottom-up để chúng phương án suy dẫn từ kí hiệu bắt đầu S thành chuỗi đích w * Mã nguồn minh họa hai thuật toán top-down bottom-up dựa đệ quy, chuyển đổi chúng thành dạng không đệ quy (gợi ý: sử dụng stack lưu lại trạng thái chuỗi trung gian trình thử-sai luật sinh) Hãy xây dựng thuật toán chuyển đổi từ suy dẫn trả thuật tốn top-down (bottom-up) thành phân tích cú pháp tương ứng TRƯƠNG XUÂN NAM 25 Bài tập (lập trình) * Hãy điều chỉnh tht tốn top-down (bottom-up) để chúng trả phân tích cú pháp khác (dùng cho văn phạm có nhập nhằng) Nếu văn phạm G đệ quy phải, thuật tốn top-down hay bottom-up trả kết nhanh tính huống:  Chuỗi w khơng thuộc văn phạm G  Chuỗi w có nhiều phân tích cú pháp TRƯƠNG XUÂN NAM 26 ... trình) Hãy chỉnh sửa thuật tốn top-down bottom-up để chúng phương án suy dẫn từ kí hiệu bắt đầu S thành chuỗi đích w * Mã nguồn minh họa hai thuật toán top-down bottom-up dựa đệ quy, chuyển đổi chúng... điều chỉnh thuât toán top-down (bottom-up) để chúng trả phân tích cú pháp khác (dùng cho văn phạm có nhập nhằng) Nếu văn phạm G đệ quy phải, thuật tốn top-down hay bottom-up trả kết nhanh tính... stack lưu lại trạng thái chuỗi trung gian trình thử-sai luật sinh) Hãy xây dựng thuật toán chuyển đổi từ suy dẫn trả thuật tốn top-down (bottom-up) thành phân tích cú pháp tương ứng TRƯƠNG XUÂN

Ngày đăng: 07/12/2022, 01:39

TỪ KHÓA LIÊN QUAN