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