1 /* $Id: lexer.c,v 1.3 2003-04-14 15:40:03 adam Exp $
2 Copyright (C) 2002-2003
5 This file is part of the YAZ toolkit.
10 static void putb(YYSTYPE *lval, CQL_parser cp, int c)
12 if (lval->len >= lval->size)
14 char *nb = nmem_malloc(cp->nmem, (lval->size = lval->len * 2 + 20));
15 memcpy (nb, lval->buf, lval->len);
19 lval->buf[lval->len++] = c;
20 lval->buf[lval->len] = '\0';
24 * bison lexer for CQL.
27 int yylex(YYSTYPE *lval, void *vp)
29 CQL_parser cp = (CQL_parser) vp;
36 lval->buf = nmem_malloc(cp->nmem, lval->size);
40 c = cp->getbyte(cp->client_data);
46 if (strchr("()=></", c))
52 c1 = cp->getbyte(cp->client_data);
59 cp->ungetbyte(c1, cp->client_data);
63 c1 = cp->getbyte(cp->client_data);
75 cp->ungetbyte(c1, cp->client_data);
81 while ((c = cp->getbyte(cp->client_data)) != EOF && c != '"')
84 c = cp->getbyte(cp->client_data);
92 while ((c = cp->getbyte(cp->client_data)) != 0 &&
93 !strchr(" \n()=<>/", c))
96 c = cp->getbyte(cp->client_data);
100 printf ("got %s\n", lval->buf);
103 cp->ungetbyte(c, cp->client_data);
104 if (!strcmp(lval->buf, "and"))
106 if (!strcmp(lval->buf, "or"))
108 if (!strcmp(lval->buf, "not"))
110 if (!strcmp(lval->buf, "exact"))
112 if (!strcmp(lval->buf, "all"))
114 if (!strncmp(lval->buf, "prox", 4))
116 if (!strcmp(lval->buf, "any"))
118 if (!strcmp(lval->buf, "scr"))