
From grdetil@scrc.umanitoba.ca Tue Feb 16 14:27:26 1999
Date: Tue, 16 Feb 1999 15:32:45 -0600 (CST)
From: Gilles Detillieux <grdetil@scrc.umanitoba.ca>
To: htdig3-dev@htdig.org
Cc: grdetil@scrc.umanitoba.ca, htdig3-dev@htdig.org
Subject: Re: [htdig3-dev] Re: [htdig] SYNTAXERROR - bug?


Oops.  I just reread Marjolein's message, and made the error message a
bit clearer.  I also made the messages start consistently with a capital,
as proper sentences should.

Please try this patch, instead of all the previous ones, to be applied
to the 3.1.1 pre-release:

--- ./htsearch/parser.h.errors	Mon Feb 15 20:37:20 1999
+++ ./htsearch/parser.h	Tue Feb 16 15:14:00 1999
@@ -39,6 +39,7 @@
     int			hadError()			{return valid == 0;}
 	
 protected:
+    void		fullexpr(int);
     int			lexan();
     void		expr(int);
     void		term(int);
--- ./htsearch/parser.cc.errors	Mon Feb 15 20:37:20 1999
+++ ./htsearch/parser.cc	Tue Feb 16 15:27:25 1999
@@ -60,11 +60,31 @@
     tokens->Start_Get();
     lookahead = lexan();
     valid = 1;
-    expr(0);
+    fullexpr(0);
     return valid;
 }
 
 //*****************************************************************************
+void
+Parser::fullexpr(int output)
+{
+    expr(output);
+    if (lookahead != DONE)
+    {
+	valid = 0;
+	error = 0;
+	error << "Expected end of expression instead of '";
+	error << current->word.get() << '\'';
+	switch (lookahead)
+	{
+	case '&':	error << " or 'AND'";	break;
+	case '|':	error << " or 'OR'";	break;
+	case '!':	error << " or 'NOT'";	break;
+	}
+    }
+}
+
+//*****************************************************************************
 int
 Parser::lexan()
 {
@@ -114,7 +134,7 @@
     {
 	valid = 0;
 	error = 0;
-	error << "expected 'AND' or 'OR' instead of '" << current->word.get();
+	error << "Expected 'AND' or 'OR' instead of '" << current->word.get();
 	error << '\'';
     }
 }
@@ -155,6 +175,8 @@
 	else
 	{
 	    valid = 0;
+	    error = 0;
+	    error << "Expected ')'";
 	}
     }
     else if (lookahead == WORD)
@@ -168,6 +190,27 @@
     else
     {
 	valid = 0;
+	error = 0;
+	error << "Expected a search word";
+    }
+
+    if (!valid)
+    {
+	if (lookahead == DONE || !current)
+	{
+	    error << " at the end";
+	}
+	else
+	{
+	    error << " instead of '" << current->word.get();
+	    error << '\'';
+	    switch (lookahead)
+	    {
+	    case '&':	error << " or 'AND'";	break;
+	    case '|':	error << " or 'OR'";	break;
+	    case '!':	error << " or 'NOT'";	break;
+	    }
+	}
     }
 }
 
@@ -391,7 +434,7 @@
     tokens = tokenList;
     tokens->Start_Get();
     lookahead = lexan();
-    expr(1);
+    fullexpr(1);
 
     ResultList	*result = (ResultList *) stack.pop();
     if (!result)  // Ouch!

-- 
Gilles R. Detillieux              E-mail: <grdetil@scrc.umanitoba.ca>
Spinal Cord Research Centre       WWW:    http://www.scrc.umanitoba.ca/~grdetil
Dept. Physiology, U. of Manitoba  Phone:  (204)789-3766
Winnipeg, MB  R3E 3J7  (Canada)   Fax:    (204)789-3930
------------------------------------
To unsubscribe from the htdig3-dev mailing list, send a message to
htdig3-dev@htdig.org containing the single word "unsubscribe" in
the SUBJECT of the message.

