TuringSim
C++ framework to simulate abstract computing models
stringTuringStyleMConfigurationTuringMachineTransition.h
1 #pragma once
2 
3 #include <state/mConfiguration/mConfigurationParser.h>
4 #include <transition/Turing/turingStyleInstructionListParser.h>
5 #include <symbol/turingStyleMixedSymbolPatternParser.h>
6 #include <transition/Turing/turingStyleMConfigurationTuringMachineTransition.h>
7 
9 
14  template <bool isHalfTape = false>
16  : public TuringStyleMConfigurationTuringMachineTransition<std::string, isHalfTape> {
18  public:
31 
32  static_assert(std::is_same_v<NodeStateType, std::string>);
33  static_assert(std::is_same_v<ApplyHelperType, std::map<std::string, std::shared_ptr<const State::MConfiguration::MConfiguration<std::string>>>>);
34 
38 
49  const SymbolPattern& preSymbolPattern,
50  const std::vector<Instruction>& instructions,
51  const NodeStateType& symbolPlaceHolder,
53  ) :
55  preStatePattern,
56  preSymbolPattern,
57  instructions,
58  symbolPlaceHolder,
59  postStatePattern
60  )
61  {}
62 
72  const std::string& preStatePatternString,
73  const std::string& preSymbolPatternString,
74  const std::string& instructionsString,
75  const std::string& symbolPlaceHolder,
76  const std::string& postStatePatternString
77  ) :
79  State::MConfiguration::MConfigurationParser{}.parse(preStatePatternString),
80  Symbol::TuringStyleMixedSymbolPatternParser{}.parse(preSymbolPatternString),
81  TuringStyleInstructionListParser<isHalfTape>{}.parse(instructionsString),
82  symbolPlaceHolder,
83  State::MConfiguration::MConfigurationParser{}.parse(postStatePatternString)
84  )
85  {}
86 
91  StringTuringStyleMConfigurationTuringMachineTransition(const std::array<std::string, 5>& t) :
93  State::MConfiguration::MConfigurationParser{}.parse(t[0]),
95  TuringStyleInstructionListParser<isHalfTape>{}.parse(t[2]),
96  t[3],
98  )
99  {}
100 
103 
106 
111 
116 
119  };
120 }
TuringSim::Transition::Transition< std::shared_ptr< const State::MConfiguration::MConfiguration< std::string > >, Memory::TapeLike< hasHalfTape, std::string >, MConfigurationTuringMachineTransitionApplyHelper< std::string > >::ApplyHelperType
MConfigurationTuringMachineTransitionApplyHelper< std::string > ApplyHelperType
The type of apply helpers.
Definition: transition.h:82
TuringSim::Transition::Turing::StringTuringStyleMConfigurationTuringMachineTransition::~StringTuringStyleMConfigurationTuringMachineTransition
virtual ~StringTuringStyleMConfigurationTuringMachineTransition() override=default
The default virtual destructor.
TuringSim::State::MConfiguration::MConfiguration
The base class for m-configurations.
Definition: mConfiguration.h:25
TuringSim::Transition::Turing::TuringStyleMConfigurationTuringMachineTransition::SymbolPattern
Symbol::TuringStyleMixedSymbolPattern< T > SymbolPattern
The type of symbol patterns.
Definition: turingStyleMConfigurationTuringMachineTransition.h:34
TuringSim::Transition::Turing::TuringStyleMConfigurationTuringMachineTransition::DynamicWrite
An instruction that writes a single symbol identified by a key in a substitution.
Definition: turingStyleMConfigurationTuringMachineTransition.h:47
TuringSim::Transition::Turing
Transitions for Turing machines.
Definition: localTuringMachineTransition.h:6
TuringSim::Transition::Turing::MConfigurationTuringMachineTransition< T, T, hasHalfTape >::HasHalfTape
std::integral_constant< bool, hasHalfTape > HasHalfTape
Whether the tape is a half-tape or a full tape.
Definition: turingMachineTransition.h:49
TuringSim::Symbol::TuringStyleMixedSymbolPatternParser
A parser of mixed symbol pattern where symbols are std::string
Definition: turingStyleMixedSymbolPatternParser.h:35
TuringSim::Transition::Turing::StringTuringStyleMConfigurationTuringMachineTransition::StringTuringStyleMConfigurationTuringMachineTransition
StringTuringStyleMConfigurationTuringMachineTransition(StringTuringStyleMConfigurationTuringMachineTransition &&)=default
The default move constructor.
TuringSim::Transition::Turing::TuringMachineTransition< std::shared_ptr< const State::MConfiguration::MConfiguration< T > >, T, MConfigurationTuringMachineTransitionApplyHelper< T >, hasHalfTape >::StateType
std::shared_ptr< const State::MConfiguration::MConfiguration< T > > StateType
The type of states.
Definition: transition.h:72
TuringSim::Transition::Turing::TuringMachineTransition< std::shared_ptr< const State::MConfiguration::MConfiguration< T > >, T, MConfigurationTuringMachineTransitionApplyHelper< T >, hasHalfTape >::ApplyHelperType
MConfigurationTuringMachineTransitionApplyHelper< T > ApplyHelperType
The type of apply helpers.
Definition: transition.h:82
TuringSim::Transition::Turing::MConfigurationTuringMachineTransition< T, T, hasHalfTape >::SubstitutionType
ApplyHelperType SubstitutionType
The type of substitutions, same as apply helper.
Definition: mConfigurationTuringMachineTransition.h:53
TuringSim::Transition::Turing::MConfigurationTuringMachineTransition< T, T, hasHalfTape >::Movement
StorageType_::Movement Movement
The type of movement on the tape.
Definition: turingMachineTransition.h:42
TuringSim::Transition::Turing::StringTuringStyleMConfigurationTuringMachineTransition::StringTuringStyleMConfigurationTuringMachineTransition
StringTuringStyleMConfigurationTuringMachineTransition(const StringTuringStyleMConfigurationTuringMachineTransition &)=default
The default copy constructor.
TuringSim::State::MConfiguration::MConfigurationParser
Parse a m-configuration written as a std::string into a MConfiguration<std::string>.
Definition: mConfigurationParser.h:21
TuringSim::Transition::Turing::StringTuringStyleMConfigurationTuringMachineTransition::StringTuringStyleMConfigurationTuringMachineTransition
StringTuringStyleMConfigurationTuringMachineTransition(const std::array< std::string, 5 > &t)
Same as StringTuringStyleMConfigurationTuringMachineTransition(const std::string& preStatePatternStri...
Definition: stringTuringStyleMConfigurationTuringMachineTransition.h:91
TuringSim::Transition::Turing::StringTuringStyleMConfigurationTuringMachineTransition::StringTuringStyleMConfigurationTuringMachineTransition
StringTuringStyleMConfigurationTuringMachineTransition(const State::MConfiguration::MConfiguration< NodeStateType > &preStatePattern, const SymbolPattern &preSymbolPattern, const std::vector< Instruction > &instructions, const NodeStateType &symbolPlaceHolder, const State::MConfiguration::MConfiguration< NodeStateType > &postStatePattern)
Regular constructor.
Definition: stringTuringStyleMConfigurationTuringMachineTransition.h:47
TuringSim::Transition::Turing::StringTuringStyleMConfigurationTuringMachineTransition::operator=
StringTuringStyleMConfigurationTuringMachineTransition & operator=(StringTuringStyleMConfigurationTuringMachineTransition &&)=default
The default move assignment operator.
TuringSim::Transition::Turing::StringTuringStyleMConfigurationTuringMachineTransition::StringTuringStyleMConfigurationTuringMachineTransition
StringTuringStyleMConfigurationTuringMachineTransition(const std::string &preStatePatternString, const std::string &preSymbolPatternString, const std::string &instructionsString, const std::string &symbolPlaceHolder, const std::string &postStatePatternString)
Regular constructor, but use default parsers to parse each field (except symbolPlaceHolder).
Definition: stringTuringStyleMConfigurationTuringMachineTransition.h:71
TuringSim::Transition::Turing::TuringStyleMConfigurationTuringMachineTransition::ConstantInstruction
MConfigurationTuringMachineTransition_::Instruction ConstantInstruction
The type of instructions we can run without context. Dynamic instruction will be translated to consta...
Definition: turingStyleMConfigurationTuringMachineTransition.h:40
TuringSim::Symbol::TuringStyleMixedSymbolPattern< T >
TuringSim::Transition::Turing::StringTuringStyleMConfigurationTuringMachineTransition
Transitions as we find in 1936 Turing's paper, where nodes are std::string.
Definition: stringTuringStyleMConfigurationTuringMachineTransition.h:16
TuringSim::Symbol::TuringStyleMixedSymbolPatternParser::parse
SymbolPattern parse(const std::string &pattern) const
Parse a string into a symbol pattern. The usual entry point.
Definition: turingStyleMixedSymbolPatternParser.cpp:70
TuringSim::Transition::Turing::TuringStyleMConfigurationTuringMachineTransition
Transitions as we find in 1936 Turing's paper.
Definition: turingStyleMConfigurationTuringMachineTransition.h:19
TuringSim::Transition::Turing::TuringMachineTransition< std::shared_ptr< const State::MConfiguration::MConfiguration< T > >, T, MConfigurationTuringMachineTransitionApplyHelper< T >, hasHalfTape >::StorageType
StorageType_ StorageType
The type of storage.
Definition: transition.h:77
TuringSim::Transition::Turing::MConfigurationTuringMachineTransition< T, T, hasHalfTape >::SymbolType
T SymbolType
The type of symbols on the tape.
Definition: turingMachineTransition.h:37
TuringSim::Transition::Turing::StringTuringStyleMConfigurationTuringMachineTransition::operator=
StringTuringStyleMConfigurationTuringMachineTransition & operator=(const StringTuringStyleMConfigurationTuringMachineTransition &)=default
The default copy assignment operator.
TuringSim::Transition::Turing::TuringStyleMConfigurationTuringMachineTransition::Instruction
std::variant< ConstantInstruction, DynamicWrite > Instruction
Either a constant instruction that can be executed without context, or a dynamic instruction (dynamic...
Definition: turingStyleMConfigurationTuringMachineTransition.h:71
TuringSim::Transition::Turing::MConfigurationTuringMachineTransition< T, T, hasHalfTape >::NodeStateType
T NodeStateType
The type of the nodes in the m-configurations.
Definition: mConfigurationTuringMachineTransition.h:48
TuringSim::State::MConfiguration::MConfigurationParser::parse
std::shared_ptr< const MConfiguration< std::string > > parse(const std::string &mConfiguration) const
Parse a string into a m-configuration. The usual entry point.
Definition: mConfigurationParser.cpp:41
TuringSim::Transition::Turing::StringTuringStyleMConfigurationTuringMachineTransition::StringTuringStyleMConfigurationTuringMachineTransition
StringTuringStyleMConfigurationTuringMachineTransition()=delete
Build a StringTuringStyleMConfigurationTuringMachineTransition from nothing is meaningless.