X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Foptions%2Fscanner.l;h=f5d09e7a3aaa1e1755f5bc3cf4ab2470d7c1f830;hb=f0d3a824ed9acb9f6e3080683abe2bcc8b0cd6bd;hp=77f16ebe5e541ddda33b79d3bae1c87647c76024;hpb=aaf07fb6d380f4e4f0b5404d6b006afcfe62aa7f;p=awesomized%2Flibmemcached diff --git a/libmemcached/options/scanner.l b/libmemcached/options/scanner.l index 77f16ebe..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{ @@ -53,33 +72,115 @@ static void get_lex_chars(char* buffer, int& result, int max_size, struct type_s %% -=|, { return yytext[0];} +=|,|[ ] { return yytext[0];} [[:digit:]]+ { yylval->number = atoi(yytext); return (NUMBER); } ([[:digit:]]*.[:digit:]+) { yylval->double_number = atof(yytext); return (FLOAT); } -[ \t\r\n] ; /* skip whitespace */ +[\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; } +^#.*$ { + 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 SERVER_WITH_PORT; + return HOSTNAME_WITH_PORT; } -[[:alnum:]][[:alnum:].]*[[:alpha:]] { +[[:alnum:]]+"."[[:alpha:].]+ { yylval->string.c_str = yytext; yylval->string.length = yyleng; - return IDENTIFIER; + return HOSTNAME; } + [[:digit:]]{1,3}"."[[:digit:]]{1,3}"."[[:digit:]]{1,3}"."[[:digit:]]{1,3}: { yylval->string.c_str = yytext; yylval->string.length = yyleng; @@ -92,8 +193,19 @@ static void get_lex_chars(char* buffer, int& result, int max_size, struct type_s return IPADDRESS; } -. { - std::cerr << "Near " << yytext << std::endl; +[[: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; }