X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=cql%2Fcql.y;h=026dd3668bfa6fb1a2b6b60c5651d39367d49460;hb=2e0cefa8b248dafdbc6518d12d0ba646d2f19565;hp=582be816940c8a94c6487424f5c817537ca32dc5;hpb=ac286ae76051058c8e340bf84eb98391340b7d22;p=yaz-moved-to-github.git diff --git a/cql/cql.y b/cql/cql.y index 582be81..026dd36 100644 --- a/cql/cql.y +++ b/cql/cql.y @@ -1,4 +1,4 @@ -/* $Id: cql.y,v 1.3 2003-02-14 18:49:23 adam Exp $ +/* $Id: cql.y,v 1.6 2003-09-04 18:13:39 adam Exp $ Copyright (C) 2002-2003 Index Data Aps @@ -13,14 +13,15 @@ See the file LICENSE. #include #include #include +#include #include typedef struct { struct cql_node *rel; struct cql_node *cql; - char buf[80]; + char *buf; size_t len; - size_t max; + size_t size; } token; struct cql_parser { @@ -30,6 +31,7 @@ See the file LICENSE. int last_error; int last_pos; struct cql_node *top; + NMEM nmem; }; #define YYSTYPE token @@ -42,7 +44,7 @@ See the file LICENSE. %} %pure_parser -%token TERM AND OR NOT PROX EXACT ALL ANY GE LE NE SCR +%token TERM AND OR NOT PROX GE LE NE %expect 8 %% @@ -112,6 +114,8 @@ searchClause: } ; +/* unary NOT search TERM here .. */ + boolean: AND | OR | NOT | PROX proxqualifiers { $$ = $1; @@ -204,10 +208,7 @@ baseRelation: | GE | LE | NE -| EXACT -| ALL -| ANY -| SCR +| TERM ; index: @@ -218,9 +219,6 @@ searchTerm: | AND | OR | NOT -| EXACT -| ALL -| ANY | PROX ; @@ -242,6 +240,8 @@ int cql_parser_stream(CQL_parser cp, cp->getbyte = getbyte; cp->ungetbyte = ungetbyte; cp->client_data = client_data; + if (cp->top) + cql_node_destroy(cp->top); cql_parse(cp); if (cp->top) return 0; @@ -252,12 +252,20 @@ CQL_parser cql_parser_create(void) { CQL_parser cp = (CQL_parser) malloc (sizeof(*cp)); + cp->top = 0; + cp->getbyte = 0; + cp->ungetbyte = 0; + cp->client_data = 0; + cp->last_error = 0; + cp->last_pos = 0; + cp->nmem = nmem_create(); return cp; } void cql_parser_destroy(CQL_parser cp) { cql_node_destroy(cp->top); + nmem_destroy(cp->nmem); free (cp); }