*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/tsearch/wparser_def.c,v 1.5 2007/10/27 16:01:08 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/tsearch/wparser_def.c,v 1.6 2007/10/27 17:53:15 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#include "utils/builtins.h"
+/* Define me to enable tracing of parser behavior */
+/* #define WPARSER_TRACE */
+
+
/* Output token categories */
#define ASCIIWORD 1
#define A_MERGE 0x0020
#define A_CLRALL 0x0040
-typedef struct
-{
- TParserState state;
- TParserStateActionItem *action;
-} TParserStateAction;
-
typedef struct TParserPosition
{
int posbyte; /* position of parser in bytes */
- int poschar; /* osition of parser in characters */
+ int poschar; /* position of parser in characters */
int charlen; /* length of current char */
- int lenbytelexeme;
- int lencharlexeme;
+ int lenbytetoken; /* length of token-so-far in bytes */
+ int lenchartoken; /* and in chars */
TParserState state;
struct TParserPosition *prev;
- int flags;
- TParserStateActionItem *pushedAtAction;
+ const TParserStateActionItem *pushedAtAction;
} TParserPosition;
typedef struct TParser
char c;
/* out */
- char *lexeme;
- int lenbytelexeme;
- int lencharlexeme;
+ char *token;
+ int lenbytetoken;
+ int lenchartoken;
int type;
-
} TParser;
prs->state = newTParserPosition(NULL);
prs->state->state = TPS_Base;
+#ifdef WPARSER_TRACE
+ fprintf(stderr, "parsing \"%.*s\"\n", len, str);
+#endif
+
return prs;
}
static void
SpecialTags(TParser * prs)
{
- switch (prs->state->lencharlexeme)
+ switch (prs->state->lenchartoken)
{
case 8: /*
- if (pg_strncasecmp(prs->
lexeme, "
+ if (pg_strncasecmp(prs->
token, "
prs->ignore = false;
break;
case 7: /*