X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Foptions%2Fscanner.l;h=f5d09e7a3aaa1e1755f5bc3cf4ab2470d7c1f830;hb=f0d3a824ed9acb9f6e3080683abe2bcc8b0cd6bd;hp=e11fcf49aa2398712e878a2036e44c371c3c8f2e;hpb=10f3d6bf1bc11c235779ae735f30758cfb035686;p=awesomized%2Flibmemcached diff --git a/libmemcached/options/scanner.l b/libmemcached/options/scanner.l index e11fcf49..f5d09e7a 100644 --- a/libmemcached/options/scanner.l +++ b/libmemcached/options/scanner.l @@ -1,3 +1,22 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * + * Libmemcached Scanner and Parser + * + * Copyright (C) 2011 DataDifferental, http://datadifferential.com + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ %top{ @@ -52,38 +71,142 @@ static void get_lex_chars(char* buffer, int& result, int max_size, struct type_s %% -[=] { return EQ; } -[,] { return COMMA; } -[0-9]+ { yylval->number = atoi(yytext); return (NUMBER); } - -([0-9]*.[0-9]+) { yylval->double_number = atof(yytext); return (FLOAT); } - -[ \t\r\n] ; /* skip whitespace */ - -"--SERVER" { return SERVER; } -"--SERVERS" { return SERVERS; } -"--TCP_NODELAY" { return TCPNODELAY; } -"--TCP-NODELAY" { return TCPNODELAY; } -"--VERIFY_KEY" { return VERIFY_KEY; } -"--VERIFY-KEY" { return VERIFY_KEY; } - -[A-Za-z][A-Za-z0-9_]*[:] { - yylval->string.c_str = yytext; - yylval->string.length = yyleng; - return SERVER_WITH_PORT; - } - -[A-Za-z][A-Za-z0-9_]* { - yylval->string.c_str = yytext; - yylval->string.length = yyleng; - return IDENTIFIER; - } -[-] ; - -. { - std::cerr << "Near " << yytext << std::endl; - return UNKNOWN; - } +=|,|[ ] { return yytext[0];} + + +[[:digit:]]+ { yylval->number = atoi(yytext); return (NUMBER); } + +([[:digit:]]*.[:digit:]+) { yylval->double_number = atof(yytext); return (FLOAT); } + +[\t\r\n] ; /* skip whitespace */ + +^#.*$ { + return COMMENT; + } + +"--" { return DASH_OPTION; } + +SERVER { return SERVER; } +SERVERS { return SERVERS; } + +VERIFY_KEY { return VERIFY_KEY; } +VERIFY-KEY { return VERIFY_KEY; } +AUTO_EJECT_HOSTS { return AUTO_EJECT_HOSTS; } +AUTO-EJECT_HOSTS { return AUTO_EJECT_HOSTS; } +BINARY_PROTOCOL { return BINARY_PROTOCOL; } +BINARY-PROTOCOL { return BINARY_PROTOCOL; } +BUFFER_REQUESTS { return BUFFER_REQUESTS; } +BUFFER-REQUESTS { return BUFFER_REQUESTS; } +CACHE_LOOKUPS { return CACHE_LOOKUPS; } +CACHE-LOOKUPS { return CACHE_LOOKUPS; } +CONNECT_TIMEOUT { return CONNECT_TIMEOUT; } +CONNECT-TIMEOUT { return CONNECT_TIMEOUT; } +CORK { return _CORK; } +DISTRIBUTION { return DISTRIBUTION; } +HASH { return HASH; } +HASH_WITH_PREFIX_KEY { return HASH_WITH_PREFIX_KEY; } +HASH-WITH-PREFIX_KEY { return HASH_WITH_PREFIX_KEY; } +IO_BYTES_WATERMARK { return IO_BYTES_WATERMARK; } +IO-BYTES-WATERMARK { return IO_BYTES_WATERMARK; } +IO_KEY_PREFETCH { return IO_KEY_PREFETCH; } +IO-KEY-PREFETCH { return IO_KEY_PREFETCH; } +IO_MSG_WATERMARK { return IO_MSG_WATERMARK; } +IO-MSG-WATERMARK { return IO_MSG_WATERMARK; } +KETAMA { return KETAMA; } +KETAMA_HASH { return KETAMA_HASH; } +KETAMA-HASH { return KETAMA_HASH; } +KETAMA_WEIGHTED { return KETAMA_WEIGHTED; } +KETAMA-WEIGHTED { return KETAMA_WEIGHTED; } +NOREPLY { return NOREPLY; } +NUMBER_OF_REPLICAS { return NUMBER_OF_REPLICAS; } +NUMBER-OF-REPLICAS { return NUMBER_OF_REPLICAS; } +POLL_TIMEOUT { return POLL_TIMEOUT; } +POLL-TIMEOUT { return POLL_TIMEOUT; } +RANDOMIZE_REPLICA_READ { return RANDOMIZE_REPLICA_READ; } +RANDOMIZE-REPLICA-READ { return RANDOMIZE_REPLICA_READ; } +RCV_TIMEOUT { return RCV_TIMEOUT; } +RCV-TIMEOUT { return RCV_TIMEOUT; } +RETRY_TIMEOUT { return RETRY_TIMEOUT; } +RETRY-TIMEOUT { return RETRY_TIMEOUT; } +SERVER_FAILURE_LIMIT { return SERVER_FAILURE_LIMIT; } +SERVER-FAILURE-LIMIT { return SERVER_FAILURE_LIMIT; } +SND_TIMEOUT { return SND_TIMEOUT; } +SND-TIMEOUT { return SND_TIMEOUT; } +SOCKET_RECV_SIZE { return SOCKET_RECV_SIZE; } +SOCKET-RECV-SIZE { return SOCKET_RECV_SIZE; } +SOCKET_SEND_SIZE { return SOCKET_SEND_SIZE; } +SOCKET-SEND-SIZE { return SOCKET_SEND_SIZE; } +SORT_HOSTS { return SORT_HOSTS; } +SORT-HOSTS { return SORT_HOSTS; } +SUPPORT_CAS { return SUPPORT_CAS; } +SUPPORT-CAS { return SUPPORT_CAS; } +TCP_NODELAY { return _TCP_NODELAY; } +TCP-NODELAY { return _TCP_NODELAY; } +TCP_KEEPALIVE { return _TCP_KEEPALIVE; } +TCP-KEEPALIVE { return _TCP_KEEPALIVE; } +TCP_KEEPIDLE { return _TCP_KEEPIDLE; } +TCP-KEEPIDLE { return _TCP_KEEPIDLE; } +USER_DATA { return USER_DATA; } +USER-DATA { return USER_DATA; } +USE_UDP { return USE_UDP; } +USE-UDP { return USE_UDP; } + +PREFIX-KEY { return PREFIX_KEY; } +PREFIX_KEY { return PREFIX_KEY; } + +CONSISTENT { return CONSISTENT; } +MODULA { return MODULA; } +RANDOM { return RANDOM; } + +MD5 { return MD5; } +CRC { return CRC; } +FNV1_64 { return FNV1_64; } +FNV1A_64 { return FNV1A_64; } +FNV1_32 { return FNV1_32; } +FNV1A_32 { return FNV1A_32; } +HSIEH { return HSIEH; } +MURMUR { return MURMUR; } +JENKINS { return JENKINS; } + +[[:alnum:]][[:alnum:].]*[[:alpha:]]: { + yylval->string.c_str = yytext; + yylval->string.length = yyleng; + return HOSTNAME_WITH_PORT; + } + +[[:alnum:]]+"."[[:alpha:].]+ { + yylval->string.c_str = yytext; + yylval->string.length = yyleng; + return HOSTNAME; + } + +[[:digit:]]{1,3}"."[[:digit:]]{1,3}"."[[:digit:]]{1,3}"."[[:digit:]]{1,3}: { + yylval->string.c_str = yytext; + yylval->string.length = yyleng; + return IPADDRESS_WITH_PORT; + } + +[[:digit:]]{1,3}"."[[:digit:]]{1,3}"."[[:digit:]]{1,3}"."[[:digit:]]{1,3} { + yylval->string.c_str = yytext; + yylval->string.length = yyleng; + return IPADDRESS; + } + +[[:alnum:]]+ { + yylval->string.c_str = yytext; + yylval->string.length = yyleng; + return STRING; + } + +\".*\" { + yylval->string.c_str = yytext; + yylval->string.length = yyleng; + return QUOTED_STRING; + } + +. { + return UNKNOWN; + } %%