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