Các phép toán trên ngôn ngữ

Một phần của tài liệu công cụ hỗ trợ học tập tin học lý thuyết trên web (Trang 29 - 30)

II. NGÔN NGỮ VÀ BIỂU DIỄN NGÔN NGỮ

2.1.4. Các phép toán trên ngôn ngữ

Từ các ngôn ngữ có trƣớc, ta có thể thu đƣợc các ngôn ngữ mới nhờ áp dụng các phép toán trên ngôn ngữ. Trƣớc hết, vì ngôn ngữ là một tập hợp, nên mọi phép toán trên tập hợp nhƣ: hợp (union), giao(intersection) và hiệu (difference) ... đều có thể áp dụng lên các ngôn ngữ. Ngoài ra, còn có thêm một số phép toán thƣờng gặp khác nhƣ sau :

Phép phần bù (complement) của một ngôn ngữ L trên bộ chữ cái Σ đƣợc định nghĩa nhƣ sau: L*L

với chú ý khái niệm bù của ngôn ngữ đƣợc định nghĩa dựa trên Σ*.

Phép nối kết (concatenation) của hai ngôn ngữ L1 trên bộ chữ cái Σ1 và L2 trên bộ chữ cái Σ2 đƣợc định nghĩa bởi :

L1L2 = {w1w2 | w1∈ L1 và w2∈ L2 } trên bộ chữ cái Σ1∪ Σ2 Ký hiệu Li

đƣợc mở rộng để dùng cho phép nối kết nhiều lần (còn gọi là phép lũy thừa trên chuỗi) trên cùng một tập ngôn ngữ L, tổng quát : Li = LLi - 1. Theo định nghĩa, ta có một trƣờng hợp đặc biệt : L0 = {ε}, với mọi ngôn ngữ L.

Phép bao đóng (closure) : Trong nhiều trƣờng hợp, ngƣời ta muốn thành lập một ngôn ngữ bằng cách nối kết các chuỗi (với số lƣợng bất kỳ) lấy trong một ngôn ngữ L cho trƣớc, các phép toán đó nhƣ sau:

Bao đóng (Kleene) của ngôn ngữ L, ký hiệu L* đƣợc định nghĩa là hợp của mọi tập tích trên L: i iY L L    0 *

Bao đóng dương (positive) của ngôn ngữ L, ký hiệu L+ đƣợc định nghĩa là hợp của mọi tích dƣơng trên L: i

iY L L     0 Chú ý rằng : L+ = LL* = L*L và L* = L+∪ {ε} Ví dụ 2.3: Cho ngôn ngữ L = { a, ba } thì L2 = { aa, aba, baa, baba}

L2 = { aaa, aaba, abaa, ababa, baaa, baaba, babaa, bababa}

L* = { ε, a, ba, aa, aba, baa, baba, aaa, aaba, abaa, ababa, baaa, baaba, babaa, bababa … }

Một phần của tài liệu công cụ hỗ trợ học tập tin học lý thuyết trên web (Trang 29 - 30)

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

(106 trang)