Đặt vấn đềMục đích của việc giải bài toán được giao Lý thuyết Các lý thuyết liên quan tới bài toán Sơ đồ thuật toán Thuật toán làm việc của bài toán Chương trình Các giao diện chính của
Trang 1Gi¸o viªn h ướ ng dÉn: TS Hµ ChÝ Trung
Nhãm th c hi n: ự ệ
1/ V ươ ng Th Tuy n ị ế 2/ L u Th Th nh ư ị ả
NHãM 6 TIN HäC 9A –
- O 0 O
ÁN M¤N H C:
AUTOMATA Vµ NG¤N NG÷ H×NH THøC
Ngµy hoµn thµnh: 11/01/2013
Trang 2Đặt vấn đề
Mục đích của việc giải bài toán được giao
Lý thuyết
Các lý thuyết liên quan tới bài toán
Sơ đồ thuật toán
Thuật toán làm việc của bài toán
Chương trình
Các giao diện chính của chương trình
1
2
5
3
4
Cấu trúc chương trình
Cấu trúc chương trình
Ví dụ
Ví dụ minh họa
6
Kết luận
Các nhận xét 7
Đồ án: PHÂN TÍCH CÚ PHÁP THEO PHƯƠNG PHÁP EARLEY
Tài liệu tham khảo
Tài liệu tham khảo trong quá trình làm đồ án
8
Trang 3Giải thuật Earley là một giải thuật cơ bản, được sử dụng tương đối rộng rãi trong các hệ thống phân tích cú pháp
Tuy nhiên, giải thuật này vẫn còn hạn chế như sinh ra quá nhiều luật dư thừa trong quá trình phân tích
Trong bài này, chúng em xin phép được đề xuất ra phương pháp phân tích cú pháp theo giải thuật Earley
Mục đích của việc giải bài toán được giao
Trang 4Giải thuật Earley là một trong những giải thuật được sử dụng phổ biến trong việc xây dựng các hệ thống phân tích cú pháp
Giải thuật này sử dụng chiến lược phân tích kiểu trên-xuống (top-down), bắt đầu với một ký hiệu không kết thúc đại diện cho câu và sử dụng các luật khai triển cho đến khi thu được câu vào
Hạn chế của cách tiếp cận này là không chú trọng nhiều đến các từ đầu vào Vì vậy, trong quá trình phân tích, giải thuật Earley sản sinh ra rất nhiều luật dư thừa
Mục đích của việc giải bài toán được giao
Đồ án: PHÂN TÍCH CÚ PHÁP THEO PHƯƠNG PHÁP EARLEY
Trang 5Ngoài ra, giải thuật Earley được xây dựng cho tiếng Anh nên khi áp dụng cho tiếng Việt sẽ có hạn chế:
Mỗi câu vào tiếng Anh chỉ có một cách tách từ, trong khi với tiếng Việt, mỗi câu vào
có thể có nhiều cách tách từ khác nhau.
Với đặc điểm đầu vào của giải thuật Earley chỉ là một câu với một cách tách, bộ phân tích cú pháp sẽ phải thực hiện lặp đi lặp lại giải thuật này cho từng trường hợp tách
từ đối với tiếng Việt
Mục đích của việc giải bài toán được giao
Trang 6Để giải quyết vấn đề này, khi xem xét các tài liệu, chúng em nhận thấy trong các cách tách từ Việt tồn tại các cặp cách tách giống nhau ở danh sách các
từ loại đầu tiên và chỉ khác nhau ở phần đuôi của chúng.
Mục đích của việc giải bài toán được giao
Đồ án: PHÂN TÍCH CÚ PHÁP THEO PHƯƠNG PHÁP EARLEY
Trang 7Giải thuật Earley cơ bản được phát biểu như sau:
Đầu vào: Văn phạm G = (N, T, S, P), trong đó:
N: tập kí hiệu không kết thúc
T: tập kí hiệu kết thúc
S: kí hiệu không kết thúc bắt đầu
P: tập luật cú pháp
Xâu vào w = a1a2 an
Đầu ra: Phân tích đối với w hoặc "sai"
Lý thuyết về giải thuật Earley
Trang 8Kí hiệu:
α, β, γ biểu diễn xâu chứa các kí hiệu kết thúc, không kết thúc hoặc rỗng.
X, Y, Z biểu diễn các kí hiệu không kết thúc đơn.
a biểu diễn kí hiệu kết thúc.
Đồ án: PHÂN TÍCH CÚ PHÁP THEO PHƯƠNG PHÁP EARLEY
Lý thuyết về giải thuật Earley
Trang 9Earley sử dụng cách biểu diễn luật thông qua dấu chấm “•”
X→ α • β có nghĩa là:
Trong P có một luật sản xuất X→ α β.
α đã được phân tích.
β đang được chờ phân tích.
Khi dấu chấm “•” được chuyển ra sau β có nghĩa rằng đây là một luật hoàn thiện Thành phần X đã được phân tích
đầy đủ, ngược lại nó là một luật chưa hoàn thiện.
Đối với mỗi từ thứ j của xâu đầu vào, bộ phân tích khởi tạo một bộ có thứ tự các trạng thái S(j).
Mỗi bộ tương ứng với một cột trong bảng phân tích Mỗi trạng thái có dạng (X → α • β, i), thành phần sau dấu
phẩy xác định rằng luật này được phát sinh từ cột thứ i.
Lý thuyết về giải thuật Earley
Trang 10Các hàm trong chương trình:
Đồ án: PHÂN TÍCH CÚ PHÁP THEO PHƯƠNG PHÁP EARLEY
3/8 Cấu trúc chương trình
1) void nhapDanhTu(map<string, unsigned int> &TL)
2) void nhapNoiDongTu(map<string, unsigned int> &TL)
3) void nhapNgoaiDongTu(map<string, unsigned int> &TL)
4) void nhapTinhTu(map<string, unsigned int> &TL)
5) void nhapGioiTu(map<string, unsigned int> &TL)
6) void nhapMaoTu(map<string, unsigned int> &TL)
7) void nhapDaiTu(map<string, unsigned int> &TL)
8) void nhapTroDongTu(map<string, unsigned int> &TL)
9) void nhapDanhSachLuat(vector<int> Luat[], int &iNumRule)
10) void nhapCauInput(vector<string> &Cau)
11) void thuatToan(vector<string> Cau, vector<int> Luat[], map<string, unsigned int> &TuLoai, int
iNumRule, vector<vector<int> > Table[])
12) void testTableOutput(vector<vector<int> > Table[], int iNumWord)
Trang 11Đối với mỗi bộ S(j), thuật toán phân tích thực hiện 3 bước:
(1) Dự đoán (Predictor):
Với mọi trạng thái trong S(j): (X → α • Y β, i), ta thêm trạng thái (Y → • γ, j) vào S(j) nếu có luật sản xuất Y →
γ trong P.
(2) Duyệt (Scanner):
Nếu a là kí hiệu kết thúc tiếp theo Với mọi trạng thái trong S(j): (X → α • a β, i), ta thêm trạng thái (X → α a •
β, i) vào S(j+1).
(3) Hoàn thiện (Completer):
Với mọi trạng thái trong S(j): (X → γ• , i), ta tìm trong S(i) trạng thái (Y → α • X β, k), sau đó thêm (Y → α X •
β, k) vào S(j).
Ở mỗi bộ S(j) phải kiểm tra xem trạng thái đã có chưa trước khi thêm vào để tránh trùng lặp.
Thuật toán làm việc của bài toán
4/8
1
2
3
Trang 12Đồ án: PHÂN TÍCH CÚ PHÁP THEO PHƯƠNG PHÁP EARLEY
Ví dụ minh họa
Phân tích câu “học sinh học sinh học” với tập luật cú pháp như sau:
S → N VP
S → P VP
S → N AP
S → VP AP
VP → V N
VP → V NP
NP → N N
NP → N A
AP → R A
N → học sinh
N → sinh học
V → học
V → sinh
Trong đó:
S – câu
VP – cụm động từ
NP – cụm danh từ
AP – cụm tính từ
P – đại từ
N – danh từ
V – động từ
A – tính từ
R – phụ từ
Trang 13Do câu trên có nhiều cách tách từ, trong khi đầu vào của giải thuật Earley chỉ là một câu với một cách tách từ nên em minh họa giải thuật Earley với cách tách từ trong trường hợp
câu được phân tích là: học sinh, học, sinh học.
Phân tích câu “học sinh học sinh học”:
Ví dụ minh họa
Trang 14Đồ án: PHÂN TÍCH CÚ PHÁP THEO PHƯƠNG PHÁP EARLEY
Bảng phân tích cho cách tách này như sau:
N •học sinh, 0
N •sinh học, 0
V •học, 0
Phân tích câu “học sinh học sinh học”:
Ví dụ minh họa
Trang 15Giao diện ch ương trình:
Các giao diện chính của chương trình
Kết quả:
Trang 16Người ta gọi giải thuật Earley là thuật toán tổng hợp hay thuật toán vạn năng vì chúng
có thể phân tích ngữ pháp cho một văn phạm bất kỳ Tuy nhiên do tính vạn năng của chúng cho nên nói chung là phương pháp này không hiệu quả với một văn phạm cụ thể nào,vì lý do trên ,người ta ít sử dụng chúng để viết các chương trình dịch (complier)
Trong bài em chưa thực hiện viết được trên giao diện winform để trình bày cho dễ hiểu, chúng em sẽ cố gắng thực hiện trong thời gian tới
Đồ án: PHÂN TÍCH CÚ PHÁP THEO PHƯƠNG PHÁP EARLEY Các nhận xét
Trang 17Tài liệu tham khảo trong quá trình làm đồ án
http://Wikipedia.com
Ngôn ngữ hệ thống và chương trình dịch
(Học viện KTQS)
Đồ án automata khóa 8
Trang 18KÍNH CHÚC THẦY, CÔ GIÁO SỨC KHỎE, HẠNH PHÚC!
ĐẾN ĐÂY KẾT THÚC
Đồ án: PHÂN TÍCH CÚ PHÁP THEO PHƯƠNG PHÁP EARLEY