Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

cfg_file.l 4.5KB

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