X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fcql.y;h=ed5735da1a9f9f8dac612764d985fdd1c2dc65b0;hp=d1d5d1baf687da4eba4fc3620b92c1208930c244;hb=8cb8947e3a7bff4dbf8f124871cb4905df1adce7;hpb=cd7c85097df2b7ccd4728e5911348b6e78ccf7f2 diff --git a/src/cql.y b/src/cql.y index d1d5d1b..ed5735d 100644 --- a/src/cql.y +++ b/src/cql.y @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2013 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ /* bison parser for CQL grammar. */ @@ -16,6 +16,10 @@ #endif #include #include +/* avoid that bison stuff defines malloc/free - already in stdlib.h */ +#ifdef _MSC_VER +#define _STDLIB_H 1 +#endif #include #include #include @@ -44,18 +48,20 @@ int last_pos; struct cql_node *top; NMEM nmem; + int strict; }; #define YYSTYPE token -#define YYPARSE_PARAM parm -#define YYLEX_PARAM parm +int yylex(YYSTYPE *lval, void *vp); +int yyerror(void *lval, char *msg); - int yylex(YYSTYPE *lval, void *vp); - int yyerror(char *s); %} -%pure_parser + +%lex-param {void *parm} +%parse-param {void *parm} +%pure-parser %token PREFIX_NAME SIMPLE_STRING AND OR NOT PROX GE LE NE EXACT SORTBY %% @@ -228,7 +234,7 @@ searchTerm: %% -int yyerror(char *s) +int yyerror(void *locp, char *s) { return 0; } @@ -384,6 +390,8 @@ int yylex(YYSTYPE *lval, void *vp) lval->buf = "sortby"; return SORTBY; } + if (cp->strict) + return PREFIX_NAME; if (!cql_strcmp(lval->buf, "all")) relation_like = 1; if (!cql_strcmp(lval->buf, "any")) @@ -424,6 +432,7 @@ CQL_parser cql_parser_create(void) cp->last_error = 0; cp->last_pos = 0; cp->nmem = nmem_create(); + cp->strict = 0; return cp; } @@ -439,6 +448,11 @@ struct cql_node *cql_parser_result(CQL_parser cp) return cp->top; } +void cql_parser_strict(CQL_parser cp, int mode) +{ + cp->strict = mode; +} + /* * Local variables: * c-basic-offset: 4