This subroutine reads tree
and tree_top
variable, constructs the NFA graph,
and then initializes the DFA graph.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(automaton_t), | intent(inout) | :: | self |
pure subroutine automaton__initialize(self) implicit none class(automaton_t), intent(inout) :: self type(nfa_state_set_t) :: initial_closure integer(int32) :: new_index !-- DFA initialize ! Invokes DFA preprocessing. call self%dfa%preprocess() ! Check if it has been initialized. if (self%dfa%dfa_top /= DFA_INITIAL_INDEX) then error stop "DFA graph initialization is failed." end if call init_state_set(self%entry_set, self%nfa%nfa_top) ! Constructing a DFA initial state from the NFA initial state. call add_nfa_state(self%entry_set, self%nfa_entry) call init_state_set(initial_closure, self%nfa%nfa_top) initial_closure = self%entry_set ! Add an NFA node reachable by epsilon transitions to the entrance state set within DFA. call self%epsilon_closure(initial_closure, self%nfa_entry) ! Assign the computed initial closure into self%entry_set self%entry_set = initial_closure ! Register `entry_set` as a new DFA state in the graph. call self%register_state(self%entry_set, new_index) ! Assign the returned index to the `initial_index` of the graph. self%initial_index = new_index end subroutine automaton__initialize