/// @brief The purpose of a TapeMachine is to predict a sequence of Action, that will transform an initial Config into a terminal Config.
/// The terminal Config will contains more information than the initial one, for
/// instance if the initial Config consists of words, the final Config could consist of words + their part of speech tags.\n
/// The TapeMachine is made of states, linked together by Transition. Every step is associated with a Classifier.\n
/// The predictions are made by classifiers, which at each step give a weight to every possible Action. The most probable Action will then be chosen and the corresponding Transition will be taken.\n
classTapeMachine
classTapeMachine
{
{
public:
public:
classState;
classState;
/// @brief A Transition from one state to another.
structTransition
structTransition
{
{
/// @brief The other end of the Transition.
State*dest;
State*dest;
/// @brief The prefix of the Action name that will trigger the choice of this Transition.
std::stringactionPrefix;
std::stringactionPrefix;
/// @brief The relative movement that will be applied to the Config head when taking this transition.
intheadMvt;
intheadMvt;
/// @brief Construct a new Transition.
///
/// @param dest The other end of the Transition.
/// @param prefix The prefix of the Action name that will trigger the choice of this Transition.
/// @param mvt The relative movement that will be applied to the Config head when taking this transition.