#ifndef TRANSITION__H #define TRANSITION__H #include <vector> #include "Action.hpp" #include "Config.hpp" class Transition { private : std::string name; std::string state; std::vector<Action> sequence; std::function<int(const Config & config)> cost; private : static int getNbLinkedWith(int firstIndex, int lastIndex, Config::Object object, int withIndex, const Config & config); static int getNbLinkedWithHead(int firstIndex, int lastIndex, Config::Object object, int withIndex, const Config & config); static int getNbLinkedWithDeps(int firstIndex, int lastIndex, Config::Object object, int withIndex, const Config & config); static int getFirstIndexOfSentence(int baseIndex, const Config & config); static int getLastIndexOfSentence(int baseIndex, const Config & config); void initWrite(std::string colName, std::string object, std::string index, std::string value); void initAdd(std::string colName, std::string object, std::string index, std::string value); void initEagerShift(); void initStandardShift(); void initEagerLeft_rel(std::string label); void initEagerRight_rel(std::string label); void initStandardLeft_rel(std::string label); void initStandardRight_rel(std::string label); void initDeprel(std::string label); void initEagerLeft(); void initEagerRight(); void initReduce_strict(); void initReduce_relaxed(); void initEOS(int bufferIndex); void initNothing(); void initIgnoreChar(); void initEndWord(); void initAddCharToWord(); void initSplitWord(std::vector<std::string> words); void initSplit(int index); public : Transition(const std::string & name); void apply(Config & config); bool appliable(const Config & config) const; int getCost(const Config & config) const; const std::string & getName() const; }; #endif