Я думаю, что лучше сначала исключить эпсилон-переход, чтобы получить NFA (без эпсилон-перехода).От NFA должно быть проще получить эквивалентный DFA.
Как устранить эпсилон-переход?
Во-первых, у нас есть термин ECLOSE
состояния.ECLOSE(q)
определяется как набор всех состояний (включая само состояние q
), которые могут быть достигнуты после перехода в эпсилон.В вашем случае:
ECLOSE(1) = {1,2}
Чтобы исключить эпсилон-переход, выполните следующие шаги:
- Если
ECLOSE(1)
содержит конечное состояние, тогда установите state 1
в качестве конечного состояния - Добавить переход (с соответствующей меткой) из
state 1
в state q
тогда и только тогда, когда есть переход из некоторых состояний в ECLOSE(1)
в state q
- Теперь вы можете удалить все эпсилонпереходы.
После описанных выше шагов (вы не указали, какие состояния являются начальными и / или конечными), вы должны получить:
a b c
1 {3} {} {}
2 {3} {} {}
3 {4} {3,4} {}
4 {4} {} {}