Автоматная грамматика AG =〈A, V, P, S0〉, где A – основной алфавит; P – правила вида vi→ajvj,,vi,vj∈ V, aj∈ A, s0 – аксиома.
Конечный автомат AK =〈A,S,P,s0,sk〉, где A – основной алфавит; S – алфавит состояний; s0 – начальное состояние; sk – конечное состояние; P – правила вида si,ai→sj,si,sj∈ S, aj∈A.
Пример. Для языка L1 заданы:
1. •AG = 〈A,V,P,S0〉
• A = {a, b, c}∪{ Δ }
• V = {S0, S1}
2. • KA = 〈A, V, P, S0, Sk〉
•A = {a, b, c}∪ { Δ }
• V = {S0, S1, Sk}
Δ – маркер конца слова.
AG – правила порождения:
1. S0 →aS0
2. S0 →cS1
3. S1 →bS1
4. S1 → Δ
KA – правила перехода:
1. S0,a→S0
2. S0,c → S1
3. S1,b → S1
4. S1, Δ →Sk
AG порождает слова языка L1. KA распознаёт слова языка L 1. Если заданы правила AG, то правила KA получаются формальными переносами символов A из правой части правил в левую (см. пример). Если заданы правила KA, то правила AG переносом символов A в правую часть правил.
KA задается графом переходов и, по сути, является машиной состояний (SM). См. рис. 6.
Рис. 6. Граф переходов
Рис. 7. Граф переходов 1
|
|
Кроме того, автоматный язык задается регулярным выражением (формулой из букв A, знаков операций: • –конкатенация, * – итерация, ∨ – разделённое «или»). Для примера выше регулярное выражение для L1 = ((a)* · c(b)* Δ).
Пример. Пусть для языка L2 на рисунке задан граф KA и слово w1 = a · a · c · b· c Δ, говорят, что w1 распознаётся KA, если находясь в S0 под действием w1 попадает в Sk. Слово w2 = a · c · b· b· a Δ не распознаётся KA; KA из S0 под действием w2 останется в S1, т. к. нет правила выводящего из S1 под действием какого-либо символа кроме b и Δ. См. рис. 7.
Регулярное выражение для языка L2 =(a)*· (b∨c)· Δ,слова которого распознаются КА.
Пример. Вывод некоторого слова в AG из примера 1. Рис. 8. Вывод слова aaacbbb. В кружочках отмечены номера правил.
Рис. 8. Граф переходов 2