xref: /aosp_15_r20/external/libtracefs/src/sqlhist.l (revision 287e80b3a36113050663245e7f2c00d274188f18)
1*287e80b3SSadaf Ebrahimi %{
2*287e80b3SSadaf Ebrahimi /* code here */
3*287e80b3SSadaf Ebrahimi 
4*287e80b3SSadaf Ebrahimi #include <stdarg.h>
5*287e80b3SSadaf Ebrahimi #include "sqlhist-parse.h"
6*287e80b3SSadaf Ebrahimi 
7*287e80b3SSadaf Ebrahimi extern int my_yyinput(void *extra, char *buf, int max);
8*287e80b3SSadaf Ebrahimi 
9*287e80b3SSadaf Ebrahimi #undef YY_INPUT
10*287e80b3SSadaf Ebrahimi #define YY_INPUT(b, r, m) ({r = my_yyinput(yyextra, b, m);})
11*287e80b3SSadaf Ebrahimi 
12*287e80b3SSadaf Ebrahimi #define YY_NO_INPUT
13*287e80b3SSadaf Ebrahimi #define YY_NO_UNPUT
14*287e80b3SSadaf Ebrahimi 
15*287e80b3SSadaf Ebrahimi #define YY_EXTRA_TYPE struct sqlhist_bison *
16*287e80b3SSadaf Ebrahimi 
17*287e80b3SSadaf Ebrahimi #define yytext yyg->yytext_r
18*287e80b3SSadaf Ebrahimi 
19*287e80b3SSadaf Ebrahimi #define TRACE_SB	((struct sqlhist_bison *)yyextra)
20*287e80b3SSadaf Ebrahimi #define HANDLE_COLUMN do { TRACE_SB->line_idx += strlen(yytext); } while (0)
21*287e80b3SSadaf Ebrahimi 
22*287e80b3SSadaf Ebrahimi %}
23*287e80b3SSadaf Ebrahimi 
24*287e80b3SSadaf Ebrahimi %option caseless
25*287e80b3SSadaf Ebrahimi %option reentrant
26*287e80b3SSadaf Ebrahimi %option bison-bridge
27*287e80b3SSadaf Ebrahimi 
28*287e80b3SSadaf Ebrahimi field		\\?[a-z_][a-z0-9_\.]*
29*287e80b3SSadaf Ebrahimi qstring		\"[^\"]*\"
30*287e80b3SSadaf Ebrahimi 
31*287e80b3SSadaf Ebrahimi hexnum		0x[0-9a-f]+
32*287e80b3SSadaf Ebrahimi number		[0-9a-f]+
33*287e80b3SSadaf Ebrahimi %%
34*287e80b3SSadaf Ebrahimi 
35*287e80b3SSadaf Ebrahimi select { HANDLE_COLUMN; return SELECT; }
36*287e80b3SSadaf Ebrahimi as { HANDLE_COLUMN; return AS; }
37*287e80b3SSadaf Ebrahimi from { HANDLE_COLUMN; return FROM; }
38*287e80b3SSadaf Ebrahimi join { HANDLE_COLUMN; return JOIN; }
39*287e80b3SSadaf Ebrahimi on { HANDLE_COLUMN; return ON; }
40*287e80b3SSadaf Ebrahimi where { HANDLE_COLUMN; return WHERE; }
41*287e80b3SSadaf Ebrahimi cast { HANDLE_COLUMN; return CAST; }
42*287e80b3SSadaf Ebrahimi 
43*287e80b3SSadaf Ebrahimi sym-offset {
44*287e80b3SSadaf Ebrahimi 	HANDLE_COLUMN;
45*287e80b3SSadaf Ebrahimi 	yylval->string = store_str(TRACE_SB, yyg->yytext_r);
46*287e80b3SSadaf Ebrahimi 	return FIELD;
47*287e80b3SSadaf Ebrahimi }
48*287e80b3SSadaf Ebrahimi 
49*287e80b3SSadaf Ebrahimi {qstring} {
50*287e80b3SSadaf Ebrahimi 	HANDLE_COLUMN;
51*287e80b3SSadaf Ebrahimi 	yylval->string = store_str(TRACE_SB, yyg->yytext_r);
52*287e80b3SSadaf Ebrahimi 	return STRING;
53*287e80b3SSadaf Ebrahimi }
54*287e80b3SSadaf Ebrahimi 
55*287e80b3SSadaf Ebrahimi {field} {
56*287e80b3SSadaf Ebrahimi 	const char *str = yyg->yytext_r;
57*287e80b3SSadaf Ebrahimi 	HANDLE_COLUMN;
58*287e80b3SSadaf Ebrahimi 	if (str[0] == '\\') { str++; };
59*287e80b3SSadaf Ebrahimi 	yylval->string = store_str(TRACE_SB, str);
60*287e80b3SSadaf Ebrahimi 	return FIELD;
61*287e80b3SSadaf Ebrahimi }
62*287e80b3SSadaf Ebrahimi 
63*287e80b3SSadaf Ebrahimi {hexnum} {
64*287e80b3SSadaf Ebrahimi 	HANDLE_COLUMN;
65*287e80b3SSadaf Ebrahimi 	yylval->number = strtol(yyg->yytext_r, NULL, 0);
66*287e80b3SSadaf Ebrahimi 	return NUMBER;
67*287e80b3SSadaf Ebrahimi }
68*287e80b3SSadaf Ebrahimi 
69*287e80b3SSadaf Ebrahimi {number} {
70*287e80b3SSadaf Ebrahimi 	HANDLE_COLUMN;
71*287e80b3SSadaf Ebrahimi 	yylval->number = strtol(yyg->yytext_r, NULL, 0);
72*287e80b3SSadaf Ebrahimi 	return NUMBER;
73*287e80b3SSadaf Ebrahimi }
74*287e80b3SSadaf Ebrahimi 
75*287e80b3SSadaf Ebrahimi \!= { HANDLE_COLUMN; return NEQ; }
76*287e80b3SSadaf Ebrahimi \<= { HANDLE_COLUMN; return LE; }
77*287e80b3SSadaf Ebrahimi \>= { HANDLE_COLUMN; return GE; }
78*287e80b3SSadaf Ebrahimi == { HANDLE_COLUMN; return EQ; }
79*287e80b3SSadaf Ebrahimi && { HANDLE_COLUMN; return AND; }
80*287e80b3SSadaf Ebrahimi "||" { HANDLE_COLUMN; return OR; }
81*287e80b3SSadaf Ebrahimi [<>&~] { HANDLE_COLUMN; return yytext[0]; }
82*287e80b3SSadaf Ebrahimi 
83*287e80b3SSadaf Ebrahimi [\!()\-\+\*/,=] { HANDLE_COLUMN; return yytext[0]; }
84*287e80b3SSadaf Ebrahimi 
85*287e80b3SSadaf Ebrahimi [ \t] { HANDLE_COLUMN; }
86*287e80b3SSadaf Ebrahimi \n { TRACE_SB->line_idx = 0; TRACE_SB->line_no++; }
87*287e80b3SSadaf Ebrahimi 
88*287e80b3SSadaf Ebrahimi . { HANDLE_COLUMN; return PARSE_ERROR; }
89*287e80b3SSadaf Ebrahimi %%
90*287e80b3SSadaf Ebrahimi 
91*287e80b3SSadaf Ebrahimi int yywrap(void *data)
92*287e80b3SSadaf Ebrahimi {
93*287e80b3SSadaf Ebrahimi 	return 1;
94*287e80b3SSadaf Ebrahimi }
95*287e80b3SSadaf Ebrahimi 
96*287e80b3SSadaf Ebrahimi void yyerror(struct sqlhist_bison *sb, char *fmt, ...)
97*287e80b3SSadaf Ebrahimi {
98*287e80b3SSadaf Ebrahimi 	struct yyguts_t * yyg = (struct yyguts_t*)sb->scanner;
99*287e80b3SSadaf Ebrahimi 	va_list ap;
100*287e80b3SSadaf Ebrahimi 
101*287e80b3SSadaf Ebrahimi 	va_start(ap, fmt);
102*287e80b3SSadaf Ebrahimi 	sql_parse_error(sb, yytext, fmt, ap);
103*287e80b3SSadaf Ebrahimi 	va_end(ap);
104*287e80b3SSadaf Ebrahimi }
105