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

Một phần của tài liệu Giải quyết vấn đề nhận dạng tiếng Việt bằng phân tích cú pháp (Trang 33)

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; }; Bảng 2-13. Định nghĩa luật trong văn phạm

Một phần của tài liệu Giải quyết vấn đề nhận dạng tiếng Việt bằng phân tích cú pháp (Trang 33)

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

(107 trang)