È l’equivalente delle espressioni algebriche per le stringhe:
Esempio: (0∪1)0⋆ su ε={0,1}
{(0∪1)⟹{0}∪{1}={0,1}⋆⟹{0}⋆⟶(0∪1)0⋆⟹{0,1}∘0⋆
Un’espressione regolare è definita induttivamente come:
re(Σ)=⎩⎨⎧caso basecaso induttivo⎩⎨⎧∅∈re(Σ)ε∈re(Σ)a∈re(Σ), a∈Σ⎩⎨⎧R1∪R2,R1,R2∈re(Σ)R1∘R2,R1,R2∈re(Σ)R1⋆,R1∈re(Σ)
dove ε è la stringa vuota.
Ad ogni re(Σ) corrisponde un linguaggio L(v):
L(r)=⎩⎨⎧caso basecaso induttivo⎩⎨⎧r=∅L(r)=∅r=εL(r)={ε}r=aL(v)={a}⎩⎨⎧r=R1∪R2,L(r)=L(R1)∪L(R2)r=R1∘R2,L(r)=L(R1)∘L(R2)r=R1⋆,L(r)=L(R1)⋆
Teorema: un linguaggio è regolare ⟺ esiste un’espressione regolare che lo descrive
Data r∈re(Σ), voglio costruire un automa a stati finiti (DFA) o un automa non deterministico a stati finiti (NFA) N tale che L(r)=L(N).
Usiamo la ricorsione:
caso base⎩⎨⎧r=a∈Σstart→◯→a∙r=εstart→∙r=∅start→◯
Per induzione,
R1∪R2⟹∃ DFA/NFA M1,M2:R1∘R2∧L(R1)=L(M1)∧L(R2)=M2⟹∃ DFA/NFA M tale che L(M)=L(r)