00001 #include <cassert>
00002 #include <iostream>
00003 #include "SyntaxTree.h"
00004 #include "Parameter.h"
00005
00006 using namespace std;
00007
00008 void SyntaxTree::Add(int startPos, int endPos, const std::string &label, const Parameter ¶ms)
00009 {
00010
00011
00012 Range range(startPos, endPos);
00013 Labels &labels = m_coll[range];
00014
00015 bool add = true;
00016 if (labels.size()) {
00017 if (params.multiLabel == 1) {
00018
00019 assert(labels.size() == 1);
00020 labels.clear();
00021 } else if (params.multiLabel == 2) {
00022
00023 add = false;
00024 }
00025 }
00026
00027 if (add) {
00028 labels.push_back(label);
00029 }
00030 }
00031
00032 void SyntaxTree::AddToAll(const std::string &label)
00033 {
00034 Coll::iterator iter;
00035 for (iter = m_coll.begin(); iter != m_coll.end(); ++iter) {
00036 Labels &labels = iter->second;
00037 labels.push_back(label);
00038 }
00039 }
00040
00041 const SyntaxTree::Labels &SyntaxTree::Find(int startPos, int endPos) const
00042 {
00043 Coll::const_iterator iter;
00044 iter = m_coll.find(Range(startPos, endPos));
00045 return (iter == m_coll.end()) ? m_defaultLabels : iter->second;
00046 }