root/trunk/config_gram.y

Revision 2, 2.3 kB (checked in by jesus, 14 years ago)

Initial revision

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
Line 
1 %{
2 /* ======================================================================
3  * Copyright (c) 2000 Theo Schlossnagle
4  * All rights reserved.
5  * The following code was written by Theo Schlossnagle <jesus@omniti.com>
6  * This code was written to facilitate clustered logging via Spread.
7  * More information on Spread can be found at http://www.spread.org/
8  * Please refer to the LICENSE file before using this software.
9  * ======================================================================
10 */
11
12 #include "config.h"
13
14 extern int line_num, semantic_errors;
15 extern int buffsize;
16 extern char *yytext;
17
18 static SpreadConfiguration *current_sc = NULL;
19 static LogFacility *current_lf = NULL;
20
21 #define NEW_SC_IFNEEDED if(!current_sc) current_sc=config_new_spread_conf();
22
23 #define NEW_LF_IFNEEDED if(!current_sc) current_sc=config_new_spread_conf(); \
24                         if(!current_lf) current_lf=config_new_logfacility();
25 %}
26 %start Config
27 %token BUFFERSIZE SPREAD PORT HOST LOG GROUP FILENAME MATCH
28 %token OPENBRACE CLOSEBRACE EQUALS STRING
29 %%
30 Config          :       Globals SpreadConfs
31                         { config_start(); }
32
33 Globals         :       GlobalParam Globals
34                 |
35                 ;
36
37 GlobalParam     :       BUFFERSIZE EQUALS STRING
38                         { if(buffsize<0) {
39                             buffsize = atoi($3);
40                           }
41                         }
42
43 SpreadConfs     :       SpreadConf SpreadConfs
44                 |       SpreadConf
45                 ;
46
47 SpreadConf      :       SPREAD OPENBRACE SPparams LogStructs CLOSEBRACE
48                         { config_add_spreadconf(current_sc);
49                           current_sc = NULL; }
50                 ;
51
52 SPparams        :       SPparam SPparams
53                 |       
54                 ;
55
56 SPparam         :       PORT EQUALS STRING
57                         { NEW_SC_IFNEEDED;
58                           config_set_spread_port(current_sc, $3); }
59                 |       HOST EQUALS STRING
60                         { NEW_SC_IFNEEDED;
61                           config_set_spread_host(current_sc, $3); }
62                 ;
63
64 LogStructs      :       LogStruct LogStructs
65                 |
66                 ;
67
68 LogStruct       :       LOG OPENBRACE Logparams CLOSEBRACE
69                         { config_add_logfacility(current_sc, current_lf);
70                           current_lf = NULL; }
71                 ;
72
73 Logparams       :       Logparams Logparam
74                 |
75                 ;
76
77 Logparam        :       GROUP EQUALS STRING
78                         { NEW_LF_IFNEEDED;
79                           config_set_logfacility_group(current_lf, $3); }
80                 |       FILENAME EQUALS STRING
81                         { NEW_LF_IFNEEDED;
82                           config_set_logfacility_filename(current_lf, $3); }
83                 |       MATCH EQUALS STRING
84                         { NEW_LF_IFNEEDED;
85                           config_add_logfacility_match(current_lf, $3); }
86                 ;
87
88
89 %%
90 int yyerror(char *str) {
91   fprintf(stderr, "Parser error on or before line %d\n", line_num);
92   fprintf(stderr, "Offending token: %s\n", yytext);
93   return -1;
94 }
Note: See TracBrowser for help on using the browser.