1%{
2  using namespace std;
3  #include <stdio.h>
4  #include <iostream>
5  #include <string>
6  #include <ctype.h>
7  #include "query.h"
8  #include "parse.h"
9  #include "super-smack-yacc.h"
10
11  static string q_str = "";
12%}
13
14%option yylineno
15
16%x Q_STR
17%x Q_STR_ESC
18%x COMMENT
19
20WHITE	[ \n\t]
21LETTER	[a-zA-Z]
22IDENT_CHAR [a-zA-Z0-9_]
23DIGIT [0-9]
24
25%%
26
27<INITIAL>"query" { return QUERY_SYM; }
28<INITIAL>"type"  { return TYPE_SYM; }
29<INITIAL>"has_result_set" { return HAS_RESULT_SET_SYM; }
30<INITIAL>"client" { return CLIENT_SYM; }
31<INITIAL>"dictionary" { return DICT_SYM; }
32<INITIAL>"table" { return TABLE_SYM; }
33<INITIAL>"delim" { return DELIM_SYM; }
34<INITIAL>"file_size_equiv" { return FILE_SIZE_EQUIV_SYM; }
35<INITIAL>"create" { return CREATE_SYM; }
36<INITIAL>"min_rows" { return MIN_ROWS_SYM; }
37<INITIAL>"data_file" { return DATA_FILE_SYM; }
38<INITIAL>"gen_data_file" { return GEN_DATA_FILE_SYM; }
39<INITIAL>"parsed" { return PARSED_SYM; }
40<INITIAL>"query_barrel" { return QUERY_BARREL_SYM; }
41<INITIAL>"source" { return SOURCE_SYM; }
42<INITIAL>"source_type" { return SOURCE_TYPE_SYM; }
43<INITIAL>"main" { return MAIN_SYM;}
44<INITIAL>"{" { return OPEN_SECT_SYM;}
45<INITIAL>"}" { return CLOSE_SECT_SYM;}
46<INITIAL>"(" { return OPEN_PAREN_SYM;}
47<INITIAL>")" { return CLOSE_PAREN_SYM;}
48<INITIAL>"\"" { BEGIN Q_STR; q_str = "";}
49<INITIAL>";" { return SEMI_SYM;}
50<INITIAL>"." { return DOT_SYM;}
51<INITIAL>"," { return COMMA_SYM;}
52<INITIAL>"$" { return DOLLAR_SYM;}
53<INITIAL>"::" { return COL_COL_SYM;}
54<INITIAL>"=" { return EQ_SYM;}
55<INITIAL>"db" { return DB_SYM;}
56<INITIAL>"host" { return HOST_SYM;}
57<INITIAL>"user" { return USER_SYM;}
58<INITIAL>"pass" { return PASS_SYM;}
59<INITIAL>"port" { return PORT_SYM;}
60<INITIAL>"socket" { return SOCKET_SYM;}
61<INITIAL>{LETTER}{IDENT_CHAR}* { yylval.str = new string(yytext);
62 return IDENT_SYM;
63}
64
65<INITIAL>{DIGIT}+ { yylval.str = new string(yytext); return NUMBER_SYM; }
66<INITIAL>"#"|"//" { BEGIN COMMENT;}
67<COMMENT>\n { BEGIN 0;}
68<COMMENT>.|\n {}
69
70<Q_STR>"\\" { BEGIN Q_STR_ESC; }
71<Q_STR_ESC>"\\"|"\""|\n { q_str += yytext; BEGIN Q_STR; }
72<Q_STR_ESC>. {}
73<Q_STR>"\"" { BEGIN 0; yylval.str = new string(q_str); return STRING_SYM;}
74<Q_STR>.|\n { q_str += yytext;}
75
76.|\n {}
77
78%%
79
80int yywrap(void)
81{
82  return 1;
83}
84
85
86
87
88
89
90
91
92
93
94
95
96
97