crossroads

Git mirror of https://crossroads.e-tunity.com/
git clone git://git.finwo.net/app/crossroads
Log | Files | Refs

lexer.l (6402B)


      1 %{
      2 #include "crossroads.h"
      3 #include "parser.h"
      4 
      5 /* Required by flex */
      6 static int yywrap () {
      7     return (1);
      8 }
      9 
     10 /* Lexer debugging related */
     11 // #define LEXER_DEBUG
     12 #ifdef LEXER_DEBUG
     13     static void lmsg (char const *x) {
     14         printf ("L: %s\n", x);
     15     }
     16     static void llmsg (char const *x, char const *y) {
     17         printf ("L: %s %s\n", x, y);
     18     }
     19 #else
     20 #   define lmsg(x)
     21 #   define llmsg(x,y)
     22 #endif
     23 %}
     24 
     25 %x stringstate commentstate
     26 
     27 %%
     28 
     29 #.*\n {
     30     lmsg ("comment");
     31     yylineno++;
     32 }
     33 
     34 \/\/.*\n {
     35     lmsg ("comment");
     36     yylineno++;
     37 }
     38 
     39 service {
     40     lmsg ("service");
     41     return (SERVICE);
     42 }
     43 
     44 bindto {
     45     lmsg ("bindto");
     46     BEGIN (stringstate);
     47     free (laststring);
     48     laststring = 0;
     49     return (BINDTO);
     50 }
     51 
     52 port {
     53     lmsg ("port");
     54     return (PORT);
     55 }
     56 
     57 over {
     58     lmsg ("over");
     59     return (OVER);
     60 }
     61 
     62 shmkey {
     63     lmsg ("shmkey");
     64     return (SHMKEY);
     65 }
     66 
     67 backend {
     68     lmsg ("backend");
     69     return (BACKEND);
     70 }
     71 
     72 backlog {
     73     lmsg ("backlog");
     74     return (BACKLOG);
     75 }
     76 
     77 (verbosity)|(verbose) {
     78     lmsg ("verbosity");
     79     return (VERBOSITY);
     80 }
     81 
     82 connectiontimeout {
     83     lmsg ("connectiontimeout");
     84     return (CONNECTIONTIMEOUT);
     85 }
     86 
     87 maxconnections {
     88     lmsg ("maxconnections");
     89     return (MAXCONNECTIONS);
     90 }
     91 
     92 weight {
     93     lmsg ("weight");
     94     return (WEIGHT);
     95 }
     96 
     97 decay {
     98     lmsg ("decay");
     99     return (DECAY);
    100 }
    101 
    102 server {
    103     lmsg ("server");
    104     BEGIN (stringstate);
    105     free (laststring);
    106     laststring = 0;
    107     return (SERVER);
    108 }
    109 
    110 dispatchmode {
    111     lmsg ("dispatchmode");
    112     return (DISPATCHMODE);
    113 }
    114 
    115 roundrobin {
    116     lmsg ("roundrobin");
    117     return (ROUNDROBIN);
    118 }
    119 
    120 random {
    121     lmsg ("random");
    122     return (RANDOM);
    123 }
    124 
    125 byduration {
    126     lmsg ("byduration");
    127     return (BYDURATION);
    128 }
    129 
    130 bysize {
    131     lmsg ("bysize");
    132     return (BYSIZE);
    133 }
    134 
    135 byorder	{
    136     lmsg ("byorder");
    137     return (BYORDER);
    138 }
    139 
    140 byconnections {
    141     lmsg ("byconnections");
    142     return (BYCONNECTIONS);
    143 }
    144 
    145 externalhandler {
    146     lmsg ("externalhandler");
    147     BEGIN (stringstate);
    148     free (laststring);
    149     laststring = 0;
    150     return (EXTERNALHANDLER);
    151 }
    152 
    153 useraccount {
    154     lmsg ("useraccount");
    155     BEGIN (stringstate);
    156     free (laststring);
    157     laststring = 0;
    158     return (USERACCOUNT);
    159 }
    160 
    161 revivinginterval {
    162     lmsg ("revivinginterval");
    163     return (REVIVINGINTERVAL);
    164 }
    165 
    166 type {
    167     lmsg ("type");
    168     return (TYPE);
    169 }
    170 
    171 any {
    172     lmsg ("any");
    173     return (ANY);
    174 }
    175 
    176 stickyhttp {
    177     lmsg ("stickyhttp");
    178     warning ("The 'stickyhttp protocol is obsolte.\n"
    179 	     "You should change to 'http'.");
    180     return (HTTP);
    181 }
    182 
    183 http {
    184     lmsg ("http");
    185     return (HTTP);
    186 }
    187 
    188 throughputlog {
    189     lmsg ("throughputlog");
    190     BEGIN (stringstate);
    191     free (laststring);
    192     laststring = 0;
    193     return (THROUGHPUTLOG);
    194 }
    195 
    196 trafficlog {
    197     lmsg ("trafficlog");
    198     BEGIN (stringstate);
    199     free (laststring);
    200     laststring = 0;
    201     return (TRAFFICLOG);
    202 }
    203 
    204 dumptraffic {
    205     lmsg ("dumptraffic");
    206     warning ("The 'dumptraffic' statement is obsolete.\n"
    207 	     "You should change to 'trafficlog'.");
    208     BEGIN (stringstate);
    209     free (laststring);
    210     laststring = 0;
    211     return (TRAFFICLOG);
    212 }
    213 
    214 onstart {
    215     lmsg ("onstart");
    216     BEGIN (stringstate);
    217     free (laststring);
    218     laststring = 0;
    219     return (ONSTART);
    220 }
    221 
    222 onfail {
    223     lmsg ("onfail");
    224     BEGIN (stringstate);
    225     free (laststring);
    226     laststring = 0;
    227     return (ONFAIL);
    228 }
    229 
    230 onend {
    231     lmsg ("onend");
    232     BEGIN (stringstate);
    233     free (laststring);
    234     laststring = 0;
    235     return (ONEND);
    236 }
    237 
    238 stickycookie {
    239     lmsg ("stickycookie");
    240     BEGIN (stringstate);
    241     free (laststring);
    242     laststring = 0;
    243     return (STICKYCOOKIE);
    244 }
    245 
    246 addclientheader {
    247     lmsg ("addclientheader");
    248     BEGIN (stringstate);
    249     free (laststring);
    250     laststring = 0;
    251     return (ADDCLIENTHEADER);
    252 }
    253 
    254 setclientheader {
    255     lmsg ("setclientheader");
    256     BEGIN (stringstate);
    257     free (laststring);
    258     laststring = 0;
    259     return (SETCLIENTHEADER);
    260 }
    261 
    262 appendclientheader {
    263     lmsg ("appendclientheader");
    264     BEGIN (stringstate);
    265     free (laststring);
    266     laststring = 0;
    267     return (APPENDCLIENTHEADER);
    268 }
    269 
    270 addserverheader {
    271     lmsg ("addserverheader");
    272     BEGIN (stringstate);
    273     free (laststring);
    274     laststring = 0;
    275     return (ADDSERVERHEADER);
    276 }
    277 
    278 setserverheader {
    279     lmsg ("setserverheader");
    280     BEGIN (stringstate);
    281     free (laststring);
    282     laststring = 0;
    283     return (SETSERVERHEADER);
    284 }
    285 
    286 appendserverheader {
    287     lmsg ("appendserverheader");
    288     BEGIN (stringstate);
    289     free (laststring);
    290     laststring = 0;
    291     return (APPENDSERVERHEADER);
    292 }
    293 
    294 allowfrom {
    295     lmsg ("allowfrom");
    296     BEGIN (stringstate);
    297     free (laststring);
    298     laststring = 0;
    299     return (ALLOWFROM);
    300 }
    301 
    302 denyfrom {
    303     lmsg ("denyfrom");
    304     BEGIN (stringstate);
    305     free (laststring);
    306     laststring = 0;
    307     return (DENYFROM);
    308 }
    309 
    310 allowfile {
    311     lmsg ("allowfile");
    312     BEGIN (stringstate);
    313     free (laststring);
    314     laststring = 0;
    315     return (ALLOWFILE);
    316 }
    317 
    318 denyfile {
    319     lmsg ("denyfile");
    320     BEGIN (stringstate);
    321     free (laststring);
    322     laststring = 0;
    323     return (DENYFILE);
    324 }
    325 
    326 on|true|yes {
    327     lmsg ("on");
    328     return (ON);
    329 }
    330 
    331 off|false|no {
    332     lmsg ("off");
    333     return (OFF);
    334 }
    335 
    336 [a-zA-Z_][a-zA-Z0-9_]* {
    337     llmsg ("identifier", yytext);
    338     return (IDENTIFIER);
    339 }
    340 
    341 [0-9]+ {
    342     llmsg ("number", yytext);
    343     return (NUMBER);
    344 }
    345 
    346 [ \t]+ {
    347     lmsg ("space(s)");
    348 }
    349 
    350 \n {
    351     lmsg ("newline");
    352     yylineno++;
    353 }
    354 
    355 . {
    356     llmsg ("lone char", yytext);
    357     return (*yytext);
    358 }
    359 
    360 \/\* {
    361     lmsg ("C-comment starts");
    362     BEGIN(commentstate);
    363 }
    364 <commentstate>\*\/ {
    365     lmsg ("C-comment ends");
    366     BEGIN(0);
    367 }
    368 <commentstate>\n {
    369     yylineno++;
    370 }
    371 <commentstate>.	;
    372 
    373 <stringstate>\"[^\"]*\"	{
    374     llmsg ("string part", yytext);
    375     laststring = xstrcat (laststring, yytext + 1);
    376     laststring[strlen(laststring) - 1] = 0;
    377 }
    378 <stringstate>\'[^\']*\' {
    379     llmsg ("string part", yytext);
    380     laststring = xstrcat (laststring, yytext + 1);
    381     laststring[strlen(laststring) - 1] = 0;
    382 }
    383 <stringstate>; {
    384     BEGIN (0);
    385     unput (';');
    386     llmsg ("string", laststring);
    387     return (STRING);
    388 }
    389 <stringstate>" " {
    390     if (laststring) {
    391 	laststring = xstrcat (laststring, yytext);
    392 	llmsg ("string part", yytext);
    393     }
    394 }
    395 <stringstate>. {
    396     llmsg ("string part", yytext);
    397     laststring = xstrcat (laststring, yytext);
    398 }
    399 <stringstate>\n	{
    400     if (laststring) {
    401 	laststring = xstrcat (laststring, " ");
    402 	lmsg ("string part: newline, now space");
    403     }
    404     yylineno++;
    405 }