00001 #pragma once
00002
00003 #include <vector>
00004
00005 #include "PatternApplicationTrie.h"
00006 #include "SymbolRange.h"
00007
00008 namespace Moses
00009 {
00010 namespace Syntax
00011 {
00012 namespace S2T
00013 {
00014
00015 class SymbolRangeCalculator
00016 {
00017 public:
00018 void Calc(const PatternApplicationKey &, int, int,
00019 std::vector<SymbolRange> &);
00020
00021 private:
00022
00023 struct AuxSymbolInfo {
00024 int distanceToNextTerminal;
00025 int distanceToPrevTerminal;
00026 };
00027
00028 void FillInTerminalRanges(const PatternApplicationKey &,
00029 std::vector<SymbolRange> &);
00030
00031 void FillInAuxSymbolInfo(const std::vector<SymbolRange> &);
00032
00033 void FillInGapRanges(const PatternApplicationKey &, int, int,
00034 std::vector<SymbolRange> &);
00035
00036 std::vector<AuxSymbolInfo> m_auxSymbolInfo;
00037 };
00038
00039 }
00040 }
00041 }