00001 #include "Rule.h"
00002
00003 #include "Node.h"
00004 #include "Subgraph.h"
00005
00006 namespace MosesTraining
00007 {
00008 namespace Syntax
00009 {
00010 namespace GHKM
00011 {
00012
00013 int Rule::Scope(const std::vector<Symbol> &symbols)
00014 {
00015 int scope = 0;
00016 bool predIsNonTerm = false;
00017 if (symbols[0].GetType() == NonTerminal) {
00018 ++scope;
00019 predIsNonTerm = true;
00020 }
00021 for (std::size_t i = 1; i < symbols.size(); ++i) {
00022 bool isNonTerm = symbols[i].GetType() == NonTerminal;
00023 if (isNonTerm && predIsNonTerm) {
00024 ++scope;
00025 }
00026 predIsNonTerm = isNonTerm;
00027 }
00028 if (predIsNonTerm) {
00029 ++scope;
00030 }
00031 return scope;
00032 }
00033
00034 bool Rule::PartitionOrderComp(const Node *a, const Node *b)
00035 {
00036 const Span &aSpan = a->GetSpan();
00037 const Span &bSpan = b->GetSpan();
00038 assert(!aSpan.empty() && !bSpan.empty());
00039 return *(aSpan.begin()) < *(bSpan.begin());
00040 }
00041
00042 }
00043 }
00044 }