1 /* $Id: lexer.c,v 1.2 2003-04-11 15:53:39 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;
33 c = cp->getbyte(cp->client_data);
42 lval->buf = nmem_malloc(cp->nmem, lval->size);
43 if (strchr("()=></", c))
49 c1 = cp->getbyte(cp->client_data);
56 cp->ungetbyte(c1, cp->client_data);
60 c1 = cp->getbyte(cp->client_data);
72 cp->ungetbyte(c1, cp->client_data);
78 while ((c = cp->getbyte(cp->client_data)) != EOF && c != '"')
81 c = cp->getbyte(cp->client_data);
89 while ((c = cp->getbyte(cp->client_data)) != 0 &&
90 !strchr(" \n()=<>/", c))
93 c = cp->getbyte(cp->client_data);
97 printf ("got %s\n", lval->buf);
100 cp->ungetbyte(c, cp->client_data);
101 if (!strcmp(lval->buf, "and"))
103 if (!strcmp(lval->buf, "or"))
105 if (!strcmp(lval->buf, "not"))
107 if (!strcmp(lval->buf, "exact"))
109 if (!strcmp(lval->buf, "all"))
111 if (!strncmp(lval->buf, "prox", 4))
113 if (!strcmp(lval->buf, "any"))
115 if (!strcmp(lval->buf, "scr"))