您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

cfg_file.l 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. %x incl
  2. %x module
  3. %{
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <strings.h>
  8. #include <syslog.h>
  9. #include "cfg_file.h"
  10. #include "cfg_yacc.h"
  11. #define MAX_INCLUDE_DEPTH 10
  12. YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
  13. int include_stack_ptr = 0;
  14. extern struct config_file *cfg;
  15. %}
  16. %option noyywrap
  17. %option yylineno
  18. %%
  19. ^[ \t]*#.* /* ignore comments */;
  20. .include BEGIN(incl);
  21. .module BEGIN(module);
  22. tempdir return TEMPDIR;
  23. pidfile return PIDFILE;
  24. workers return WORKERS;
  25. error_time return ERROR_TIME;
  26. dead_time return DEAD_TIME;
  27. maxerrors return MAXERRORS;
  28. reconnect_timeout return RECONNECT_TIMEOUT;
  29. connect_timeout return CONNECT_TIMEOUT;
  30. protocol return PROTOCOL;
  31. memcached return MEMCACHED;
  32. bind_socket return BINDSOCK;
  33. servers return SERVERS;
  34. require return REQUIRE;
  35. module return MODULE;
  36. filter return FILTER;
  37. metric return METRIC;
  38. script_header return SCRIPT_HEADER;
  39. script_mime return SCRIPT_MIME;
  40. script_message return SCRIPT_MESSAGE;
  41. script_url return SCRIPT_URL;
  42. script_chain return SCRIPT_CHAIN;
  43. \{ return OBRACE;
  44. \} return EBRACE;
  45. ; return SEMICOLON;
  46. , return COMMA;
  47. = return EQSIGN;
  48. yes|YES|no|NO|[yY]|[nN] yylval.flag=parse_flag(yytext); return FLAG;
  49. \n /* ignore EOL */;
  50. [ \t]+ /* ignore whitespace */;
  51. \"[^"]+\" yylval.string=strdup(yytext + 1); yylval.string[strlen(yylval.string) - 1] = '\0'; return QUOTEDSTRING;
  52. \" return QUOTE;
  53. \$[a-zA-Z_][a-zA-Z0-9_]+ yylval.string=strdup(yytext + 1); return VARIABLE;
  54. [0-9]+ yylval.number=strtol(yytext, NULL, 10); return NUMBER;
  55. [0-9]+[kKmMgG]? yylval.limit=parse_limit(yytext); return SIZELIMIT;
  56. [0-9]+[sS]|[0-9]+[mM][sS] yylval.seconds=parse_seconds(yytext); return SECONDS;
  57. [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} yylval.string=strdup(yytext); return IPADDR;
  58. [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,2} yylval.string=strdup(yytext); return IPNETWORK;
  59. [a-zA-Z0-9.-]+:[0-9]{1,5} yylval.string=strdup(yytext); return HOSTPORT;
  60. [a-zA-Z0-9]+:[a-zA-Z0-9_:]+ yylval.string=strdup(yytext); return SCRIPT_PARAM;
  61. [a-zA-Z<][a-zA-Z@+>_-]* yylval.string=strdup(yytext); return STRING;
  62. \/[^/\n]+\/ yylval.string=strdup(yytext); return REGEXP;
  63. [a-zA-Z0-9].[a-zA-Z0-9\/.-]+ yylval.string=strdup(yytext); return DOMAIN;
  64. <incl>[ \t]* /* eat the whitespace */
  65. <incl>[^ \t\n]+ { /* got the include file name */
  66. if (include_stack_ptr >= MAX_INCLUDE_DEPTH) {
  67. yyerror ("yylex: includes nested too deeply");
  68. return -1;
  69. }
  70. include_stack[include_stack_ptr++] =
  71. YY_CURRENT_BUFFER;
  72. yyin = fopen (yytext, "r");
  73. if (! yyin) {
  74. yyerror ("yylex: cannot open include file");
  75. return -1;
  76. }
  77. yy_switch_to_buffer (yy_create_buffer (yyin, YY_BUF_SIZE));
  78. BEGIN(INITIAL);
  79. }
  80. <<EOF>> {
  81. if ( --include_stack_ptr < 0 ) {
  82. post_load_config (cfg);
  83. yyterminate ();
  84. }
  85. else {
  86. yy_delete_buffer (YY_CURRENT_BUFFER);
  87. yy_switch_to_buffer (include_stack[include_stack_ptr]);
  88. }
  89. }
  90. <module>\n /* ignore EOL */;
  91. <module>[ \t]+ /* ignore whitespace */;
  92. <module>\'[a-zA-Z0-9_-]\' yylval.string=strdup(yytext + 1); yylval.string[strlen(yylval.string) - 1] = '\0'; return MODULE_OPT;
  93. <module>\{ return OBRACE;
  94. <module>\} return EBRACE;
  95. <module>\; return SEMICOLON;
  96. <module>[a-zA-Z0-9_-] yylval.string=strdup(yytext); return PARAM;
  97. <module>\$[a-zA-Z_][a-zA-Z0-9_]+ yylval.string=strdup(yytext + 1); return VARIABLE;
  98. <module>\"[^"]+\" yylval.string=strdup(yytext + 1); yylval.string[strlen(yylval.string) - 1] = '\0'; return QUOTEDSTRING;
  99. %%
  100. /*
  101. * vi:ts=4
  102. */