Văn phạm (grammar)

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Giải quyết vấn đề nhận dạng tiếng Việt bằng phân tích cú pháp (Trang 31 - 35)

Trong q trình triển khai, chúng tơi cần dùng đến văn phạm như là nguồn để sinh sơ đồ chuyển trạng thái đẩy xuống. Do đó chúng tơi trình bày ở đây các nội dung phục vụ cho triển khai này và khơng có tham vọng trình bày lý thuyết văn phạm vốn có sẵn và đầy đủ trong các tài liệu giáo khoa như [6] hoặc [12].

2.2.1. Định nghĩa hình thức về văn phạm

Văn phạm là một cấu trúc dùng để lưu quy tắc sinh các câu của một ngơn ngữ. Nó cũng được dùng để phân tích cú pháp ngơn ngữ. Một cách đơn giản, văn phạm gồm một tập các ký hiệu và tập các luật biến đổi các chuỗi ký hiệu này thành chuỗi ký hiệu khác, mặc dù vậy chúng ta có định nghĩa chính xác về văn phạm như sau

G = <V, i, F, C, P> = <Σ, ∆, i, Π>

Trong đó

V gọi là tập ký hiệu

i xác định ký hiệu khởi đầu

F xác định tập các ký hiệu khởi đầu phân loại, F có thể chứa i C xác định tập ký hiệu kết thúc C ≡ Σ, C ∩ F = ∅, C ∩ {i}=∅ P là tập luật, P≡Π

Σ là tập các ký hiệu kết thúc

Bảng 2-7. Định nghĩa hình thức văn phạm

Các luật của văn phạm là công thức xác định một ký tự sẽ sinh ra một chuỗi ký tự nào hoặc một số chuỗi ký tự nào. Do đó tập luật có thể được coi như ánh xạ từ tập ký tự sang tập chuỗi ký tự, chính xác hơn là sang tập các tập con của tập chuỗi ký tự. Ví dụ văn phạm đơn giản nhất

G = <V, i, F, C, P>

V = { s, n, vp, v, pl, tơi, nó, đi, ra, chơi, chợ } i = s

F = { n, v, pl }

C = { tơi, nó, đi, ra, chơi, chợ }

R = { s->n vp, vp->n pl, n->nó, n->tơi, v->đi, v->ra, pl->chơi, pl->chợ }

Bảng 2-8. Ví dụ về văn phạm

Bằng cách sử dụng các luật trong tập luật với ký hiệu ban đầu, chúng ta có thể sinh ra các câu trong ngơn ngữ. Q trình thay thế sẽ kết thúc khi tất cả các ký tự trong chuỗi thuộc tập ký tự hằng C. Một chuỗi ký tự có thể sinh ra hai chuỗi mới nếu nó chứa một ký tự có hai luật sinh.

s n vp

tơi vp, nó vp tơi v pl, nó v pl

tơi đi pl, tơi ra pl, nó đi pl, nó ra pl

tơi đi chơi, tơi đi chợ, tơi ra chơi, tơi ra chợ, nó đi chơi, nó đi chợ, nó ra chơi, nó ra chợ

Bảng 2-9. Ngôn ngữ sinh bởi văn phạm2.2.2. Biểu diễn đơn giản của văn phạm 2.2.2. Biểu diễn đơn giản của văn phạm

Trong q trình triển khai, chúng tơi biểu diễn văn phạm bằng một tập tin văn bản gồm danh sách các luật cách nhau bằng dấu chấm phảy. Các luật có cùng ký hiệu phía trái được viết gộp cách nhau bởi dấu ghạch. Ký hiệu bắt đầu được đánh

dấu bằng dấu sao trong định nghĩa, ký hiệu phân loại có dấu cộng trong phần định nghĩa, ký hiệu hằng được bọc trong giữa các dấu ngoặc kép.

*s = n vp;

+n = "tơi" | "nó"; vp = v pl;

+v = "đi" | "ra"; +pl = "chơi" | "chợ";

Bảng 2-10. Biểu diễn văn phạm trong tập tin

Cách biểu diễn này xúc tích và trực quan hơn cách biểu diễn tốn học. Do đó văn phạm trên hồn tồn tương đương với văn phạm trong ví dụ. Thật vậy, ký tự i có thể được nhặt ra từ phía sau dấu sao. Tập ký tự F có thể được nhặt ra bằng các ký tự sau dấu cộng. Tập ký tự C có thể được nhặt ra bằng các ký tự trong dấu ngoặc. Tập luật có thể được nhặt ra bằng cách tách các dòng trên thành dạng một vế phải và một vế trái.

2.2.3. Định nghĩa triển khai của văn phạm

Trong triển khai, chúng tôi thay đổi một chút để biểu diễn văn phạm. Thay đổi này gần với biểu diễn đơn giản của văn phạm đã trình bày trong phần trên. Chúng tôi coi văn phạm là tập các luật và tập các ký hiệu. Tập luật cần được duy trì để chia sẻ với tất cả các ký hiệu. Chúng tôi chỉ lưu vế phải của luật. Mỗi ký tự sẽ trỏ để các luật mà nó sinh ra. Cách lưu trữ này đặc biệt hữu ích cho việc sinh và phân tích cú pháp từ dưới lên như SLR hay GLR.

struct grammar_s { symbol_s **m_sym; longnat_t m_sym_num; rule_s **m_rule; longnat_t m_rule; };

Bảng 2-11. Định nghĩa triển khai của văn phạm

Các tập i, F, C sẽ được chuyển vào như thuộc tính của ký hiệu. Nghĩa là ký hiệu loại i và ký hiệu loại F, và ký hiệu loại C. Chú ý rằng ký hiệu loại hằng (constant) hay C thì khơng thể là ký hiệu biến (variable) hai i và F, vì chúng ta có ràng buộc trong định nghĩa C ∩ F = ∅, C ∩ {i} = ∅. Nhưng ký hiệu khởi đầu i cũng có thể là ký hiệu phân loại, vì khơng nhất thiết {i} ∩ F = ∅ .

struct symbol_s {

longnat_t m_id; string_s m_name;

enum_s m_var; //là hằng hay biến

bool_t m_var_start; //nếu là biến thì có thể là khởi đầu hay khơng bool_t m_var_pos; //nếu là biến thì có thể là phân loại không rule_s **m_rule;

longnat_t m_rule_num; };

Bảng 2-12. Định nghĩa ký hiệu trong văn phạm

Các luật được coi là danh sách các ký hiệu, và khơng cần có vế trái do các ký hiệu vế trái luôn tham khảo tới danh sách luật. Các luật cần có định danh do chúng được chia sẻ trong hệ thống.

struct rule_s {

longnat_t m_id; symbol_s **m_RHS; longnat_t m_RHS_len; };

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Giải quyết vấn đề nhận dạng tiếng Việt bằng phân tích cú pháp (Trang 31 - 35)

Tải bản đầy đủ (PDF)

(107 trang)