+ rel = 0;
+ if (look_token->len == 1)
+ {
+ if (look_token->name[0] == '<')
+ rel = 1;
+ else if (look_token->name[0] == '=')
+ rel = 3;
+ else if (look_token->name[0] == '>')
+ rel = 5;
+ }
+ else if (look_token->len == 2)
+ {
+ if (!memcmp (look_token->name, "<=", 2))
+ rel = 2;
+ else if (!memcmp (look_token->name, ">=", 2))
+ rel = 4;
+ else if (!memcmp (look_token->name, "<>", 2))
+ rel = 6;
+ }
+ if (!rel)
+ ccl_error = CCL_ERR_BAD_RELATION;
+ else
+ {
+ struct ccl_rpn_node *p;
+
+ ADVANCE; /* skip relation */
+ if (KIND == CCL_TOK_TERM)
+ {
+ struct ccl_rpn_node *p1;
+ p1 = search_term (ap);
+ if (KIND == CCL_TOK_MINUS)
+ {
+ ADVANCE; /* skip '-' */
+ if (KIND == CCL_TOK_TERM) /* = term - term ? */
+ {
+ struct ccl_rpn_node *p2;
+
+ p2 = search_term (ap);
+ p = mk_node (CCL_RPN_AND);
+ p->u.p[0] = p1;
+ add_attr (p1, CCL_BIB1_REL, 4);
+ p->u.p[1] = p2;
+ add_attr (p2, CCL_BIB1_REL, 2);
+ free (ap);
+ return p;
+ }
+ else /* = term - */
+ {
+ add_attr (p1, CCL_BIB1_REL, 4);
+ free (ap);
+ return p1;
+ }
+ }
+ else
+ {
+ add_attr (p1, CCL_BIB1_REL, rel);
+ free (ap);
+ return p1;
+ }
+ }
+ else if (KIND == CCL_TOK_MINUS) /* = - term ? */
+ {
+ ADVANCE;
+ p = search_term (ap);
+ add_attr (p, CCL_BIB1_REL, 2);
+ free (ap);
+ return p;
+ }
+ ccl_error = CCL_ERR_TERM_EXPECTED;
+ }