1. DFA (Deterministic
Finite Automata)
Một ngôn ngữ chính quy khi và chỉ khi nó được chấp nhận bởi Automata hữu
hạn (Finite Automata).
Dẫn xuất:
S -> w.A S -> A.w
A -> w A -> w
VD ban đầu:
S -> aA A -> abB
B -> aC | c C -> bB
Automata hữu hạn đơn định DFA(Deterministic Finite Automata):
A = (Q, ∑, 𝜹, q0, F)
Q: Tập các trạng thái
∑: Bảng chữ cái
𝜹: Hàm chuyển
q0: Trạng thái ban đầu
F: Trạng thái kết thúc
VD: A = ({q0, q1}, {a}, 𝜹, q0, q0)
𝜹 = (q0, a) = q1
𝜹 = (q1, a) = q0
Vẽ:
2. L = {a2n} (trạng thái ban đầu cũng là trạng thái kết thúc)
Văn phạm có thể viết theo dẫn xuất:
S0 -> aS1 | 𝜺
S1 -> aS0
Giải: S0 -> aS1 -> aaS0 -> aa𝜺 -> aa (kết thúc)
Quay lại VD ban đầu:
S -> aA A -> abB
B -> aC | c C -> bB
Làm sao để vẽ Automata từ văn phạm trên???
Giải:
Như vậy:
Có hàm chuyển -> vẽ được FA (Finite Automata)
Có văn phạm -> vẽ được FA (Finite Automata)
Nếu có NN L (Language)/BTCQ (Regular Expression) thì có vẽ được FA???
Sự tương quang giữa chúng:
3. VD1:
R -> FA: 10* + 01*
Giải:
VD2:
FA -> R:
Giải:
Từ trái sang phải: (a + b)*d(a + b)
VD3:
L -> FA:
L1 = {∀ từ tùy ý ∈ {a, b}*, có ít nhất 2b}
Giải:
“có ít nhất 2b” (bắt buộc đi qua 2 trạng thái để về trạng thái kết thúc)
L2 = {∀ từ tùy ý ∈ {a, b}*, có chính xác 2b}
Giải:
4. Trạng thái cuối chỉ đọc a để thỏa “có chính xác 2b” khác với L1
L3 = {∀ từ tùy ý ∈ {a, b}*, có số lượng ký tự a = 2n, n ∈ N}
Giải:
Tạo ra số lượng ký tự chẵn cần một cái vòng lặp để vẽ.