1 /***************************************************************************
2 * Copyright (C) 2007 by Prabakaran Thirumalai *
3 * praba_tuty@yahoo.com *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 ***************************************************************************/
24 extern char *lexInput;
27 #define ECHO { if(echo_on) printf("%s",yytext); }
30 /* Macro definitions */
37 letter_or_digit [a-zA-Z_0-9.]
39 string_char [\]\[\\\+\"=\)\(\{\}\*&\^\%\$#@!:;,\|\~\`\.\<\>\?\/a-zA-Z_0-9 \t\n\-]
43 non_double_quota [^\"\n]
45 operator "<"|">"|">="|"<="|"="|"\!="|"<>"|"LIKE"|"like"
50 yylval.stringval = strdup((const char*)yytext);
54 \'({quota}|{string_char})*\'{blank}*$ {
57 printf("ERROR: wanted a string, got: %s\n",yytext);
59 while (yytext[len] == ' ' || yytext[len] == '\t')
64 yylval.stringval = strdup((const char*)yytext + 1);
65 //printf("rule1: %s.\n", yylval.stringval );
69 \'({quota}|{string_char})*\' { ECHO;
71 printf("ERROR: wanted a string, got: %s\n",yytext);
72 yytext[yyleng-1]='\0';
73 yylval.stringval = strdup((const char*)yytext + 1);
74 //printf("rule2: %s.\n", yylval.stringval );
78 \"{non_double_quota}*\" { ECHO;
79 yytext[yyleng-1] = '\0'; /*remove the beginning and ending quota*/
81 yylval.stringval = strdup((const char*)yytext + 1);
85 {letter}{letter_or_digit}* {
91 if(strcasecmp(yytext,"SELECT") == 0) token = SELECT;
92 if(strcasecmp(yytext,"FROM") == 0) token = FROM;
93 if(strcasecmp(yytext,"WHERE") == 0) token = WHERE;
94 if(strcasecmp(yytext,"BETWEEN") == 0) token = BETWEEN;
95 if(strcasecmp(yytext,"IN") == 0) token = IN;
96 if(strcasecmp(yytext,"AND") == 0) token = AND;
97 if(strcasecmp(yytext,"OR") == 0) token = OR;
98 if(strcasecmp(yytext,"NOT") == 0) token = NOT;
99 if(strcasecmp(yytext,"INSERT") == 0) token = INSERT;
100 if(strcasecmp(yytext,"INTO") == 0) token = INTO;
101 if(strcasecmp(yytext,"VALUES") == 0) token = VALUES;
102 if(strcasecmp(yytext,"DELETE") == 0) token = DELETE;
103 if(strcasecmp(yytext,"UPDATE") == 0) token = UPDATE;
104 if(strcasecmp(yytext,"SET") == 0) token = SET;
105 if(strcasecmp(yytext,"NULL") == 0) token = NULL_VALUE;
106 if(strcasecmp(yytext,"UNIQUE") == 0) token = UNIQUE;
107 if(strcasecmp(yytext,"CREATE") == 0) token = CREATE;
108 if(strcasecmp(yytext,"DROP") == 0) token = DROP;
109 if(strcasecmp(yytext,"TABLE") == 0) token = TABLE;
110 if(strcasecmp(yytext,"PRIMARY") == 0) token = PRIMARY;
111 if(strcasecmp(yytext,"INDEX") == 0) token = INDEX;
112 if(strcasecmp(yytext,"ON") == 0) token = ON;
113 if(strcasecmp(yytext,"HASH") == 0) token = HASH;
114 if(strcasecmp(yytext,"TREE") == 0) token = TREE;
115 if(strcasecmp(yytext,"UNIQUE") == 0) token = UNIQUE;
117 if(strcasecmp(yytext,"KEY") == 0) token = KEY;
118 if(strcasecmp(yytext,"DEFAULT") == 0) token = DEFAULT;
119 if(strcasecmp(yytext,"INT") ==0) token = INT_TYPE;
120 if(strcasecmp(yytext,"INTEGER") ==0) token = INT_TYPE;
121 if(strcasecmp(yytext,"LONG") ==0) token = LONG_TYPE;
122 if(strcasecmp(yytext,"DOUBLE") ==0) token = DOUBLE_TYPE;
123 if(strcasecmp(yytext,"REAL") ==0) token = DOUBLE_TYPE;
124 if(strcasecmp(yytext,"SHORT") ==0) token = SHORT_TYPE;
125 if(strcasecmp(yytext,"SMALLINT") ==0) token = SHORT_TYPE;
126 if(strcasecmp(yytext,"DATE") ==0) token = DATE_TYPE;
127 if(strcasecmp(yytext,"TIME") ==0) token = TIME_TYPE;
128 if(strcasecmp(yytext,"TIMESTAMP") ==0) token = TIMESTAMP_TYPE;
129 if(strcasecmp(yytext,"BINARY") ==0) token = BINARY_TYPE;
130 if(strcasecmp(yytext,"CHAR") ==0) token = CHAR_TYPE;
131 if(strcasecmp(yytext,"BIGINT") ==0) token = BIGINT_TYPE;
132 if(strcasecmp(yytext,"TINYINT") ==0) token = TINYINT_TYPE;
133 if(strcasecmp(yytext,"FLOAT") ==0) token = FLOAT_TYPE;
134 if(strcasecmp(yytext,"MIN") ==0) token = MIN;
135 if(strcasecmp(yytext,"MAX") ==0) token = MAX;
136 if(strcasecmp(yytext,"SUM") ==0) token = SUM;
137 if(strcasecmp(yytext,"AVG") ==0) token = AVG;
138 if(strcasecmp(yytext,"COUNT") ==0) token = COUNT;
139 if(strcasecmp(yytext,"GROUP") ==0) token = GROUP;
140 if(strcasecmp(yytext,"BY") ==0) token = BY;
143 yylval.stringval = strdup((const char*)yytext);
145 yylval.stringval = 0;
151 yylval.stringval = strdup((const char*)yytext);
152 return (NUMBER_STRING);
155 (({digit}*\.{digit}+)|({digit}+(\.{digit}*)?))([eE][-+]?{digit}+)? { ECHO;
156 yylval.stringval = strdup((const char*)yytext);
161 yylval.stringval = strdup((const char*)yytext);
162 return (BINARY_STRING);
165 yylval.stringval = strdup((const char*)yytext);
168 {white_space}+ { ECHO; }
169 "#"{other}* { ECHO; }
170 "//"{other}* { ECHO; }
171 "--"{other}* { ECHO; }
174 /* Watch this C comment folks */
176 "/*""/"*([^*/]|[^*]"/"|"*"[^/])*"*"*"*/" { ECHO; }
178 {other} { ECHO; return yytext[0]; }