#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <yaz/xmalloc.h>
#include <yaz/nmem.h>
#include <yaz/cql.h>
Go to the source code of this file.
Data Structures | |
| struct | token |
| struct | cql_parser |
| union | yyalloc |
Defines | |
| #define | YYBISON 1 |
| #define | YYBISON_VERSION "2.3" |
| #define | YYSKELETON_NAME "yacc.c" |
| #define | YYPURE 1 |
| #define | YYLSP_NEEDED 0 |
| #define | yyparse cql_parse |
| #define | yylex cql_lex |
| #define | yyerror cql_error |
| #define | yylval cql_lval |
| #define | yychar cql_char |
| #define | yydebug cql_debug |
| #define | yynerrs cql_nerrs |
| #define | DOTTERM 258 |
| #define | TERM 259 |
| #define | AND 260 |
| #define | OR 261 |
| #define | NOT 262 |
| #define | PROX 263 |
| #define | GE 264 |
| #define | LE 265 |
| #define | NE 266 |
| #define | EXACT 267 |
| #define | YYSTYPE token |
| #define | YYPARSE_PARAM parm |
| #define | YYLEX_PARAM parm |
| #define | YYDEBUG 0 |
| #define | YYERROR_VERBOSE 0 |
| #define | YYTOKEN_TABLE 0 |
| #define | YYSIZE_T unsigned int |
| #define | YYSIZE_MAXIMUM ((YYSIZE_T) -1) |
| #define | YY_(msgid) msgid |
| #define | YYUSE(e) ((void) (e)) |
| #define | YYID(n) (n) |
| #define | YYSTACK_ALLOC YYMALLOC |
| #define | YYSTACK_FREE YYFREE |
| #define | YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM |
| #define | YYMALLOC malloc |
| #define | YYFREE free |
| #define | YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) |
| #define | YYSTACK_BYTES(N) |
| #define | YYCOPY(To, From, Count) |
| #define | YYSTACK_RELOCATE(Stack) |
| #define | YYFINAL 3 |
| #define | YYLAST 73 |
| #define | YYNTOKENS 19 |
| #define | YYNNTS 19 |
| #define | YYNRULES 49 |
| #define | YYNSTATES 62 |
| #define | YYUNDEFTOK 2 |
| #define | YYMAXUTOK 267 |
| #define | YYTRANSLATE(YYX) ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) |
| #define | YYPACT_NINF -20 |
| #define | YYTABLE_NINF -44 |
| #define | yyerrok (yyerrstatus = 0) |
| #define | yyclearin (yychar = YYEMPTY) |
| #define | YYEMPTY (-2) |
| #define | YYEOF 0 |
| #define | YYACCEPT goto yyacceptlab |
| #define | YYABORT goto yyabortlab |
| #define | YYERROR goto yyerrorlab |
| #define | YYFAIL goto yyerrlab |
| #define | YYRECOVERING() (!!yyerrstatus) |
| #define | YYBACKUP(Token, Value) |
| #define | YYTERROR 1 |
| #define | YYERRCODE 256 |
| #define | YYRHSLOC(Rhs, K) ((Rhs)[K]) |
| #define | YYLLOC_DEFAULT(Current, Rhs, N) |
| #define | YY_LOCATION_PRINT(File, Loc) ((void) 0) |
| #define | YYLEX yylex (&yylval, YYLEX_PARAM) |
| #define | YYDPRINTF(Args) |
| #define | YY_SYMBOL_PRINT(Title, Type, Value, Location) |
| #define | YY_STACK_PRINT(Bottom, Top) |
| #define | YY_REDUCE_PRINT(Rule) |
| #define | YYINITDEPTH 200 |
| #define | YYMAXDEPTH 10000 |
| #define | YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) |
Typedefs | |
| typedef unsigned char | yytype_uint8 |
| typedef short int | yytype_int8 |
| typedef unsigned short int | yytype_uint16 |
| typedef short int | yytype_int16 |
Enumerations | |
| enum | yytokentype { DOTTERM = 258, TERM = 259, AND = 260, OR = 261, NOT = 262, PROX = 263, GE = 264, LE = 265, NE = 266, EXACT = 267 } |
Functions | |
| int | yylex (YYSTYPE *lval, void *vp) |
| int | yyerror (char *s) |
| static void | yydestruct (char *yymsg, int yytype, YYSTYPE *yyvaluep) const |
| int | yyparse () |
| int | yyparse (void *YYPARSE_PARAM) |
| static void | putb (YYSTYPE *lval, CQL_parser cp, int c) |
| int | cql_parser_stream (CQL_parser cp, int(*getbyte)(void *client_data), void(*ungetbyte)(int b, void *client_data), void *client_data) |
| parses CQL query (query stream) | |
| CQL_parser | cql_parser_create (void) |
| creates a CQL parser. | |
| void | cql_parser_destroy (CQL_parser cp) |
| destroys a CQL parser. | |
| struct cql_node * | cql_parser_result (CQL_parser cp) |
| returns the parse tree of the most recently parsed CQL query. | |
Variables | |
| static const yytype_uint8 | yytranslate [] |
| static const yytype_uint8 | yyr1 [] |
| static const yytype_uint8 | yyr2 [] |
| static const yytype_uint8 | yydefact [] |
| static const yytype_int8 | yydefgoto [] |
| static const yytype_int8 | yypact [] |
| static const yytype_int8 | yypgoto [] |
| static const yytype_int8 | yytable [] |
| static const yytype_int8 | yycheck [] |
| static const yytype_uint8 | yystos [] |
This is a YACC parser, but since it must be reentrant, Bison is required. The original source file is cql.y.
Definition in file cql.c.
| #define YY_STACK_PRINT | ( | Bottom, | |||
| Top | ) |
| #define YY_SYMBOL_PRINT | ( | Title, | |||
| Type, | |||||
| Value, | |||||
| Location | ) |
| #define YYBACKUP | ( | Token, | |||
| Value | ) |
| #define YYCOPY | ( | To, | |||
| From, | |||||
| Count | ) |
| #define YYLEX yylex (&yylval, YYLEX_PARAM) |
| #define YYLLOC_DEFAULT | ( | Current, | |||
| Rhs, | |||||
| N | ) |
Value:
do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0))
| #define YYPOPSTACK | ( | N | ) | (yyvsp -= (N), yyssp -= (N)) |
Referenced by yyparse().
| #define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM |
| #define YYSTACK_BYTES | ( | N | ) |
Value:
((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM)
Definition at line 358 of file cql.c.
Referenced by yyparse().
| #define YYSTACK_RELOCATE | ( | Stack | ) |
| #define YYTRANSLATE | ( | YYX | ) | ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) |
| #define YYUSE | ( | e | ) | ((void) (e)) |
| typedef short int yytype_int16 |
| typedef short int yytype_int8 |
| typedef unsigned short int yytype_uint16 |
| typedef unsigned char yytype_uint8 |
| enum yytokentype |
| CQL_parser cql_parser_create | ( | void | ) |
creates a CQL parser.
Definition at line 1988 of file cql.c.
References cql_parser::client_data, cql_parser::getbyte, cql_parser::last_error, cql_parser::last_pos, cql_parser::nmem, nmem_create(), cql_parser::top, cql_parser::ungetbyte, and xmalloc.
Referenced by cql2pqf().
| void cql_parser_destroy | ( | CQL_parser | cp | ) |
destroys a CQL parser.
| cp | CQL parser |
Definition at line 2002 of file cql.c.
References cql_node_destroy(), cql_parser::nmem, nmem_destroy(), cql_parser::top, and xfree.
Referenced by cql2pqf().
| struct cql_node* cql_parser_result | ( | CQL_parser | cp | ) | [read] |
returns the parse tree of the most recently parsed CQL query.
| cp | CQL parser |
Definition at line 2009 of file cql.c.
References cql_parser::top.
Referenced by cql2pqf().
| int cql_parser_stream | ( | CQL_parser | cp, | |
| int(*)(void *client_data) | getbyte, | |||
| void(*)(int b, void *client_data) | ungetbyte, | |||
| void * | client_data | |||
| ) |
parses CQL query (query stream)
| cp | CQL parser | |
| getbyte | function which reads one character from stream | |
| ungetbyte | function which unreads one character from stream | |
| client_data | data to be passed to stream functions |
| 0 | success | |
| !=0 | failure |
The functions pointers getbytes, ungetbyte are similar to that known from stdios getc, ungetc.
Definition at line 1971 of file cql.c.
References cql_parser::client_data, cql_node_destroy(), cql_parser::getbyte, cql_parser::nmem, nmem_reset(), cql_parser::top, and cql_parser::ungetbyte.
Referenced by cql_parser_stdio(), and cql_parser_string().
| static void putb | ( | YYSTYPE * | lval, | |
| CQL_parser | cp, | |||
| int | c | |||
| ) | [static] |
putb is a utility that puts one character to the string in current lexical token. This routine deallocates as necessary using NMEM.
Definition at line 1820 of file cql.c.
References cql_parser::nmem, and nmem_malloc().
Referenced by yylex().
| static void yydestruct | ( | char * | yymsg, | |
| int | yytype, | |||
| YYSTYPE * | yyvaluep | |||
| ) | const [static] |
Definition at line 1109 of file cql.c.
References YY_SYMBOL_PRINT, and YYUSE.
Referenced by yyparse().
| int yylex | ( | YYSTYPE * | lval, | |
| void * | vp | |||
| ) |
yylex returns next token for Bison to be read. In this case one of the CQL terminals are returned.
Definition at line 1839 of file cql.c.
References AND, cql_parser::client_data, cql_strcmp(), DOTTERM, EXACT, GE, cql_parser::getbyte, LE, NE, cql_parser::nmem, nmem_malloc(), NOT, OR, PROX, putb(), TERM, and cql_parser::ungetbyte.
| int yyparse | ( | void * | YYPARSE_PARAM | ) |
Definition at line 1162 of file cql.c.
References cql_node::boolean, cql_apply_prefix(), cql_node_destroy(), cql_node_dup(), cql_node_mk_boolean(), cql_node_mk_sc(), nmem_strdup(), cql_node::st, cql_node::u, YY_, YY_REDUCE_PRINT, YY_STACK_PRINT, YY_SYMBOL_PRINT, YYABORT, YYACCEPT, yydestruct(), YYDPRINTF, YYEMPTY, YYEOF, yyerror, YYFINAL, YYID, YYINITDEPTH, YYLAST, YYLEX, yylval, YYMAXDEPTH, yynerrs, YYNTOKENS, YYPACT_NINF, YYPOPSTACK, YYSIZE_T, YYSTACK_ALLOC, YYSTACK_ALLOC_MAXIMUM, YYSTACK_BYTES, YYSTACK_FREE, YYSTACK_RELOCATE, YYSTYPE, YYTABLE_NINF, YYTERROR, and YYTRANSLATE.
| int yyparse | ( | ) |
const yytype_int8 yycheck[] [static] |
Initial value:
{
10, 19, 3, 5, 6, 7, 8, 0, 9, 10,
11, 12, 13, 14, 3, 0, 1, 18, 14, 37,
9, 10, 11, 12, 13, 14, 36, 46, 47, 18,
48, 4, 16, -1, 17, 45, 3, 4, 5, 6,
7, 8, 34, -1, -1, -1, 13, -1, 15, -1,
60, 3, 4, 5, 6, 7, 8, 3, 4, 5,
6, 7, 8, 15, 9, 10, 11, 12, 13, 14,
-1, -1, -1, 18
}
const yytype_uint8 yydefact[] [static] |
const yytype_int8 yydefgoto[] [static] |
const yytype_int8 yypact[] [static] |
Initial value:
{
-20, 7, 33, -20, -20, -20, -20, -20, -20, -20,
54, -20, -20, 15, -2, -20, -1, 11, 4, 33,
-20, -20, -20, -20, -20, -20, -20, -20, -20, -20,
-20, -20, -20, -20, -20, 27, 54, 33, 16, 17,
17, -20, -20, -20, -20, 54, 48, 48, 33, 55,
-20, -20, -20, -20, -20, -20, -20, -20, -20, -20,
54, -20
}
const yytype_int8 yypgoto[] [static] |
const yytype_uint8 yyr1[] [static] |
const yytype_uint8 yyr2[] [static] |
const yytype_uint8 yystos[] [static] |
const yytype_int8 yytable[] [static] |
Initial value:
{
18, 38, 26, 21, 22, 23, 24, 3, 27, 28,
29, 30, 31, 32, -43, -4, 20, 33, 36, 43,
-43, -43, -43, -43, -43, -43, 42, 50, 51, -43,
52, 41, 44, 0, 45, 49, 4, 5, 6, 7,
8, 9, 40, 0, 0, 0, 10, 0, 11, 0,
61, 4, 5, 6, 7, 8, 9, 4, 5, 6,
7, 8, 9, 11, 53, 54, 55, 56, 57, 58,
0, 0, 0, 59
}
const yytype_uint8 yytranslate[] [static] |
Initial value:
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
15, 16, 2, 2, 2, 2, 2, 17, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18, 14, 13, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12
}
1.5.6