|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once |
|
|
|
#include "moses/ChartRuleLookupManager.h" |
|
#include "moses/ChartTranslationOptionList.h" |
|
#include "moses/NonTerminal.h" |
|
#include "moses/TranslationModel/RuleTable/UTrieNode.h" |
|
#include "moses/TranslationModel/RuleTable/UTrie.h" |
|
#include "moses/StaticData.h" |
|
#include "ApplicableRuleTrie.h" |
|
#include "StackLattice.h" |
|
#include "StackLatticeBuilder.h" |
|
#include "StackLatticeSearcher.h" |
|
#include "VarSpanTrieBuilder.h" |
|
|
|
#include <memory> |
|
#include <vector> |
|
|
|
namespace Moses |
|
{ |
|
|
|
class InputType; |
|
class ChartCellCollectionBase; |
|
class ChartHypothesisCollection; |
|
class Range; |
|
|
|
|
|
|
|
class Scope3Parser : public ChartRuleLookupManager |
|
{ |
|
public: |
|
Scope3Parser(const ChartParser &parser, |
|
const ChartCellCollectionBase &cellColl, |
|
const RuleTableUTrie &ruleTable, |
|
size_t maxChartSpan) |
|
: ChartRuleLookupManager(parser, cellColl) |
|
, m_ruleTable(ruleTable) |
|
, m_maxChartSpan(maxChartSpan) { |
|
Init(); |
|
} |
|
|
|
void GetChartRuleCollection( |
|
const InputPath &inputPath, |
|
size_t last, |
|
ChartParserCallback &outColl); |
|
|
|
private: |
|
|
|
struct MatchCallback { |
|
public: |
|
MatchCallback(const Range &range, ChartParserCallback &out) |
|
: m_range(range) , m_out(out) |
|
{ } |
|
|
|
void operator()(const StackVec &stackVec) { |
|
m_out.Add(*m_tpc, stackVec, m_range); |
|
} |
|
const Range &m_range; |
|
ChartParserCallback &m_out; |
|
TargetPhraseCollection::shared_ptr m_tpc; |
|
}; |
|
|
|
void Init(); |
|
void InitRuleApplicationVector(); |
|
void FillSentenceMap(SentenceMap &); |
|
void AddRulesToCells(const ApplicableRuleTrie &, std::pair<int, int>, int, |
|
int); |
|
|
|
const RuleTableUTrie &m_ruleTable; |
|
std::vector<std::vector<std::vector< |
|
std::pair<const UTrieNode *, const VarSpanNode *> > > > m_ruleApplications; |
|
std::auto_ptr<VarSpanNode> m_varSpanTrie; |
|
StackVec m_emptyStackVec; |
|
const size_t m_maxChartSpan; |
|
StackLattice m_lattice; |
|
StackLatticeBuilder m_latticeBuilder; |
|
std::vector<VarSpanNode::NonTermRange> m_ranges; |
|
std::vector<std::vector<bool> > m_quickCheckTable; |
|
}; |
|
|
|
} |
|
|