Języki formalne — wprowadzenie

by Jerry Sky

2020-10-08



1. Podstawowe definicje

  1. Alfabet (Σ\Sigma) — skończony zbiór symboli
  2. Słowo — skończony ciąg symboli z alfabetu
  3. Język — zbiór słów nad danym alfabetem (\emptyset — język pusty)
  4. ϵ\epsilon — słowo puste

2. Deterministyczny Automat Skończony (DFA)

— uporządkowana piątka (Q,Σ,δ,q0,F)(Q, \Sigma, \delta, q_0, F) gdzie

2.1. Rozszerzenie funkcji przejścia

Funkcję δ\delta możemy rozszerzyć w taki sposób, żeby akceptowała całe słowa (możemy tak zrobić jeśli δ^(q,ϵ)=q\hat\delta(q, \epsilon) = q): δ^(q,wa)=δ(δ^(q,w),a) \hat{\delta}(q, wa) = \delta(\hat{\delta}(q,w),a)

Automat akceptuje słowo ww jeśli delta^(q0,w)F\hat{delta}(q_0, w) \in F.


2.2. Przykład DFA

Mamy DFA M=({q0,q1,q2,q3},{0,1},δ,q0,{q0})M = (\{q_0, q_1, q_2, q_3\}, \{0,1\}, \delta, q_0, \{q_0\})

δ\delta 00 11
q0q_0 q2q_2 q1q_1
q1q_1 q3q_3 q0q_0
q2q_2 q0q_0 q3q_3
q3q_3 q1q_1 q2q_2

Maszyna ta pozwala tylko na takie ciągi, w których mamy parzystą liczbę 00 oraz parzystą liczbę 11.


3. Niedeterministyczny Automat Skończony (NFA)

Modyfikacja DFA:
istnieje * przejść ze stanu przy tym samym symbolu wejściowym. δ:Q×Σ2Q \delta: Q \times \Sigma \to 2^Q

Automat niedeterministyczny akceptuje słowo ww jeżeli istnieje odpowiadający mu ciąg przejść ze stanu początkowego do stanu akceptującego.

3.1. Przykład NFA

Mamy NFA M=({q0,q1,q2,q3,q4},{0,1},δ,q0,{q2,q4})M = (\{q_0, q_1, q_2, q_3, q_4\}, \{0,1\}, \delta, q_0, \{q_2, q_4\})

δ\delta 00 11
q0q_0 {q0,q3}\{q_0, q_3\} {q0,q1}\{q_0, q_1\}
q1q_1 \emptyset {q2}\{q_2\}
q2q_2 {q2}\{q_2\} {q2}\{q_2\}
q3q_3 {q4}\{q_4\} \emptyset
q4q_4 {q4}\{q_4\} \emptyset
q5q_5 {q4}\{q_4\} {q4}\{q_4\}

Maszyna ta akceptuje tylko ciągi z infiksem 0000 lub z infiksem 1111.


4. NFAϵ\text{NFA}_\epsilon

Wprowadzamy dodatkową modyfikację: dopuszczamy przejścia między stanami bez symboli wejściowych. δ:Q×(Σ{ϵ})2Q \delta: Q \times (\Sigma \cup \{\epsilon\}) \to 2^Q


5. Wyrażenia regularne (RE)

Niech L,L1,L2L, L_1, L_2 — języki nad alfabetem Σ\Sigma.
Wówczas L1L2={xy:xL1yL2}L0={ϵ}Li+1=LLidla i>0L=i=0Lidomknięcie Kleene’ego(L+=i=1Li) \begin{aligned} L_1L_2 &= \{xy : x\in L_1 \land y \in L_2\}\\ L^0 &= \{\epsilon\}\\ L^{i+1} &= LL^i \quad \text{dla } i > 0\\ L^* &= \bigcup_{i=0}^{\infty} L^i \quad \text{domknięcie Kleene’ego} \quad \left( L^+ = \bigcup_{i=1}^{\infty} L^i \right) \end{aligned}\\

5.1. DEF

Wyrażenia regularne:

5.2. Działania

Mamy wyrażenia regularne rr oraz ss reprezentujące odpowiednio języki RR oraz SS, wówczas:


5.3. Przykłady