Bài thực hành 1 học phần chương trình dịch phân biệt các văn phạm theo tiêu chuẩn của chomsky

14 86 0
Bài thực hành 1 học phần chương trình dịch  phân biệt các văn phạm theo tiêu chuẩn của chomsky

Đ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

TRƯỜNG ĐẠI HỌC PHENIKAA KHOA CÔNG NGHỆ THÔNG TIN BÀI THỰC HÀNH Học Phần: Chương trình dịch À NỘI – 201 Hà Nội - 2023 Bài Thực Hành 1 Phân biệt văn phạm theo tiêu chuẩn Chomsky? - Văn phạm loại 0: Là tập hợp tất ngôn ngữ hợp lệ Một văn phạm thuộc loại không bị giới hạn quy tắc nào, biểu diễn ngơn ngữ hợp lệ - Văn phạm loại (Văn phạm phụ thuộc vào ngữ nghĩa): Là tập hợp ngôn ngữ biểu diễn ngữ pháp bậc cao hơn, có phụ thuộc vào ngữ nghĩa, gọi Ngữ pháp trưởng thành Ngữ pháp phụ thuộc vào ngữ nghĩa - Văn phạm loại (Văn phạm miễn định): Là tập hợp ngơn ngữ biểu diễn ngữ pháp miễn định Ngữ pháp context-free - Văn phạm loại (Văn phạm hữu hạn): Là tập hợp ngơn ngữ biểu diễn ngữ pháp hữu hạn Ngữ pháp regular Điểm khác biệt loại văn phạm chủ yếu liên quan đến mức độ giới hạn cách biểu diễn ngôn ngữ Văn phạm loại loại văn phạm mạnh nhất, khơng có giới hạn việc biểu diễn ngôn ngữ, văn phạm loại loại văn phạm yếu nhất, có giới hạn nghiêm ngặt cách biểu diễn ngôn ngữ Sự tương đương văn phạm Ơtơmát? Về bản, văn phạm ơtơmát liên quan đến việc mô tả đại diện cho ngôn ngữ tự nhiên Văn phạm quy tắc mô tả cách mà từ câu tạo thành ngôn ngữ cụ thể Văn phạm bao gồm quy tắc ngữ pháp cú pháp để xây dựng câu ngữ pháp Các văn phạm thường sử dụng lĩnh vực xử lý ngơn ngữ tự nhiên, trí tuệ nhân tạo, lập trình máy tính Ơtơmát cấu trúc tương tự máy tính tập hợp luật để đọc sản xuất chuỗi từ ngơn ngữ Ơtơmát sử dụng để phân tích cú pháp tự động sinh câu ngôn ngữ cụ thể Các ôtômát thường sử dụng lĩnh vực xử lý ngơn ngữ tự nhiên, máy học, trí tuệ nhân tạo Tóm lại, văn phạm ơtơmát công cụ quan trọng việc mô tả đại diện cho ngôn ngữ tự nhiên Tuy nhiên, chúng có phạm vi ứng dụng khác lĩnh vực khác khoa học máy tính xử lý ngơn ngữ tự nhiên So sánh Ơtơmát đơn định (DFA) Ơ tơ mát khơng đơn định (NFA)? Cả ôtômát đơn định (DFA) ôtômát không đơn định (NFA) mơ hình tính tốn sử dụng để mơ tả ngơn ngữ hình thức Tuy nhiên, chúng có khác biệt cách thức hoạt động sức mạnh tính tốn Độ phức tạp tính tốn: DFA: DFA có tính chất đơn định, tức với trạng thái ký tự đầu vào, có trạng thái kết thúc trạng thái Do đó, DFA có tính chất tổng quát NFA giải vấn đề với độ phức tạp thấp NFA NFA: NFA khơng đơn định, có nhiều trạng thái kết thúc nhiều trạng thái cho ký tự đầu vào Vì vậy, NFA giải vấn đề phức tạp hơn, dẫn đến mâu thuẫn trạng thái Số lượng trạng thái: DFA: Số lượng trạng thái DFA với số lượng trạng thái NFA Vì vậy, DFA thường có độ phức tạp tính tốn thấp NFA: Số lượng trạng thái NFA lớn số lượng trạng thái DFA Hiệu việc tối ưu hố ơtơmát: DFA: DFA dạng đặc biệt NFA, chuyển đổi từ NFA Tuy nhiên, trình chuyển đổi dẫn đến tăng số lượng trạng thái giảm hiệu tính tốn NFA: NFA khơng thể chuyển đổi trực tiếp thành DFA mà phải thơng qua q trình tối ưu hóa Tuy nhiên, q trình khơng đảm bảo tối ưu hố tối đa dẫn đến DFA khơng tối ưu Tóm lại, DFA NFA có ưu điểm hạn chế riêng DFA phù hợp với tốn đơn giản, có tính chất tổng qt trạng thái NFA phù hợp với toán phức tạp 4 Cho Biểu thức quy (BTCQ) sau Hãy xây dựng Các Ơ tơ mát đơn định đoán nhận chúng a 10 ∪ (0 ∪ 11)0 ∗1 b ∗00∗ c 00∗11∗ Ngôn ngữ tạo ngữ pháp sau đây? Trong trường hợp biện minh cho câu trả lời bạn a S -> S | b S -> + S S | - S S | a c S -> S (S) S | ε d S -> a S b S | b S a S | ε e S -> a | S + S | S S | S * | ( S ) a Ngữ pháp tạo ngôn ngữ gồm tất chuỗi nhị phân có dạng 0^n1^n 01, với n số nguyên không âm Cụ thể, ngữ pháp cho phép tạo chuỗi cách đệ quy thêm ký tự vào đầu cuối chuỗi, cho số lượng ký tự b Ngữ pháp tạo ngôn ngữ gồm tất biểu thức số học đơn giản, bao gồm số phép ”+”, “-” số a Các biểu thức tạo cách đệ quy thêm phép tính số vào biểu thức, với điều kiện phép tính bao quanh hai biểu thức c Ngữ pháp tạo ngơn ngữ bao gồm tất chuỗi tạo cách đặt cặp dấu ngoặc đơn vào vị trí chuỗi Ngồi ra, chuỗi rỗng phần ngôn ngữ d Ngữ pháp tạo ngôn ngữ gồm tất chuỗi tạo cách lấy hai chuỗi bắt đầu kết thúc chữ 'a' 'b', xen kẽ khơng xen kẽ Cụ thể, chuỗi tạo cách đệ quy thêm chuỗi 'aSbS' 'bSaS' vào chuỗi, với điều kiện chuỗi 'aSbS' 'bSaS' không bao gồm chuỗi 'aSbS' 'bSaS' e Ngữ pháp tạo ngơn ngữ gồm tất chuỗi tạo từ ký tự 'a', '+', '', '(', ')' có cấu trúc biểu thức tốn học đơn giản Các chuỗi tạo cách đệ quy thêm ký tự vào biểu thức, theo cấu trúc cho trước Ví dụ, chuỗi 'a+(aa)' tạo cách sử dụng ngữ pháp sau: 'S -> a | S + S | S * | ( S )', sau sử dụng quy tắc S -> S (S) Mô tả ngôn ngữ biểu thị biểu thức quy sau: a a(a|b)*a b ((ε|a)b*)* c (a|b)*a(a|b)(a|b) d a*ba*ba*ba* e !! (aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)* A, Phần biểu thức quy, $a$, định chuỗi ngôn ngữ bắt đầu "a" Phần tiếp theo, $(a|b)$, định sau "a", ta có số lượng tùy ý ký tự "a" "b" Dấu " | " biểu thị phép tốn lựa chọn, có nghĩa lựa chọn "a" "b" Dấu "" biểu thị lặp lại nhiều lần Phần cuối biểu thức quy, $a$, định chuỗi ngơn ngữ kết thúc "a" B, Phần biểu thức quy, (ε|a), định chuỗi ngơn ngữ bắt đầu "a" rỗng (epsilon) • Phần biểu thức quy, b*, định chuỗi ngơn ngữ có số lượng tùy ý ký tự "b" Dấu "*" biểu thị lặp lại nhiều lần Sau đó, tồn biểu thức quy bao quanh dấu ngoặc đơn dấu "*" cuối biểu thức cho biết chuỗi ngơn ngữ bao gồm số lượng tùy ý chuỗi bắt đầu "a" rỗng theo sau số lượng tùy ý ký tự "b" C, Phần biểu thức quy, (a|b), định chuỗi ngơn ngữ bắt đầu số lượng tùy ý ký tự "a" "b" Dấu " | " biểu thị phép toán lựa chọn, có nghĩa lựa chọn "a" "b" Dấu "" biểu thị lặp lại nhiều lần Phần biểu thức quy, a, định chuỗi ngôn ngữ phải có ký tự "a" Phần sau biểu thức quy, (a|b), định sau "a", ta chọn ký tự "a" "b" Phần cuối biểu thức quy, (a|b), định chuỗi ngơn ngữ kết thúc "a" "b" D, Phần biểu thức quy, a*, định chuỗi ngơn ngữ bắt đầu số lượng tùy ý ký tự "a" Dấu "*" biểu thị lặp lại nhiều lần Phần biểu thức quy, bababa*, định chuỗi "baba" lặp lại số lần Ký tự "b" xuất lần chuỗi, ký tự "b" chuỗi ký tự "a" (0 nhiều lần) E, Biểu thức quy (aa|bb)((ab|ba)(aa|bb)(ab|ba)(aa|bb)) biểu diễn ngơn ngữ gồm chuỗi có dạng: Một chuỗi bắt đầu "aa" "bb" lặp lại số lần (phần đầu biểu thị (aa|bb)*) Sau phần đầu, chuỗi chứa số cặp (ab|ba), cặp theo sau chuỗi số lần chuỗi "aa" "bb" Mỗi cặp (ab|ba) phân tách chuỗi (aa|bb)* |ba Các ngôn ngữ câu nhập nhằng? 11 Dùng biểu thức quy xây dựng khái niệm: chữ cái, chữ số, tên quan hệ ngơn ngữ Pascal Trong ngơn ngữ Pascal, ta định nghĩa khái niệm sau cách sử dụng biểu thức quy: Chữ cái: Chữ ngôn ngữ Pascal ký tự từ 'A' đến 'Z' từ 'a' đến 'z' Ta sử dụng biểu thức quy để mơ tả tập hợp chữ sau: [A-Za-z] Chữ số: Chữ số ngôn ngữ Pascal ký tự từ '0' đến '9' Ta sử dụng biểu thức quy để mô tả tập hợp chữ số sau: [0-9] Tên quan hệ: Tên quan hệ ngôn ngữ Pascal chuỗi chữ chữ số bắt đầu chữ Ta sử dụng biểu thức quy để mơ tả tập hợp tên quan hệ sau: [A-Za-z][A-Za-z0-9]* Trong đó, [A-Za-z] mô tả ký tự chữ [A-Za-z0-9]* mơ tả ký tự chữ chữ số Dấu '*' biểu thức quy cho phép xuất nhiều lần ký tự có tập hợp 12 Xây dựng phân tích từ loại: chữ cái, chữ số, tên quan hệ ngôn ngữ Pascal đồ thị chuyển Để xây dựng phân tích từ loại chữ cái, chữ số, tên quan hệ ngơn ngữ Pascal đồ thị chuyển, ta sử dụng phương pháp xây dựng đồ thị chuyển từ biểu thức quy Cụ thể, ta xây dựng đồ thị chuyển tương ứng với từ loại Đồ thị chuyển cho chữ cái: Để phân tích chữ ngơn ngữ Pascal, ta sử dụng đồ thị chuyển sau đây: Trong đồ thị chuyển này, q0 trạng thái bắt đầu, qf trạng thái kết thúc có cạnh từ q0 đến q1 gắn thẻ với chữ a-z A-Z Cạnh cho phép chuyển từ trạng thái q0 sang trạng thái q1 đầu vào chữ Đồ thị chuyển cho chữ số: Để phân tích chữ số ngơn ngữ Pascal, ta sử dụng đồ thị chuyển sau đây: Trong đồ thị chuyển này, q0 trạng thái bắt đầu, qf trạng thái kết thúc có cạnh từ q0 đến q1 gắn thẻ với chữ số 0-9 Cạnh cho phép chuyển từ trạng thái q0 sang trạng thái q1 đầu vào chữ số Đồ thị chuyển cho tên quan hệ: Để phân tích tên quan hệ ngơn ngữ Pascal, ta sử dụng đồ thị chuyển sau đây: Câu 13 Để xây dựng phân tích từ loại cho ngơn ngữ Pascal, ta sử dụng đồ thị chuyển (finite state machine) để mơ hình hóa trình xác định từ loại từ Trong đó, ta định nghĩa trạng thái chuyển trạng thái trạng thái để mô tả trình xác định từ loại Dưới phân tích từ loại đơn giản cho ngơn ngữ Pascal đồ thị chuyển, xác định ba loại từ: chữ cái, chữ số tên quan hệ #include #include using namespace std; enum State { START, LETTER, DIGIT, RELATION }; bool isLetter(char c) { return (c >= 'a' && c = 'A' && c = '0' && c

Ngày đăng: 25/03/2023, 20:35

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

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

Tài liệu liên quan