%}
%pure_parser
-%token DOTTERM TERM AND OR NOT PROX GE LE NE EXACT SORTBY
+%token PREFIX_NAME SIMPLE_STRING AND OR NOT PROX GE LE NE EXACT SORTBY
%%
;
extraTerms:
-extraTerms TERM {
+SIMPLE_STRING extraTerms {
struct cql_node *st = cql_node_mk_sc(((CQL_parser) parm)->nmem,
- /* index */ 0, /* rel */ 0, $2.buf);
- st->u.st.extra_terms = $1.cql;
+ /* index */ 0, /* rel */ 0, $1.buf);
+ st->u.st.extra_terms = $2.cql;
$$.cql = st;
}
|
;
-/* unary NOT search TERM here .. */
+/* unary NOT search SIMPLE_STRING here .. */
boolean:
AND | OR | NOT | PROX ;
$$.cql = mod;
}
|
-modifiers '/' searchTerm mrelation searchTerm
+modifiers '/' searchTerm relation_symbol searchTerm
{
struct cql_node *mod = cql_node_mk_sc(((CQL_parser)parm)->nmem,
$3.buf, $4.buf, $5.buf);
}
;
-mrelation:
- '='
-| '>'
-| '<'
-| GE
-| LE
-| NE
-| EXACT
-;
+relation: PREFIX_NAME | relation_symbol;
-relation:
+relation_symbol:
'='
| '>'
| '<'
| LE
| NE
| EXACT
-| DOTTERM
;
index:
searchTerm;
searchTerm:
- TERM
-| DOTTERM
+ SIMPLE_STRING
+| PREFIX_NAME
| AND
| OR
| NOT
{
char *nb = (char *)
nmem_malloc(cp->nmem, (lval->size = lval->len * 2 + 20));
- memcpy (nb, lval->buf, lval->len);
+ memcpy(nb, lval->buf, lval->len);
lval->buf = nb;
}
if (c)
putb(lval, cp, c);
}
putb(lval, cp, 0);
- return TERM;
+ return SIMPLE_STRING;
}
else
{
relation_like = 1;
if (!cql_strcmp(lval->buf, "any"))
relation_like = 1;
+ if (!cql_strcmp(lval->buf, "adj"))
+ relation_like = 1;
if (relation_like)
- return DOTTERM;
+ return PREFIX_NAME;
}
- return TERM;
+ return SIMPLE_STRING;
}
CQL_parser cql_parser_create(void)
{
- CQL_parser cp = (CQL_parser) xmalloc (sizeof(*cp));
+ CQL_parser cp = (CQL_parser) xmalloc(sizeof(*cp));
cp->top = 0;
cp->getbyte = 0;