Ignore:
Timestamp:
2000-12-08T11:36:32+13:00 (23 years ago)
Author:
kjm18
Message:

changed parseQuery to take a new parameter - defaultBoolCombine - this
determines if terms are AND'd or OR'd together by default if operators
aren't explicitly stated

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl/src/mgpp/text/GSDLQueryParser.cpp

    r1296 r1770  
    2828static QueryNode *ParseExpression (UCArray::const_iterator &here,
    2929                   UCArray::const_iterator end,
     30                   int defaultBoolCOmbine,
    3031                   int defaultStemMethod);
    3132
     
    6465static QueryNode *ParseBracketExpression (UCArray::const_iterator &here,
    6566                      UCArray::const_iterator end,
     67                      int defaultBoolCombine,
    6668                      int defaultStemMethod) {
    6769  // get everything in the expression
    68   QueryNode *curTree = ParseExpression (here, end, defaultStemMethod);
     70  QueryNode *curTree = ParseExpression (here, end, defaultBoolCombine,
     71                    defaultStemMethod);
    6972 
    7073  // gobble up tokens until a closing bracket is found
     
    282285static QueryNode *ParseTerm (UCArray::const_iterator &here,
    283286                 UCArray::const_iterator end,
     287                 int defaultBoolCombine,
    284288                 int defaultStemMethod) {
    285289  LexEl el;
     
    289293
    290294  if (el.lexType == OpenBracketE)
    291     return ParseBracketExpression (here, end, defaultStemMethod);
     295    return ParseBracketExpression (here, end, defaultBoolCombine,
     296                   defaultStemMethod);
    292297
    293298  ProxMatchQueryNode *proxNode = new ProxMatchQueryNode;
     
    300305    if (ParseLexEl(here, end, el) && el.lexType == NearOpE) {
    301306      delete proxNode;
    302       proxNode = (ProxMatchQueryNode *)ParseTerm(here, end, defaultStemMethod);
     307      proxNode = (ProxMatchQueryNode *)ParseTerm(here, end, defaultBoolCombine,
     308                         defaultStemMethod);
    303309      SetRangeValues(termNode, el.text);
    304310      proxNode->terms.push_back (termNode);
     
    330336static QueryNode *ParseExpression (UCArray::const_iterator &here,
    331337                   UCArray::const_iterator end,
     338                   int defaultBoolCombine,
    332339                   int defaultStemMethod) {
    333340  LexEl el;
     
    344351      // some type of term, back track and parse it
    345352      here = oldHere;
    346       curTree = OrAdd (curTree, ParseTerm (here, end, defaultStemMethod));
    347      
     353      // if default==1, AND, else if==0, OR
     354      if (defaultBoolCombine) {
     355    curTree = AndAdd (curTree, ParseTerm (here, end, defaultBoolCombine,
     356                          defaultStemMethod));
     357      }
     358      else {
     359    curTree = OrAdd (curTree, ParseTerm (here, end, defaultBoolCombine,
     360                         defaultStemMethod));
     361      }
     362
    348363    } else if (el.lexType == AndOpE) {
    349       curTree = AndAdd (curTree, ParseTerm (here, end, defaultStemMethod));
     364      curTree = AndAdd (curTree, ParseTerm (here, end, defaultBoolCombine,
     365                        defaultStemMethod));
    350366     
    351367    } else if (el.lexType == OrOpE) {
    352       curTree = OrAdd (curTree, ParseTerm (here, end, defaultStemMethod));
     368      curTree = OrAdd (curTree, ParseTerm (here, end, defaultBoolCombine,
     369                       defaultStemMethod));
    353370     
    354371    } else if (el.lexType == NotOpE) {
    355       curTree = NotAdd (curTree, ParseTerm (here, end, defaultStemMethod));
     372      curTree = NotAdd (curTree, ParseTerm (here, end, defaultBoolCombine,
     373                        defaultStemMethod));
    356374     
    357375    } else if (el.lexType == CloseBracketE) {
     
    368386}
    369387
    370 QueryNode *ParseQuery (const UCArray &queryStr, int defaultStemMethod) {
     388QueryNode *ParseQuery (const UCArray &queryStr, int defaultBoolCombine,
     389               int defaultStemMethod) {
    371390  UCArray::const_iterator here = queryStr.begin();
    372391  UCArray::const_iterator end = queryStr.end();
    373   return ParseExpression (here, end, defaultStemMethod);
    374 }
     392  return ParseExpression (here, end, defaultBoolCombine, defaultStemMethod);
     393}
Note: See TracChangeset for help on using the changeset viewer.