summaryrefslogtreecommitdiffstats
path: root/debian/htdig/htdig-3.2.0b6/htsearch/SimpleQueryParser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/htsearch/SimpleQueryParser.cc')
-rw-r--r--debian/htdig/htdig-3.2.0b6/htsearch/SimpleQueryParser.cc96
1 files changed, 96 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/htsearch/SimpleQueryParser.cc b/debian/htdig/htdig-3.2.0b6/htsearch/SimpleQueryParser.cc
new file mode 100644
index 00000000..ebe1901e
--- /dev/null
+++ b/debian/htdig/htdig-3.2.0b6/htsearch/SimpleQueryParser.cc
@@ -0,0 +1,96 @@
+//
+// SimpleQueryParser.cc
+//
+// SimpleQueryParser: (abstract) a family of parsers that generate queries
+// for strings with the syntax (word|phrase){(word|phrase)}
+// combining them in a single operator.
+// The operator to apply is tbd by concrete classes.
+//
+// Part of the ht://Dig package <http://www.htdig.org/>
+// Copyright (c) 1995-2004 The ht://Dig Group
+// For copyright details, see the file COPYING in your distribution
+// or the GNU Library General Public License (LGPL) version 2 or later
+// <http://www.gnu.org/copyleft/lgpl.html>
+//
+// $Id: SimpleQueryParser.cc,v 1.4 2004/05/28 13:15:24 lha Exp $
+//
+
+#include "SimpleQueryParser.h"
+#include "OperatorQuery.h"
+
+//
+// expr == term { term }
+//
+Query *
+SimpleQueryParser::ParseExpression()
+{
+ Query *result = 0;
+ Query *term = ParseTerm();
+ if(term)
+ {
+ if(token.IsEnd())
+ {
+ result = term;
+ }
+ else
+ {
+ result = MakeQuery();
+ result->Add(term);
+ while(!token.IsEnd())
+ {
+ term = ParseTerm();
+ if(term)
+ {
+ result->Add(term);
+ }
+ }
+ }
+ }
+ if(!term)
+ {
+ delete result;
+ result = 0;
+ }
+ return result;
+}
+
+
+//
+// term == word | '"' phrase '"'
+//
+Query *
+SimpleQueryParser::ParseTerm()
+{
+ Query *result = 0;
+
+ if(token.IsQuote())
+ {
+ token.Next();
+ result = ParsePhrase();
+ if(result)
+ {
+ if(token.IsQuote())
+ {
+ token.Next();
+ }
+ else
+ {
+ Expected("closing \"");
+ delete result;
+ result = 0;
+ }
+ }
+ }
+ else if(token.IsWord())
+ {
+ // don't advance token here!
+ result = ParseWord();
+ }
+ else
+ {
+ Expected("a word or a quoted phrase");
+ }
+ return result;
+}
+
+