%{ using namespace std; #include #include #include #include #include "query.h" #include "parse.h" #include "super-smack-yacc.h" static string q_str = ""; %} %option yylineno %x Q_STR %x Q_STR_ESC %x COMMENT WHITE [ \n\t] LETTER [a-zA-Z] IDENT_CHAR [a-zA-Z0-9_] DIGIT [0-9] %% "query" { return QUERY_SYM; } "type" { return TYPE_SYM; } "has_result_set" { return HAS_RESULT_SET_SYM; } "client" { return CLIENT_SYM; } "dictionary" { return DICT_SYM; } "table" { return TABLE_SYM; } "delim" { return DELIM_SYM; } "file_size_equiv" { return FILE_SIZE_EQUIV_SYM; } "create" { return CREATE_SYM; } "min_rows" { return MIN_ROWS_SYM; } "data_file" { return DATA_FILE_SYM; } "gen_data_file" { return GEN_DATA_FILE_SYM; } "parsed" { return PARSED_SYM; } "query_barrel" { return QUERY_BARREL_SYM; } "source" { return SOURCE_SYM; } "source_type" { return SOURCE_TYPE_SYM; } "main" { return MAIN_SYM;} "{" { return OPEN_SECT_SYM;} "}" { return CLOSE_SECT_SYM;} "(" { return OPEN_PAREN_SYM;} ")" { return CLOSE_PAREN_SYM;} "\"" { BEGIN Q_STR; q_str = "";} ";" { return SEMI_SYM;} "." { return DOT_SYM;} "," { return COMMA_SYM;} "$" { return DOLLAR_SYM;} "::" { return COL_COL_SYM;} "=" { return EQ_SYM;} "db" { return DB_SYM;} "host" { return HOST_SYM;} "user" { return USER_SYM;} "pass" { return PASS_SYM;} "port" { return PORT_SYM;} "socket" { return SOCKET_SYM;} {LETTER}{IDENT_CHAR}* { yylval.str = new string(yytext); return IDENT_SYM; } {DIGIT}+ { yylval.str = new string(yytext); return NUMBER_SYM; } "#"|"//" { BEGIN COMMENT;} \n { BEGIN 0;} .|\n {} "\\" { BEGIN Q_STR_ESC; } "\\"|"\""|\n { q_str += yytext; BEGIN Q_STR; } . {} "\"" { BEGIN 0; yylval.str = new string(q_str); return STRING_SYM;} .|\n { q_str += yytext;} .|\n {} %% int yywrap(void) { return 1; }