Для запуска программы введите:
python3 main.py '[регулярное выражение]'
Никаких дополнительных зависимостей не требуется!
Пример работы:
>>> python3 main.py '(A;B)*CA*'
Полученный по регулярному выражению НКА:
A | 2 -> [3] | 11 -> [12]
B | 4 -> [5]
C | 8 -> [9]
EPSILON | 0 -> [1, 7] | 1 -> [2, 4] | 3 -> [6] | 5 -> [6] | 6 -> [1, 7] | 7 -> [8] | 9 -> [10] | 10 -> [11, 13] | 12 -> [11, 13]
Final states: [13]
--------------------
ДКА полученный по НКА (не минимальный):
A | 0 -> [4] | 1 -> [2] | 2 -> [2] | 3 -> [4] | 4 -> [4]
B | 0 -> [3] | 3 -> [3] | 4 -> [3]
C | 0 -> [1] | 3 -> [1] | 4 -> [1]
Final states: [1, 2]
--------------------
Минимальный ДКА:
A | 0 -> [0] | 1 -> [1]
B | 0 -> [0]
C | 0 -> [1]
Final states: [1]
--------------------
На данный момент поддерживаются операции:
*
- Повторение символа 0 и более раз (A*
=>AAAA...AA
,A*C
=>C
)+
- Аналогично*
, но символ должен появится хотя бы один раз (A+
=>A
,A+
=>AAA...AAA
)#
- Обобщенная итерация.A#B
=A(BA)*
;
- Альтернация (A;B
=>A
,A;B
=>B
,(A;B)*
=>ABABABABABABBB
),
- Конкатенация (A,B
=>AB
). Ставится по умолчанию между всеми символами и группами слов и имеет наименьший приоритет (вместо(A,B)*,D,(F)*
достаточно написать(AB)*DF*
)