X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=zutil%2Fyaz-ccl.c;h=661321184d02ff4359bf812146d854d07a98dd7a;hb=e973eb3ceaeaf25735f8250aed8400c87ddcb9da;hp=c5ba47acc5f1dfe444efc83391455a06375442de;hpb=d9ee01635f03f9095a66f71b73580560d48798e8;p=yaz-moved-to-github.git diff --git a/zutil/yaz-ccl.c b/zutil/yaz-ccl.c index c5ba47a..6613211 100644 --- a/zutil/yaz-ccl.c +++ b/zutil/yaz-ccl.c @@ -1,10 +1,21 @@ /* - * Copyright (c) 1996-1998, Index Data. + * Copyright (c) 1996-2000, Index Data. * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * * $Log: yaz-ccl.c,v $ - * Revision 1.3 1999-11-30 13:47:12 adam + * Revision 1.6 2000-02-02 15:13:23 adam + * Minor change. + * + * Revision 1.5 2000/01/31 13:15:22 adam + * Removed uses of assert(3). Cleanup of ODR. CCL parser update so + * that some characters are not surrounded by spaces in resulting term. + * ILL-code updates. + * + * Revision 1.4 1999/12/20 15:20:13 adam + * Implemented ccl_pquery to convert from CCL tree to prefix query. + * + * Revision 1.3 1999/11/30 13:47:12 adam * Improved installation. Moved header files to include/yaz. * * Revision 1.2 1999/06/16 12:00:08 adam @@ -37,7 +48,6 @@ #include #include #include -#include #include @@ -53,13 +63,10 @@ static Z_AttributesPlusTerm *ccl_rpn_term (ODR o, struct ccl_rpn_node *p) Z_AttributeElement **elements; zapt = (Z_AttributesPlusTerm *)odr_malloc (o, sizeof(*zapt)); - assert (zapt); term_octet = (Odr_oct *)odr_malloc (o, sizeof(*term_octet)); - assert (term_octet); term = (Z_Term *)odr_malloc (o, sizeof(*term)); - assert(term); for (attr = p->u.t.attr_list; attr; attr = attr->next) num++; @@ -74,7 +81,6 @@ static Z_AttributesPlusTerm *ccl_rpn_term (ODR o, struct ccl_rpn_node *p) { elements[i] = (Z_AttributeElement *) odr_malloc (o, sizeof(**elements)); - assert (elements[i]); elements[i]->attributeType = (int *)odr_malloc(o, sizeof(int)); *elements[i]->attributeType = attr->type; @@ -108,7 +114,6 @@ static Z_Operand *ccl_rpn_simple (ODR o, struct ccl_rpn_node *p) Z_Operand *zo; zo = (Z_Operand *)odr_malloc (o, sizeof(*zo)); - assert (zo); switch (p->kind) { @@ -121,7 +126,7 @@ static Z_Operand *ccl_rpn_simple (ODR o, struct ccl_rpn_node *p) zo->u.resultSetId = p->u.setname; break; default: - assert (0); + return 0; } return zo; } @@ -132,9 +137,7 @@ static Z_Complex *ccl_rpn_complex (ODR o, struct ccl_rpn_node *p) Z_Operator *zo; zc = (Z_Complex *)odr_malloc (o, sizeof(*zc)); - assert (zc); zo = (Z_Operator *)odr_malloc (o, sizeof(*zo)); - assert (zo); zc->roperator = zo; switch (p->kind) @@ -182,7 +185,7 @@ static Z_Complex *ccl_rpn_complex (ODR o, struct ccl_rpn_node *p) #endif break; default: - assert (0); + return 0; } zc->s1 = ccl_rpn_structure (o, p->u.p[0]); zc->s2 = ccl_rpn_structure (o, p->u.p[1]); @@ -194,7 +197,6 @@ static Z_RPNStructure *ccl_rpn_structure (ODR o, struct ccl_rpn_node *p) Z_RPNStructure *zs; zs = (Z_RPNStructure *)odr_malloc (o, sizeof(*zs)); - assert (zs); switch (p->kind) { case CCL_RPN_AND: @@ -210,7 +212,7 @@ static Z_RPNStructure *ccl_rpn_structure (ODR o, struct ccl_rpn_node *p) zs->u.simple = ccl_rpn_simple (o, p); break; default: - assert (0); + return 0; } return zs; } @@ -220,7 +222,6 @@ Z_RPNQuery *ccl_rpn_query (ODR o, struct ccl_rpn_node *p) Z_RPNQuery *zq; zq = (Z_RPNQuery *)odr_malloc (o, sizeof(*zq)); - assert (zq); zq->attributeSetId = NULL; zq->RPNStructure = ccl_rpn_structure (o, p); return zq; @@ -232,3 +233,57 @@ Z_AttributesPlusTerm *ccl_scan_query (ODR o, struct ccl_rpn_node *p) return NULL; return ccl_rpn_term (o, p); } + +static void ccl_pquery_complex (WRBUF w, struct ccl_rpn_node *p) +{ + switch (p->kind) + { + case CCL_RPN_AND: + wrbuf_puts (w, "@and "); + break; + case CCL_RPN_OR: + wrbuf_puts(w, "@or "); + break; + case CCL_RPN_NOT: + wrbuf_puts(w, "@not "); + break; + case CCL_RPN_PROX: + wrbuf_puts(w, "@prox 0 2 0 1 known 2 "); + break; + default: + wrbuf_puts(w, "@ bad op (unknown) "); + }; + ccl_pquery(w, p->u.p[0]); + ccl_pquery(w, p->u.p[1]); +} + +void ccl_pquery (WRBUF w, struct ccl_rpn_node *p) +{ + struct ccl_rpn_attr *att; + + switch (p->kind) + { + case CCL_RPN_AND: + case CCL_RPN_OR: + case CCL_RPN_NOT: + case CCL_RPN_PROX: + ccl_pquery_complex (w, p); + break; + case CCL_RPN_SET: + wrbuf_puts (w, "@set "); + wrbuf_puts (w, p->u.setname); + wrbuf_puts (w, " "); + break; + case CCL_RPN_TERM: + for (att = p->u.t.attr_list; att; att = att->next) + { + char tmpattr[128]; + sprintf(tmpattr, "@attr %d=%d ", att->type, att->value); + wrbuf_puts (w, tmpattr); + } + wrbuf_puts (w, "{"); + wrbuf_puts (w, p->u.t.term); + wrbuf_puts (w, "} "); + break; + } +}