選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

cfg_file.l 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. %x incl
  2. %x module
  3. %{
  4. #define NO_GMIME
  5. #include "config.h"
  6. #include "cfg_file.h"
  7. #include "cfg_yacc.h"
  8. #define MAX_INCLUDE_DEPTH 10
  9. YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
  10. int include_stack_ptr = 0;
  11. extern struct config_file *cfg;
  12. %}
  13. %option noyywrap
  14. %option yylineno
  15. %%
  16. ^[ \t]*#.* /* ignore comments */;
  17. .include BEGIN(incl);
  18. .module BEGIN(module);
  19. composites return COMPOSITES;
  20. tempdir return TEMPDIR;
  21. pidfile return PIDFILE;
  22. workers return WORKERS;
  23. error_time return ERROR_TIME;
  24. dead_time return DEAD_TIME;
  25. maxerrors return MAXERRORS;
  26. reconnect_timeout return RECONNECT_TIMEOUT;
  27. connect_timeout return CONNECT_TIMEOUT;
  28. protocol return PROTOCOL;
  29. memcached return MEMCACHED;
  30. bind_socket return BINDSOCK;
  31. servers return SERVERS;
  32. require return REQUIRE;
  33. header_filters return HEADER_FILTERS;
  34. mime_filters return MIME_FILTERS;
  35. message_filters return MESSAGE_FILTERS;
  36. url_filters return URL_FILTERS;
  37. factors return FACTORS;
  38. metric return METRIC;
  39. name return NAME;
  40. required_score return REQUIRED_SCORE;
  41. function return FUNCTION;
  42. control return CONTROL;
  43. password return PASSWORD;
  44. lmtp return LMTP;
  45. enabled return ENABLED;
  46. delivery return DELIVERY;
  47. agent return AGENT;
  48. statfile return STATFILE;
  49. alias return ALIAS;
  50. pattern return PATTERN;
  51. weight return WEIGHT;
  52. size return SIZE;
  53. tokenizer return TOKENIZER;
  54. classifier return CLASSIFIER;
  55. logging return LOGGING;
  56. log_type return LOG_TYPE;
  57. console return LOG_TYPE_CONSOLE;
  58. syslog return LOG_TYPE_SYSLOG;
  59. file return LOG_TYPE_FILE;
  60. log_level return LOG_LEVEL;
  61. DEBUG return LOG_LEVEL_DEBUG;
  62. INFO return LOG_LEVEL_INFO;
  63. WARNING return LOG_LEVEL_WARNING;
  64. ERROR return LOG_LEVEL_ERROR;
  65. log_facility return LOG_FACILITY;
  66. log_file return LOG_FILENAME;
  67. statfile_pool_size return STATFILE_POOL_SIZE;
  68. \{ return OBRACE;
  69. \} return EBRACE;
  70. ; return SEMICOLON;
  71. , return COMMA;
  72. = return EQSIGN;
  73. yes|YES|no|NO|[yY]|[nN] yylval.flag=parse_flag(yytext); return FLAG;
  74. \n /* ignore EOL */;
  75. [ \t]+ /* ignore whitespace */;
  76. \"[^"]+\" yylval.string=strdup(yytext + 1); yylval.string[strlen(yylval.string) - 1] = '\0'; return QUOTEDSTRING;
  77. \" return QUOTE;
  78. \$[a-zA-Z_][a-zA-Z0-9_]+ yylval.string=strdup(yytext + 1); return VARIABLE;
  79. [0-9]+ yylval.number=strtol(yytext, NULL, 10); return NUMBER;
  80. -?[0-9]+\.?[0-9]* yylval.fract=strtod(yytext, NULL); return FRACT;
  81. [0-9]+[kKmMgG]? yylval.limit=parse_limit(yytext); return SIZELIMIT;
  82. [0-9]+[sS]|[0-9]+[mM][sS] yylval.seconds=parse_seconds(yytext); return SECONDS;
  83. [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} yylval.string=strdup(yytext); return IPADDR;
  84. [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;
  85. [a-zA-Z0-9.-]+:[0-9]{1,5} yylval.string=strdup(yytext); return HOSTPORT;
  86. [a-zA-Z<][a-zA-Z@+>_-]* yylval.string=strdup(yytext); return STRING;
  87. \/[^/\n]+\/ yylval.string=strdup(yytext); return REGEXP;
  88. [a-zA-Z0-9].[a-zA-Z0-9\/.-]+ yylval.string=strdup(yytext); return DOMAINNAME;
  89. <incl>[ \t]* /* eat the whitespace */
  90. <incl>[^ \t\n]+ { /* got the include file name */
  91. if (include_stack_ptr >= MAX_INCLUDE_DEPTH) {
  92. yyerror ("yylex: includes nested too deeply");
  93. return -1;
  94. }
  95. include_stack[include_stack_ptr++] =
  96. YY_CURRENT_BUFFER;
  97. yyin = fopen (yytext, "r");
  98. if (! yyin) {
  99. yyerror ("yylex: cannot open include file");
  100. return -1;
  101. }
  102. yy_switch_to_buffer (yy_create_buffer (yyin, YY_BUF_SIZE));
  103. BEGIN(INITIAL);
  104. }
  105. <<EOF>> {
  106. if ( --include_stack_ptr < 0 ) {
  107. post_load_config (cfg);
  108. yyterminate ();
  109. }
  110. else {
  111. yy_delete_buffer (YY_CURRENT_BUFFER);
  112. yy_switch_to_buffer (include_stack[include_stack_ptr]);
  113. }
  114. }
  115. <module>\n /* ignore EOL */;
  116. <module>[ \t]+ /* ignore whitespace */;
  117. <module>\'[a-zA-Z0-9_-]\' yylval.string=strdup(yytext + 1); yylval.string[strlen(yylval.string) - 1] = '\0'; return MODULE_OPT;
  118. <module>\{ return OBRACE;
  119. <module>\} return EBRACE;
  120. <module>\; return SEMICOLON;
  121. <module>[a-zA-Z0-9_-] yylval.string=strdup(yytext); return PARAM;
  122. <module>\$[a-zA-Z_][a-zA-Z0-9_]+ yylval.string=strdup(yytext + 1); return VARIABLE;
  123. <module>\"[^"]+\" yylval.string=strdup(yytext + 1); yylval.string[strlen(yylval.string) - 1] = '\0'; return QUOTEDSTRING;
  124. %%
  125. /*
  126. * vi:ts=4
  127. */