X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=ccl%2Fccltoken.c;h=6930adfe0834df9d133be1d1c80d3388c6299001;hb=b9bf72fa7af887225b50f567f91c06ce4353d0c8;hp=26b005205722f7ce8308db50c154a7a0a65980b4;hpb=85e0bf0ecf24fb2b4d037a59607cd33005949b7b;p=egate.git diff --git a/ccl/ccltoken.c b/ccl/ccltoken.c index 26b0052..6930adf 100644 --- a/ccl/ccltoken.c +++ b/ccl/ccltoken.c @@ -2,7 +2,17 @@ * Europagate, 1995 * * $Log: ccltoken.c,v $ - * Revision 1.2 1995/02/14 19:55:13 adam + * Revision 1.6 1995/04/17 09:31:48 adam + * Improved handling of qualifiers. Aliases or reserved words. + * + * Revision 1.5 1995/02/23 08:32:00 adam + * Changed header. + * + * Revision 1.3 1995/02/15 17:42:16 adam + * Minor changes of the api of this module. FILE* argument added + * to ccl_pr_tree. + * + * Revision 1.2 1995/02/14 19:55:13 adam * Header files ccl.h/cclp.h are gone! They have been merged an * moved to ../include/ccl.h. * Node kind(s) in ccl_rpn_node have changed names. @@ -19,21 +29,37 @@ #include -static int strin (const char *s, const char *cset) +const char *ccl_token_and = "and"; +const char *ccl_token_or = "or"; +const char *ccl_token_not = "not andnot"; +const char *ccl_token_set = "set"; + +/* + * token_cmp: Compare token with keyword(s) + * kw: Keyword list. Each keyword is separated by space. + * token: CCL token. + * return: 1 if token string matches one of the keywords in list; + * 0 otherwise. + */ +static int token_cmp (const char *kw, struct ccl_token *token) { - while (*cset) + const char *cp1 = kw; + const char *cp2; + while ((cp2 = strchr (cp1, ' '))) { - if (*cset++ == *s) + if (token->len == cp2-cp1 && + !memcmp (cp1, token->name, token->len)) return 1; + cp1 = cp2+1; } - return 0; + return token->len == strlen(cp1) + && !memcmp (cp1, token->name, token->len); } -char *ccl_token_and = "and"; -char *ccl_token_or = "or"; -char *ccl_token_not = "not"; -char *ccl_token_set = "set"; - +/* + * ccl_tokenize: tokenize CCL command string. + * return: CCL token list. + */ struct ccl_token *ccl_tokenize (const char *command) { const char *cp = command; @@ -42,7 +68,7 @@ struct ccl_token *ccl_tokenize (const char *command) while (1) { - while (*cp && strin (cp, " \t\r\n")) + while (*cp && strchr (" \t\r\n", *cp)) { cp++; continue; @@ -116,23 +142,19 @@ struct ccl_token *ccl_tokenize (const char *command) cp++; break; default: - while (*cp && !strin (cp, "(),%!><=- \t\n\r")) + while (*cp && !strchr ("(),%!><=- \t\n\r", *cp)) { cp++; ++ last->len; } - if (strlen (ccl_token_and)==last->len && - !memcmp (ccl_token_and, last->name, last->len)) - last->kind = CCL_TOK_AND; - else if (strlen (ccl_token_or)==last->len && - !memcmp (ccl_token_or, last->name, last->len)) - last->kind = CCL_TOK_OR; - else if (strlen (ccl_token_not)==last->len && - !memcmp (ccl_token_not, last->name, last->len)) - last->kind = CCL_TOK_NOT; - else if (strlen (ccl_token_set)==last->len && - !memcmp (ccl_token_set, last->name, last->len)) - last->kind = CCL_TOK_SET; + if (token_cmp (ccl_token_and, last)) + last->kind = CCL_TOK_AND; + else if (token_cmp (ccl_token_or, last)) + last->kind = CCL_TOK_OR; + else if (token_cmp (ccl_token_not, last)) + last->kind = CCL_TOK_NOT; + else if (token_cmp (ccl_token_set, last)) + last->kind = CCL_TOK_SET; else last->kind = CCL_TOK_TERM; }