1 /* $Id: lexer.c,v 1.4 2003-04-14 16:52:10 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+1 >= 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;
35 lval->buf = nmem_malloc(cp->nmem, lval->size);
39 c = cp->getbyte(cp->client_data);
45 if (strchr("()=></", c))
51 c1 = cp->getbyte(cp->client_data);
58 cp->ungetbyte(c1, cp->client_data);
62 c1 = cp->getbyte(cp->client_data);
74 cp->ungetbyte(c1, cp->client_data);
80 while ((c = cp->getbyte(cp->client_data)) != EOF && c != '"')
83 c = cp->getbyte(cp->client_data);
91 while ((c = cp->getbyte(cp->client_data)) != 0 &&
92 !strchr(" \n()=<>/", c))
95 c = cp->getbyte(cp->client_data);
99 printf ("got %s\n", lval->buf);
102 cp->ungetbyte(c, cp->client_data);
103 if (!strcmp(lval->buf, "and"))
105 if (!strcmp(lval->buf, "or"))
107 if (!strcmp(lval->buf, "not"))
109 if (!strcmp(lval->buf, "exact"))
111 if (!strcmp(lval->buf, "all"))
113 if (!strncmp(lval->buf, "prox", 4))
115 if (!strcmp(lval->buf, "any"))
117 if (!strcmp(lval->buf, "scr"))