Luận văn Xây dựng bộ công cụ thực hiện một số giải thuật trong môn học ngôn ngữ hình thức và Automata

MỘT SỐ GIẢI THUẬT BIẾN ĐỔI VĂN PHẠM PNC VÀ CÁC DẠNG CHUẨN

 

Trong phần này, chúng ta đi sâu vào việc tìm hiểu một số giải thuật biến đổi văn phạm phi ngữ cảnh như :

+ Loại bỏ các luật sinh rỗng

+ Loại bỏ các luật sinh vô dụng

+ Loại bỏ các luật sinh đơn vị

+ Chuyển văn phạm bất kỳ về dạng chuẩn Chomsky

+ Chuyển văn phạm bất kỳ về dạng chuẩn Greibach

Việc loại bỏ các luật sinh trên rất quang trọng làm tiền đề để có thể biến đổi tập văn phạm của ngôn ngữ phi ngữ cảnh về các dạng chuẩn quan trọng như dạng chuẩn Chomsky, dạng chuẩn Greibach. Từ đó giúp cho việc thực hiện một giải thuật phân tích cú pháp như CYK.

 

doc146 trang | Chia sẻ: netpro | Lượt xem: 2686 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Xây dựng bộ công cụ thực hiện một số giải thuật trong môn học ngôn ngữ hình thức và Automata, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
u trung gian, đáp ứng các nhu cầu hoạt động, lưu trữ của mô hình. Người sử dụng chỉ có thể giao tiếp với mô hình thông qua dữ liệu nhập và dữ liệu xuất. Các yêu cầu học tập của người sử dụng được chuyển đổi thành dữ liệu nhập, qua một số bước tính toán, phân tích mô hình sẽ đưa ra các dữ liệu xuất để giải thích hoặc đáp ứng các yêu cầu của người sử dụng. Dữ liệu cục bộ của mô hình có thể được trình bày hoặc che dấu tùy mục đích của mô hình. Hoạt động của mô hình Các hoạt động của mô hình có thể chia làm hai loại chính như sau : + Hoạt động nhập xuất : Đây là các hoạt động thể hiện sự giao tiếp của mô hình của người sử dụng. Các phương thức nhập/xuất đảm nhận việc nhận các dữ liệu nhập của mô hình và thể hiện các dữ liệu xuất ra các thiết bị ngoại vi (màn hình, máy in,…) để giảng dạy cho người sử dụng. + Hoạt động xử lý, tính toán dữ liệu : Các hoạt động xử lý các dữ liệu cục bộ của mô hình phục vụ cho yêu cầu dạy và học. Các phương thức này đảm nhận việc chuyển đổi dữ liệu nhập thành các dữ liệu cục bộ của mô hình. Mô hình sẽ tính toán, xử lý trên dữ liệu cục bộ và chuyển thành các dữ liệu xuất. - VÍ DỤ VỀ MỘT PHẦN MỀM TRỢ GIÚP HỌC TẬP Ví dụ đưa ra ở đây là phần mềm trợ giúp học tập môn Anh Văn LANGMaster INTERACTIVE ENGLISH. Trong phần mềm chứa đựng được tất cả các đặc tính của một phần mềm giảng dạy hiện đại: - Những bài học được xếp từ dễ đến khó, tuy nhiên vẫn cho phép người sử dụng lựa chọn những phần mà mình quan tâm mà không cần học những phần trước. - Đưa ra những hình thức thực hành và luyện tập phong phú như : điền vào chỗ trống, chọn từ đúng, tập phát âm. - Báo cáo lại mức độ tiếp thu của người học qua từng bài giảng, để người học nhận biết được trình độ từ đó cũng cố kiến thức cho những bài học tiếp theo. - Đặc biệt phần mềm LANGMaster INTERACTIVE ENGLISH đã đưa ra một phương pháp giải dạy hiện đại, đó là phương pháp học từ và thành ngữ RE-WISE: + Phương pháp RE_WISE được thiết kế với sự tham gia của các chuyên gia về việc học và về mô hình toán học của việc học /quên trong nhiều năm từ đó đưa ra một thống kê quá trình học và quên các sự kiện đã được thu nhận. Qua ví dụ trên cho thấy được các tính chất của một phần mềm giảng dạy hiện tại cũng như một phương pháp giảng dạy tốt được đưa ra sẽ giúp ích rất nhiều trong việc học. 3.6- PHÂN TÍCH ĐIỀU KIỆN DẠY VÀ HỌC HIỆN TẠI và LOẠI PHẦN MỀM GIẢNG DẠY CẦN THIẾT KẾ Trên cơ sở thiết kế một phần mền giảng dạy cho các đối tượng là những sinh viên theo học ngành Máy Tính. Chuơng trình “Xây dựng bộ công cụ thực hiện một số giải thuật trong Lý thuyết Ngôn ngữ Hình thức & Automata”, cố gắng đưa những nội dung cơ bản của mô học nhằm góp phần giúp cho sinh viên nắm bắt được các cơ sở lý thuyết. Hiện nay với điều kiện về cơ sở vật chất cũng như các tài liệu thông tin và phương tiện giài dạy còn chưa đầy đủ như ở nước ta tồn tại các hình thức dạy và học sau: + Hình thức học tập trung (học trên lớp có thầy cô hướng dẫn) + Hình thức học hàm thụ từ xa (học theo sự hướng dẫn của người chuyên môn theo giáo trình hay sách vở được định hướng sẳn). + Hình thức tự học (Học theo nhu cầu , do điều kiện không cho phép theo học hai hình thức trên). Do đó việc thiết kế ra các phần mềm trợ giúp việc giảng dạy rất cần thiết rất cần thiết cho nhu cầu giảng dạy hiện tại. Dựa vào những phân tích trên cùng với các mô trường dạy và học vừa nêu, tôi quyết định xây dựng công cụ “Xây dựng bộ công cụ thực hiện một số giải thuật trong Lý thuyết Ngôn ngữ Hình thức & Automata” theo phía cạnh mô hình giảng dạy . PHẦN 4 PHÂN TÍCH VÀ THIẾT KẾ Sau đây chúng ta bắt đầu đi vào việc phân tích cụ thể cho bộ công cụ thực hiện một số giải thuật trong môn học “ Lý Thuyết Ngôn Ngữ Hình Thức & Automata” phần ngôn ngữ phi ngữ cảnh. I - YÊU CẦU ĐẶT RA CHO CHƯƠNG TRÌNH 1.1 Mục Tiêu Của Chương Trình Mục tiêu chính của chương trình là : Với bộ công cụ được xây dựng nó sẽ hổ trợ đắt lực cho người giảng dạy, giảm thiểu thời gian trong việc soạn giáo án cho các bài tập áp dụng một số giải thuật mà chúng tôi thể hiện trong chuơng trình, giúp cho sinh viên nắm bắt được cách thức thực hiện một bài tập theo các giải thuật đã nêu ra, giúp người học kiểm tra kiến thức của mình, thực hành một số bài tập từ đó nâng kiến thức khi học các lý thuyết liên quan. 1.2- Các Yêu Cầu Phải Viết Trong Chương Trình Trên cơ sở thiết kế phần mềm dạy và học cho những đối tượng là những những sinh viên theo học ngành khoa học máy tính. Chuơng trình hỗ trợ việc học một số giải thuật của môn học “Ngôn Ngữ Hình Thức & Automat” cố gắng thực hiện được các vấn đề sau: + Đưa ra những nội dung cơ bản liên quan đến môn học nhằm góp phần giúp cho sinh viên hiểu và nắm bắt nội dung của lý thuyết liên quan, phần này được tích hợp trong hệ thống Help của chương trình. + Thực hiện một bộ công cụ trợ giúp cho sinh viên học một số giải thuật trong môn học “Ngôn ngữ hình thức & Automata” như : (1) Loại bỏ các luật sinh rỗng (2) Loại bỏ các luật sinh đơn vị (3) Loại bỏ các luật sibnh vô dụng (4) Chuyển một văn phạm bất kỳ về dạng chuẩn Chomsky Chuyển một văn phạm bất kỳ về dạng chuẩn Greibach Hiện thực giải thuật phân tích cú pháp CYK Hiện thực giải thuật phân tích cú pháp Earley So sánh độ phức tạp của hai giải thuật PTCP trên. Áp dụng nhận dạng một câu nhập thuộc ngôn ngữ tự nhiên (Tiếng Anh). + Quá trình thực hiện các giải thuật phải thể hiện được các bước dữ liệu trung gian để sinh viên dễ dàng nắm bắt cách thực hiện giải thuật. II- MÔI TRƯỜNG HOẠT ĐỘNG và CÁC SƠ ĐỒ DFD 2.1 Môi Trường Hoạt Động & Ngôn Ngữ Lập Trình Đây là một chuơng trình mang tính dành học việc học, nghiên cứu cách thực hiện giải thuật nên chương trình chỉ thiết kế chạy trên máy tính cá nhân, hiện tại vấn đề chạy trên mạng chưa đặt ra ở đây. Chuơng trình phát triển chạy trên môi trường HĐH Microsoft Windows 95, đây là một HĐH được sử dụng rỗng rãi nhất hiện nay trên thế giới . Chương trình sẽ kế thừa những tiện ích của HĐH này nên sẽ không thể chạy trên môi trường DOS hay Windows 3.11 Ngôn ngữ Visual C++ 5.0 được sử dụng để hiện thực hệ thống, đây là một ngôn ngữ lập trình huớng đối tượng mạnh và hiện nay được sử dụng rộng rãi. Đặc biệt chương trình sẽ sử dụng các class được định nghĩa trong MFC . 2.2 Sơ Đồ DFD Tổng Quát a) Trường hợp biến đổi văn phạm Văn Phạm phi ngữ cảnh bất kỳ Bộ công cụ thực hiện Thông báo quá trình thực hiện giải thuật và kết quả User User Yêu cầu : - Bỏ các LS rỗng - Bỏ các LS đơn vị - Bỏ các LS vô dụng - Dạng chuẩn chomsky - Dạng chuẩn Greibach b) Trường hợp phân tích một câu nhập Văn Phạm phi ngữ cảnh bất kỳ Bộ công cụ thực hiện Thông báo quá trình thực hiện giải thuật & kết quả Câu nhập User User + Bộ công cụ bao hàm các prosess lớn sau : Process Loại bỏ các luật sinh rỗng (l). Process Loại bỏ các luật sinh đơn vị. Process Loại bỏ các luật sinh vô dụng. Process Chuyển một văn phạm bất kỳ về dạng chuẩn Chomsky. Process Chuyển một văn phạm bất kỳ về dạng chuẩn Greibach. Process Phân tích một câu nhập theo giải thuật CYK. Process Phân tích một câu nhập theo giải thuật Earley. Process So sánh số bước phân tích của hai giải thuật CYK và Earley.(*) Process Nhận dạng ngôn ngữ tự nhiên (**) * : Xin xem chi tiết quá trình thiết kế ở phần 5 - Trang ** : Xin xem chi tiết quá trình thiết kế ở phần 6 - Trang c) Mô hình Data Flow Diagram Chi Tiết + Biến đổi văn phạm User Văn phạm G Nhập VPPNC G Loại bỏ tất cả VP Loại bỏ l VP Loại bỏ đơn vị VP Loại bỏ vô dụng Loại bỏ đơn vị Loại bỏ luật sinh l Dạng chuẩn Greibach User Văn Phạm Thông báo Thông báo kết quả Thông báo kết quả Thông báo kết quả Thông báo kết quả Thông báo kết quả Loại bỏ luật sinh vôdụng Loại bỏ luật sinh đơn vị Văn phạm G Dạng Chuẩn Chomsky Văn phạm G VP không có rỗng, đơn vị, vô dụng VP không có rỗng, đơn vị, vô dụng Yêu cầu DC Chomsky Yêu cầu DC Greibach + Phân Tích Câu Nhập User Văn phạm G Nhập VPPNC G Bộ phân tích cú pháp CYK Câu nhập Câu nhập Bộ phân tích cú pháp Earley Loại bỏ luật sinh l User User Văn Phạm Thông báo kết quả Thông báo kết quả VP dạng chuẩn Chomsky Loại bỏ luật sinh đơn vị Loại bỏ luật sinh vô dụng Văn phạm không có các luật sinh đơn vị Văn phạm không có các luật sinh vô dụng Văn phạm không có các luật sinh l Chuyển về dạng chuẩn Chomsky III- CÁCH THỨC NHẬP VÀ XUẤT DỮ LIỆU Nhập Liệu Dữ liệu đầu vào là câu nhập và văn phạm phi ngữ cảnh G, dựa vào các dữ liệu này bộ công cụ tiến hành phân tích theo yêu cầu. Bộ công cụ Bàn phím File lưu trữ Lưu file Nhận dữ liệu từ File 7 + Chương trình có hai hình thức để đưa đữ liệu vào cho bộ công cụ : Nhập dữ liệu từ bàn phím Nhập từ file lưu trữ trên đĩa từ, file này do người sử dụng lưu lại khi nhập liệu từ bàn phí hoặc có thể soạn thảo bằng một trình soạn thảo văn bản theo đúng format của chương trình. Xuất dữ liệu Dữ liệu xuất ở đây chủ yếu là các dòng văn bản kết quả xuất ra màn hình cho người sử dụng xem, đồng thời lưu xuống file để lưu trữ (dữ liệu lưu là các tập văn phạm kết quả khi thực hiện biến đổi văn phạm) Một số dữ liệu trung gian cũng được hiển thị để minh họa quá trình phân tích, có thể minh họa việc trình bày dữ liệu xuất của bộ công cụ qua so đồ sau : Bộ công cụ Lưu kết quả xuống file Dữ liệu kết quả Dữ liệu minh họa cho giải thuật Hiển thị lên màn hình Màn Hình File lưu trữ 3.3 Định Dạng File Dữ Liệu Dữ liệu lưu trữ ở đây là bộ văn phạm phi ngữ cảnh G=(V,T,S,P), do đó có thể đề nghị một định dạng như sau : //ký hiệu để nhận dạng biến khỡi đầu Biến khỡi đầu // ký hiệu để nhận dạng dữ liệu theo sau thuộc tập V Danh sách các ký hiệu không kết thúc // ký hiệu để nhận dạng dữ liệu theo sau thuộc tập T Danh sách các ký hiệu kết thúc // ký hiệu để nhận dạng dữ liệu theo sau thuộc vế trái của tập luật sinh Danh sách vế trái (tương ứng thứ tự với vế phải) // ký hiệu để nhận dạng dữ liệu theo sau thuộc vế phải của tập luật sinh Danh sách vế phải (tương ứng thứ tự với vế trái) Do đó có thể soạn thảo tập văn phạm G bằng một trình soạn thảo văn bảng bất kỳ là lưu ở dạng .txt, chương trình cũng sẽ lưu tập văn phạm với định dạng trên khi bạn bấm nút lưu. IV - TỔ CHỨC CẤU TRÚC DỮ LIỆU 1) Cấu Trúc Dữ Liệu Cho Văn Phạm G=(V,T,S,P) a) Lưu tập V : Là một mãng ký tự là chữ in hoa 0 1 2 3 4 5 6 7 8 . . . Lưu tập T : Là một mãng ký tự là chữ thường. 0 1 2 3 4 5 6 7 . . . c) Lưu biến khỡi đầu S : Sử dụng một char để lưu S d) Lưu tập các luật sinh P : Sử dụng một mãng chuỗi ký tự cho vế phải và một mãng cho vế trái Vế Trái Vế Phải 0 0 1 1 2 2 3 3 4 4 . . . . . . 2- Cấu Trúc Dữ Liệu Cho Giải Thuật CYK a) Sơ đồ cấu trúc dữ liệu j i 1 2 3 4 ... n 1 string string string string string string string string string 2 ... 3 ... n string b) Hiện Thực : Bảng phân tích cú pháp T là một mãng hai chiều, ở đây giới hạn chiều dài tối đa của chuỗi nhập (số token) là MAX ký tự do đó, mãng T được khai báo như sau trong Visual C++: CString T [MAX][MAX]; Một số tác vụ khi thực hiện giải thuật CYK : + Hội hai tập hợp trả về tập hợp kết quả CString Hoi(CString B, CString C) { int i; CString Temp; Temp=""; for(i=0;i<B.GetLength();i++) if (Temp.Find(B[i])==-1) Temp=Temp+B[i]; for(i=0;i<C.GetLength();i++) if (Temp.Find(C[i])==-1) Temp=Temp+C[i]; return Temp; } +Tìm kiếm các luật sinh có vế trái =BC thì trả về chuỗi chứa vế trái của tất cả các luật sinh đó ngược lại trả về trống CString TimLuatSinhBC(CString B, CString C) { int soluat; CString temp,st; int i; temp=B+C; soluat=ArrayVeTrai.GetSize(); for(i=0;i<soluat;i++) if (temp==ArrayVePhai[i]) st=st+ArrayVeTrai[i]; if (st.GetLength() !=0) return st; else return ""; } + Nếu có luật sinh thì trả về string chứa tất cả các vế trái ngược lại trả về chuỗi rỗng CString TimLuatSinh_a(CString a) { int soluat; CString st; int i; soluat=ArrayVeTrai.GetSize(); for(i=0;i<soluat;i++) if (ArrayVePhai[i]==a) st=st+ArrayVeTrai[i]; if (st.GetLength() !=0) return st; else return ""; } +Nếu chuỗi thuộc ngôn ngữ L thì trả về 1 ngược lại trả về 0 int KiemTraChuoiThuocL(CString st) { int i,len; len=st.GetLength(); for(i=0;i<len;i++) if(st[i]==BienKhoiDau) return 1; return 0; } +Trả về số thứ tự của luật sinh P-->ai int Pa(CString A, CString a) { int soluat; int i; soluat=ArrayVeTrai.GetSize(); for(i=0;i<soluat;i++) if ((ArrayVeTrai[i]==A)&&(ArrayVePhai[i]==a)) return i; return -1; Cấu Trúc Dữ Liệu Cho Giải Thuật Earley Danh Sách chứa các thực thể của I0 . . . . ... I3 I2 I1 I0 Mãng các con trỏ, trỏ đến các thực thể P ,i ,f P ,i ,f P ,i ,f a) Sơ đồ cấu trúc dữ liệu b) Hiện Thực : - Để thể hiện một thực thể ta sử dụng một bộ 3 biến nguyên như sau : + p : chỉ số thứ tự của luật sinh + i : chỉ vị trí dấu chấm ( . ) trong tập thực thể + f : chỉ vị trí tập thực thể như vậy để xác định một thực thể ta chỉ cần xác định bộ ba (p, i,f) - Tập thực thể các I0, I1, ... là một mãng các con trỏ vị trí bắt đầu của tập thực thể - Mỗi thực thể Ii chứa con trỏ trỏ đến đầu danh sách liên kết chứa các thực thể c) Cách hiện thực cấu trúc dữ liệu trên trong ngôn ngữ C Định nghĩa một phần tử trong danh sách liên kết : typedef struct item { int p; int i; int f; struct item *link; } items; trong đó : + p : chỉ số thứ tự của luật sinh + i : chỉ vị trí dấu chấm ( . ) trong tập thực thể + f : chỉ vị trí tập thực thể + link : là con trỏ trỏ đến phần tử kết tiếp. Khai báo một mãng các trỏ, trỏ đến tập thực thể items items *tapthucthe[MAX]; trong đó MAX : số lượng tập thực thể lớn nhất, số lượng này sẽ bằng với chiều dài chuỗi nhập d) Một số tác vụ cơ bản khi thực hiện giải thuật Earley (sử dụng ngôn ngữ C) + Khởi động một thực thể: items *Init(items *f) { f=NULL; return f; } + Khởi động tập thực thể : void Init_thucthe() { int i; for (i=0;i<MAX; i++) tapthucthe[i]=Init(tapthucthe[i]); } + Đưa dữ liệu vào một tập thực thể nào đó: items *Insert_data(items *pt, int k,int j ,int f) { items *p,*q,*before; p=new items; (p->p)=k; (p->i)=j; (p->f)=f; q=pt; while(q!=NULL) { before=q; q=q->link; } if(q==pt) pt=p; else before->link=p; p->link=q; return (pt); } +Trả về ký tự sau dấu chấm char ChrAfterDot(items *pt) { int sl,ch; CString Vp; sl=(pt->p); ch=(pt->i); Vp=ArrayVePhai[sl]; if (ch<Vp.GetLength()) return (Vp[ch]); else return ""; V - CÁC LƯU ĐỒ THUẬT TOÁN CHO CÁC PROCESS START Luật sinh thứ p có dạng A --> l p=0 Cho A vào trong Vn p > Tổng LS Đ S S p=p+1 Luật sinh thứ p có dạng A --> A1A2…An mà A1A2…An Î Vn p=0 Cho A vào trong Vn Đ Đ S S p=p+1 p > Tổng LS Luật sinh thứ p có dạng A --> x1x2…xm với m³1và xi Î (VÈT) p=0 Cho vào P^ các tổ hợp có thể có bằng cách thay thế các biến Î Vn bằng l Đ Đ S S p=p+1 p > Tổng LS END p=0 1- Loại Bỏ Các Luật Sinh l 2- Loại Bỏ Các Luật Sinh Đơn Vị START Luật sinh thứ p có dạng A --> B p=0 Cho luật sinh thứ p vào trong P^ p > Tổng LS S Đ S Đ p=p+1 Cho luật sinh thứ p vào trong P* Tạo đồ thị phụ thuộc cho P* - Aùp dụng việc thay thế bằng cách : lấy vế phải của luật sinh không đơn vị có vế trái là vế phải của luật sinh đơn vị thay vào vế phải của luật sinh đơn vị tương ứng - Cho các luật sinh thay thế vào P^ END START V1= { } Thêm A vào V1 Luật sinh p có dạng Aà x1x2… xn với xi Î T* È V1 V1 chứa A rồi Đ Đ S Đ S S p=p+1 p=0 p> Tổng LS Cho vào trong P1 các luật sinh trong P mà có VP Î (V1È T*) Loại bỏ các luật sinh vô dụng loại 1 p1> Tổng LSP1 If VT=”Biến khỡi Đầu” then For (I=0; I<chiều dài VP luật sinh p1;I++) if VP[I] ÎV1 then B=BÈVP[I] p1=0, B={ } (p1 biến duyệt các luật sinh trong P1) Đ S p1=p1+1 A 3- Loại Bỏ Các Luật Sinh Vô Dụng Dựa và tập B và các luật sinh trong P1, tạo đồ thị phụ thuộc cho P1 Loại bỏ các biến và luật sinh tương ứng của nó ra khỏi tập luật sinh P1 A END Loại bỏ các luật sinh vô dụng loại 2 START Loại bỏ các luật sinh l Loại bỏ các luật sinh đơn vị Loại bỏ các luật sinh vô dụng p=0 Luật sinh thứ p có chiều dài vế phải >=2 Cho tất cả các luật sinh có dạng Aà a vào trong P^ Đ S Thay các ký hiệu kết thúc (ví dụ là a) ở vế phải bằng vế trái sinh ra nó (có trong tập P^) nếu không có thì sinh ra ký tự đại diện Ba,và đặt Ba àa vào trong P^ p=p+1 p=p+1 Sau bước trên ta có được luật sinh : Aà C1C2…Cn, ta tiến hành chia nhỏ luật sinh này thành các luật sinh có chiều dài bằng 2 như sau : str=VP; n=Len(str) Repeat if (n=2) then cho luật sinh A vào P^ else STP=str[0]+Dk Cho Aà STP vào trong P^ str=Right(Len-1); n=n-1; k++; Until (n=2) p> Tổng LS END 4- Process Dạng Chuẩn Chomsky S Đ 5- Process Dạng Chuẩn Greibach START Loại bỏ các luật sinh l Loại bỏ các luật sinh đơn vị Loại bỏ các luật sinh vô dụng G=(V,T,S,P) Đánh số thứ tự các biến trong V từ 1 đến n TEMP=P (tập luật sinh) Tất cả các luật sinh trong P có có ở tất cả các dạng sau: Ai à Ajxj ,j >I Zi à Ajxj , j£n Ai à axi i < 1 Thực hiện loại bỏ đệ qui trái và thay thế S Đ S Đ i=n Thay thế Ai vào trong các xuất hiện của nó ở vị trí đầu tiên trên các vế phải của luật sinh Ai-1 bằng các vế phải của nó i=i-1 A START Loại bỏ các luật sinh l Loại bỏ các luật sinh đơn vị Loại bỏ các luật sinh vô dụng Cho tất cả các luật sinh có dạng Aà a vào trong P^ START Cho tất cả các luật sinh có dạng Aà a vào trong P^ A p>Tổng LS p=0 Luật sinh thứ p có vế trái là Zi và ký hiệu đầu tiên của vế phải thuộc (A1, … An) Thay thế kí hiệu của vế phải luật sinh thứ p bằng vế trái của ký hiệu tương ứng Đ S S Đ p=p+1 Thay thế các ký hiệu kết thúc nằm trên vế phải của các luật sinh trong P mà không ở vị trí đầu tiên bằng các ký hiệu đại điện Bi END 6- Lưu Đồ Giài Thuật Phân Tích Cú Pháp Earley START i=0 i > Tổng Luật Sinh i0=i0+1 i=i+1 Luật sinh thứ i có dạng S --> a Cho [S--> .a, 0] vào trong I0 Đ S S S S S Đ Đ Đ Đ Bước 1 Bước 2&3 Luật sinh thứ i0 trong I0 có dạng [B -->g., 0] i0 =0 Luật sinh thứ i0 trong I0 có dạng [A -->a.Bb,0] I0 > TổngLS trong I0 Cho vào I0 trạng thái [B-->.g,0] của các luật sinh trong P có dạng B-->g - Tính lại TổngLS Cho vào I0 trạng thái [A--> aB.b,0] của các trạng thái trong I0 có dạng [A--> aB.b,0] -Tính lại TổngLS A x=x+1 Đ S S Đ Đ Đ S S A Luật sinh thứ x trong Ij-1 có dạng [B -->a.ab, I] với (a=aj) x=0 j=1 Cho [B -->a.ab, i] vào trong Ij x > TổngLS trong Ij-1 y=0 Luật sinh thứ y trong Ij có dạng [A -->a. , i] Tìm trong P các luật sinh có dạng : [B -->g thì cho vào Ij tập : [B --> .g, k] - Cập nhật lại LSJ Tìm trong tập Ii các thực thể có dạng : [B -->a.Ab, k] thì cho vào Ij tập : [B -->aA .b, k] - Cập nhật lại LSJ Luật sinh thứ y trong Ij có dạng [A -->a.Bb , i] S S Đ Đ END j>n (n chiều dài chuỗi y>LSJ j=j+1 Bước 5&6 Bước 4 y =y+1 7- Lưu đồ Giải thuật phân tích cú pháp CYK Bước 2 START i=1,p=0 luật sinh thứ p có dạng A--> ai Cho A vào trong ti1 i=i+1,p=0 p=p+1 p> số luật sinh Đ Đ S S S Đ i>= chiều dài chuỗi Bước 1 i=1, j=2,p=0 p=p+1 k=k+1 Đ S p> số luật sinh Đ Đ S S luật sinh thứ p có dạng A--> BC mà BÎ tik và C Î ti+k,j-k tij= tij È {A} k>=j k=1 A B A (1 £ i £ n ) AND (1£ j £ n-i+1) i=i+1 B Đ Đ S S j> n (chiều dài chuỗi) i=1 j=j+1 END VI - THIẾT KẾ MỘT SỐ FROM NHẬP - XUẤT QUANG TRỌNG Dựa vào các form được thiết kế ở phần này, lập trình viên thiết kế các phần giao diện cho bộ công cụ. Xóa Luật Nhập Luật Biến Khởi Đầu: -----> Băng nhập Tập luật sinh Tập Kh Không Kết Thúc Thêm Xóa Tập Kh Kết Thúc Xóa Thêm Bỏ Qua Đồng Ý Mở File Lưu File a ) Form Nhập VP PNC Form này được thiết kế để tạo giao diện khi nhập văn phạm phi ngữ cảnh, trong Form cho phép, nhập, lưu hay mở văn từ file, có thể bỏ qua hay chấp nhận văn phạm vừa nhập. b) Form Loại Bỏ Các Luật Sinh Rỗng, Đơn Vị, Vô Dụng Loại bỏ luật sinh rỗng Loại bỏ luật sinh đv Loại bỏ luật sinh Vd Loại bỏ hết các luật Đóng Minh họa giả thuật Tập luật sinh kết quả Tập luật sinh ban đầu Sử dụng form này khi thực hiện viết các giải thuật loại bỏ các luật sinh rỗng, đơn vị, vô dụng. Khi bấm một nút thì giải thuật tương ứng sẽ thực hiện. c) Form Chuyển Văn Phạm Về Dạng Chuẩn Chomsky Chomsky >>> Xem VP Chomsky Xem VP Đầu Giúp Đỡ Đóng Minh họa giả thuật Tập luật sinh dạng chuẩn Chomsky Tập luật sinh ban đầu Form này dành cho thực hiện giải thuật Chomsky, Form thực hiện giải thuật Greibach tương tự . Biến Khởi Đầu G=(V,T,{S},P) Đóng Tập Luật Sinh Tập biến Tập ký hiệu kết thúc d) Form Dùng Để Hiển Thị Văn Phạm Gốc Form này dùng để hiển thị văn phạm gốc khi người sử dụng có yêu cầu xem, văn phạm gốc hiển thị đầy đủ : Biến khỡi đầu : S Tập các ký hiệu kết thúc : T Tập các ký hiệu không kết thúc : V Tập các luật sinh : P e) Form Thực Hiện Giải Thuật CYK Câu Nhập : Hiển Thị Bảng phân Tích T Văn Phạm dạng Chomsky Chuỗi Dẫn Xuất Xem văn phạm gốc Giúp đỡ Phân tích câu nhập Dữ liệu minh họa cho giải thuật bao gồm : Bảng phân tích T Chuỗi dẫn xuất ra câu nhập Tập văn phạm ở dạng chuẩn Chomsky Khi nhập liệu xong, người sử dụng bấm nút “Phân Tích Câu Nhập” thì giải thuật CYK sẽ hiện thực. Câu Nhập : Tập luật sinh P Các trạng thái Si Chuỗi Dẫn Xuất Xem văn phạm gốc Giúp đỡ Phân tích câu nhập f) Form Thực Hiện Giải Thuật Earley Dữ liệu minh họa cho giải thuật bao gồm : Các trạng thái Si Chuỗi dẫn xuất ra câu nhập Tập văn phạm P (tổng quát) Khi nhập liệu xong, người sử dụng bấm nút “Phân Tích Câu Nhập” thì giải thuật Earley sẽ hiện thực VI - THIẾT KẾ HỆ THỐNG MENU Hệ thống Menu của chương trình được thiết kế theo dạng pushdown (trình đơn đẩy xuống). 1) Cấu trúc của hệ thống Menu : Bắt Đầu Công Cụ Ngôn Ngữ Tự Nhiên Giúp Đỡ Giúp Đỡ Thông Tin Về Chương Trình Nhận Dạng … Biên Soạn Văn Phạm.. Biên Soạn Từ Điển… Loạt bỏ các luật sinh … Alt+B Các Dạng Chuẩn … Alt+D Các Giải Thuật Phân Tích Cú Pháp Tạo mới văn phạm Đóng văn phạm hiện hành Mở văn phạm Thoát Dạng Chuẩn Chomsky Dạng Chuẩn Greibach Giải Thuật CYK … Alt+K Giải Thuật Earley… Alt+E So Sánh Độ Phức Tạp 2) Hoạt động của từng Menu Item Bắt Đầu : Bắt Đầu | Tạo Mới Văn Phạm : Khích hoạt process “Nhập Văn Phạm” cho phép người sử dụng định nghĩa tập văn phạm mà mình sẽ làm việc trên nó. Bắt Đầu | Đóng văn phạm hiện hành : Tập văn phạm hiện hành đang làm việc sẽ xóa khỏi vùng nhớ cấp phát cho nó, khi muốn làm việc lại phải thực hiện Tạo Mới Văn Phạm Bắt Đầu | Mở Văn Phạm : Mở văn phạm làm việc được lưu từ file. Công Cụ : Công Cụ | Loại Bỏ Các Luật Sinh : Kích hoạt Dialog “Loại Bỏ Luật Sinh” trong Dialog này thực hiện các process sau : + Loại bỏ các luật sinh l + Loại bỏ các luật sinh đơn vị + Loại bỏ các luật sinh vô dụng Công Cụ | Các Dạng Chuẩn | Dạng Chuẩn Chomsky : Kích hoạt process “Dạng Chuẩn Chomsky” Công Cụ | Các Dạng Chuẩn | Dạng Chuẩn Greibach : Kích hoạt process “Dạng Chuẩn Greibach” Công Cụ | Các Giải Thuật Phân Tích Cú Pháp | Giải Thuật CYK : Kích hoạt process “Giải thuật CYK” Công Cụ | Các Giải Thuật Phân Tích Cú Pháp | Giải Thuật Earley : Kích hoạt process “Giải thuật Earley” Công Cụ | Các Giải Thuật Phân Tích Cú Pháp | So Sánh Độ Phức Tạp : Thực hiện so sánh độ phức tạp của hai giải thuật : “Giải thuật Earley” & “Giải thuật CYK”. Ngôn Ngữ Tự Nhiên Ngôn Ngữ Tự Nhiên | Nhận Dạng : Phần áp dụng giải thuật Earley để nhận dạng một câu nhập thuộc ngôn ngữ tự nhiên (Tiếng Anh). Ngôn Ngữ Tự Nhiên | Biên Soạn Văn Phạm : Công cụ dùng để biên soạn tập văn phạm của ngôn ngữ tự nhiện (là một công cụ của bộ nhận dạng) Ngôn Ngữ Tự Nhiên | Nhận Dạng : Công cụ dùng để biên soạn bô từ điển token của các từ trong Tiếng Anh. (là một công cụ của bộ nhận dạng) Giúp Đỡ Giúp Đỡ | Giúp Đỡ : Hích hoạt hệ thống Help Contents Giúp Đỡ | Thông Tin Về Chương Trình : Kích hoạt màn hình giới thiệu thông tin về chương trình ? ABC Gram. AàX AàX. E CYK Pgre à Pch à Big O Nhập văn phạm Giúp Đỡ Nhận dạng Biên Soạn Văn Phạm Biên Soạn Từ Điển So Sánh Độ Phức tạp Giải Thuật Earley Giải Thuật CYK Xóa văn Phạm Loại bỏ các luật sinh Dạng Chuẩn Chomsky Dạng Chuẩn Greibach VII - THIẾT KẾ HỆ THỐNG TOOLBAR Tất cả các chức năng hoạt động của thanh toolbar tương tự như hoạt động của các Menu Items tương ứng như mô tả ở phần VI PHẦN 5 SO SÁNH ĐỘ PHỨC TẠP CỦA HAI GIẢI THUẬT CYK VÀ EARLEY GIỚI THIỆU Qua phần phân tích và thiết kế, để việc thiết kế các process phù hợp với các giải thuật đã trình bày trong phần lý thuyết nên việc tính toán độ phức tạp của CYK và Earley không được lồng vào trong các process này. Do đó trong phần này chỉ dành riêng cho việc trình bày cách hiện thực để tính toán độ phức tạp của hai giải thuật trên. Trong phần này giúp cho sinh viên thấy được một cách

Các file đính kèm theo tài liệu này:

  • docXây dựng bộ công cụ thực hiện một số giải thuật trong môn học ngôn ngữ hình thức và Automata.DOC