00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #pragma once
00021
00022 #include "moses/ChartRuleLookupManager.h"
00023 #include "moses/ChartTranslationOptionList.h"
00024 #include "moses/NonTerminal.h"
00025 #include "moses/TranslationModel/RuleTable/UTrieNode.h"
00026 #include "moses/TranslationModel/RuleTable/UTrie.h"
00027 #include "moses/StaticData.h"
00028 #include "ApplicableRuleTrie.h"
00029 #include "StackLattice.h"
00030 #include "StackLatticeBuilder.h"
00031 #include "StackLatticeSearcher.h"
00032 #include "VarSpanTrieBuilder.h"
00033
00034 #include <memory>
00035 #include <vector>
00036
00037 namespace Moses
00038 {
00039
00040 class InputType;
00041 class ChartCellCollectionBase;
00042 class ChartHypothesisCollection;
00043 class Range;
00044
00047 class Scope3Parser : public ChartRuleLookupManager
00048 {
00049 public:
00050 Scope3Parser(const ChartParser &parser,
00051 const ChartCellCollectionBase &cellColl,
00052 const RuleTableUTrie &ruleTable,
00053 size_t maxChartSpan)
00054 : ChartRuleLookupManager(parser, cellColl)
00055 , m_ruleTable(ruleTable)
00056 , m_maxChartSpan(maxChartSpan) {
00057 Init();
00058 }
00059
00060 void GetChartRuleCollection(
00061 const InputPath &inputPath,
00062 size_t last,
00063 ChartParserCallback &outColl);
00064
00065 private:
00066
00067 struct MatchCallback {
00068 public:
00069 MatchCallback(const Range &range, ChartParserCallback &out)
00070 : m_range(range) , m_out(out)
00071 { }
00072
00073 void operator()(const StackVec &stackVec) {
00074 m_out.Add(*m_tpc, stackVec, m_range);
00075 }
00076 const Range &m_range;
00077 ChartParserCallback &m_out;
00078 TargetPhraseCollection::shared_ptr m_tpc;
00079 };
00080
00081 void Init();
00082 void InitRuleApplicationVector();
00083 void FillSentenceMap(SentenceMap &);
00084 void AddRulesToCells(const ApplicableRuleTrie &, std::pair<int, int>, int,
00085 int);
00086
00087 const RuleTableUTrie &m_ruleTable;
00088 std::vector<std::vector<std::vector<
00089 std::pair<const UTrieNode *, const VarSpanNode *> > > > m_ruleApplications;
00090 std::auto_ptr<VarSpanNode> m_varSpanTrie;
00091 StackVec m_emptyStackVec;
00092 const size_t m_maxChartSpan;
00093 StackLattice m_lattice;
00094 StackLatticeBuilder m_latticeBuilder;
00095 std::vector<VarSpanNode::NonTermRange> m_ranges;
00096 std::vector<std::vector<bool> > m_quickCheckTable;
00097 };
00098
00099 }