X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fcql.y;h=cf856906b2f971095203663bfdf077bfbc16f0e2;hp=ea828dc6c0e31fb627279c684508fd433cd99169;hb=a0b6afa0a1df8722572de79d563d3f0187f2fef7;hpb=e4e5f0bfaa1fcb5eb12cc37df216352df226b01e diff --git a/src/cql.y b/src/cql.y index ea828dc..cf85690 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. */ @@ -44,18 +44,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 +230,7 @@ searchTerm: %% -int yyerror(char *s) +int yyerror(void *locp, char *s) { return 0; } @@ -384,16 +386,14 @@ 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")) relation_like = 1; if (!cql_strcmp(lval->buf, "adj")) relation_like = 1; - if (!cql_strcmp(lval->buf, "within")) - relation_like = 1; - if (!cql_strcmp(lval->buf, "encloses")) - relation_like = 1; if (relation_like) return PREFIX_NAME; } @@ -428,6 +428,7 @@ CQL_parser cql_parser_create(void) cp->last_error = 0; cp->last_pos = 0; cp->nmem = nmem_create(); + cp->strict = 0; return cp; } @@ -443,6 +444,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