def read_input_stepwise(self, input_str): """ Check if the given string is accepted by this DPDA. Yield the DPDA's current state and current stack at each step. """ current_state = self.initial_state stack = PDAStack([self.initial_stack_symbol]) yield current_state, stack for input_symbol in input_str: current_state, new_stack_top = self._get_transition( current_state, input_symbol, stack.top()) self._replace_stack_top(stack, new_stack_top) # Follow any lambda transitions from the current configuration while self._has_lambda_transition(current_state, stack.top()): current_state, new_stack_top = self._get_transition( current_state, 'ε', stack.top()) self._replace_stack_top(stack, new_stack_top) yield current_state, stack self._check_for_input_rejection(current_state, stack)
def _validate_input_yield(self, input_str): """ Check if the given string is accepted by this DPDA. Yield the DPDA's current state and current stack at each step. """ current_state = self.initial_state stack = PDAStack([self.initial_stack_symbol]) yield current_state, stack for input_symbol in input_str: current_state, new_stack_top = self._get_transition( current_state, input_symbol, stack.top()) self._replace_stack_top(stack, new_stack_top) # Follow any lambda transitions from the current configuration while self._has_lambda_transition(current_state, stack.top()): current_state, new_stack_top = self._get_transition( current_state, '', stack.top()) self._replace_stack_top(stack, new_stack_top) yield current_state, stack self._check_for_input_rejection(current_state, stack)