-
Franck Dary authoredFranck Dary authored
Transition.hpp 2.40 KiB
#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)> costDynamic;
std::function<int(const Config & config)> costStatic;
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);
void initTransformSuffix(std::string fromCol, std::string fromObj, std::string fromIndex, std::string toCol, std::string toObj, std::string toIndex, std::string rule);
void initUppercase(std::string col, std::string obj, std::string index);
void initUppercaseIndex(std::string col, std::string obj, std::string index, std::string inIndex);
void initLowercase(std::string col, std::string obj, std::string index);
void initLowercaseIndex(std::string col, std::string obj, std::string index, std::string inIndex);
public :
Transition(const std::string & name);
void apply(Config & config);
bool appliable(const Config & config) const;
int getCostDynamic(const Config & config) const;
int getCostStatic(const Config & config) const;
const std::string & getName() const;
};
#endif