TuringSim
C++ framework to simulate abstract computing models
simplePushdownMachineTransition.h
1 #pragma once
2 
3 #include <memory/word.h>
4 #include <memory/stack.h>
5 #include <transition/PDM/pushdownMachineTransition.h>
6 
14  template <
15  typename StateType_,
16  typename LetterType_,
17  typename StackSymbolType_
18  >
20  public PushdownMachineTransition<StateType_, LetterType_, StackSymbolType_> {
22  public:
30 
31  static_assert(std::is_same_v<StateType, StateType_>);
32  static_assert(std::is_same_v<ApplyHelperType, std::monostate>);
33 
36 
39 
42 
47 
52 
54  virtual ~SimplePushdownMachineTransition() = default;
55 
63  virtual std::optional<ApplyHelperType> match(const StateType& state, const StorageType& storage) const override final {
64  return this->matchFromCurrentLetter(state, std::get<WordType>(storage).front_opt(), std::get<StackType>(storage).top_opt());
65  }
66 
75  virtual std::optional<ApplyHelperType> matchFromCurrentLetter(const StateType& state, const std::optional<LetterType>& letter, const std::optional<StackSymbolType>& symbol) const {
76  if(state == preState && letter && symbol && *letter == preLetter && *symbol == preSymbol) {
77  return {std::monostate{}};
78  }
79  return {};
80  }
81 
82 #pragma clang diagnostic push
83 #pragma clang diagnostic ignored "-Wunused-parameter"
84 
96  virtual StateType apply(const StateType& state, StorageType& storage, ApplyHelperType&& helper, bool& running) const override final {
97  std::get<StackType>(storage).pop();
98  std::get<StackType>(storage).pushs(postSymbols);
99  std::get<WordType>(storage).read();
100  return postState;
101  }
102 #pragma clang diagnostic pop
103 
104  private:
105  StateType preState;
106  LetterType preLetter;
107  StackSymbolType preSymbol;
108  StateType postState;
109  std::vector<StackSymbolType> postSymbols;
110  };
111 }
TuringSim::Transition::PDM::PushdownMachineTransition::StorageType
StorageType_ StorageType
The type of storage.
Definition: transition.h:77
TuringSim::Transition::PDM::SimplePushdownMachineTransition::StackSymbolType
StackSymbolType_ StackSymbolType
The type of symbols in the stack.
Definition: pushdownMachineTransition.h:56
TuringSim::Transition::PDM::SimplePushdownMachineTransition::match
virtual std::optional< ApplyHelperType > match(const StateType &state, const StorageType &storage) const override final
Test whether the transition matches a configuration. Returned optional is empty iff the transition do...
Definition: simplePushdownMachineTransition.h:63
TuringSim::Transition::PDM::SimplePushdownMachineTransition::matchFromCurrentLetter
virtual std::optional< ApplyHelperType > matchFromCurrentLetter(const StateType &state, const std::optional< LetterType > &letter, const std::optional< StackSymbolType > &symbol) const
Test whether the transition matches a configuration. Returned optional is empty iff the transition do...
Definition: simplePushdownMachineTransition.h:75
TuringSim::Transition::PDM::SimplePushdownMachineTransition::StateType
StateType_ StateType
The type of states.
Definition: transition.h:72
TuringSim::Transition::PDM::SimplePushdownMachineTransition::SimplePushdownMachineTransition
SimplePushdownMachineTransition(const SimplePushdownMachineTransition &)=default
The default copy constructor.
TuringSim::Transition::PDM::PushdownMachineTransition::LetterType
LetterType_ LetterType
The type of letter of the word.
Definition: pushdownMachineTransition.h:51
TuringSim::Transition::PDM::SimplePushdownMachineTransition::~SimplePushdownMachineTransition
virtual ~SimplePushdownMachineTransition()=default
The default virtual destructor.
TuringSim::Transition::PDM::PushdownMachineTransition::ApplyHelperType
ApplyHelperType_ ApplyHelperType
The type of apply helpers.
Definition: transition.h:82
TuringSim::Transition::PDM::SimplePushdownMachineTransition::operator=
SimplePushdownMachineTransition & operator=(SimplePushdownMachineTransition &&)=default
The default move assignment operator.
TuringSim::Transition::PDM::PushdownMachineTransition::StackSymbolType
StackSymbolType_ StackSymbolType
The type of symbols in the stack.
Definition: pushdownMachineTransition.h:56
TuringSim::Transition::PDM::PushdownMachineTransition::StackType
Memory::Stack::Stack< StackSymbolType_ > StackType
The type of the stack of a machine with such transition.
Definition: pushdownMachineTransition.h:39
TuringSim::Transition::PDM::SimplePushdownMachineTransition
Transition of pushdown machines, i.e. transition on a word and a stack.
Definition: simplePushdownMachineTransition.h:20
TuringSim::Transition::PDM::SimplePushdownMachineTransition::LetterType
LetterType_ LetterType
The type of letter of the word.
Definition: pushdownMachineTransition.h:51
TuringSim::Transition::PDM::SimplePushdownMachineTransition::apply
virtual StateType apply(const StateType &state, StorageType &storage, ApplyHelperType &&helper, bool &running) const override final
Apply a previously matching transition and return the new state.
Definition: simplePushdownMachineTransition.h:96
TuringSim::Transition::PDM::SimplePushdownMachineTransition::operator=
SimplePushdownMachineTransition & operator=(const SimplePushdownMachineTransition &)=default
The default copy assignment operator.
TuringSim::Transition::PDM::PushdownMachineTransition
Transition of pushdown machines, i.e. transition on a word and a stack.
Definition: pushdownMachineTransition.h:30
TuringSim::Transition::PDM::PushdownMachineTransition::StateType
StateType_ StateType
The type of states.
Definition: transition.h:72
TuringSim::Transition::PDM::SimplePushdownMachineTransition::SimplePushdownMachineTransition
SimplePushdownMachineTransition(SimplePushdownMachineTransition &&)=default
The default move constructor.
TuringSim::Transition::PDM::SimplePushdownMachineTransition::SimplePushdownMachineTransition
SimplePushdownMachineTransition()=default
The default constructor.
TuringSim::Transition::PDM::PushdownMachineTransition::WordType
Memory::Word::Word< LetterType_ > WordType
The type of words read by a machine with such transition.
Definition: pushdownMachineTransition.h:35
TuringSim::Transition::PDM
Transitions for pushdown machines.
Definition: generalPushdownMachineTransition.h:7