http://gimel.esc.cam.ac.uk/james/rpld/src/rpld-1.2.tar.gz
[rpld.git] / rpld_conf.lex
1 /*************************************************
2 *     rpld - an IBM style RIPL server            *
3 *************************************************/
4
5 /* Copyright (c) 1999, James McKenzie.
6  *                      All rights reserved
7  * Copyright (c) 1998, Christopher Lightfoot.
8  *                      All rights reserved
9  *
10  * By using this file, you agree to the terms and conditions set
11  * forth in the LICENCE file which can be found at the top level of
12  * the rpld distribution.
13  *
14  * IBM is a trademark of IBM corp.
15  *
16  */
17
18 /*
19  *  Lexer for RPLD conf files
20  *
21  *  $Log: rpld_conf.lex,v $
22  *  Revision 1.4  2000/07/16 13:18:10  root
23  *  #
24  *
25  *  Revision 1.1  2000/07/16 13:16:33  root
26  *  #
27  *
28  *  Revision 1.3  1999/09/13 11:17:35  root
29  *  \#
30  *
31  *  Revision 1.2  1999/09/13 11:08:34  root
32  *  \#
33  *
34  *  Revision 1.1  1999/09/13 11:04:13  root
35  *  \#
36  *
37  *  Revision 1.10  1999/09/12 19:08:24  chris
38  *  Another attempt at C comments.
39  *
40  *  Revision 1.9  1999/09/12 17:38:45  chris
41  *  Implemented proper MAC reading.
42  *
43  *  Revision 1.8  1999/09/12 03:27:43  chris
44  *  Changes to enable error reporting in yacc grammar.
45  *
46  *  Revision 1.7  1999/09/11 19:30:26  chris
47  *  Fixed hex number support.
48  *
49  *  Revision 1.6  1999/09/11 19:25:06  chris
50  *  No major changes.
51  *
52  *  Revision 1.5  1999/09/11 19:24:23  chris
53  *  Removed support for C-style comments, inserted support for C++ ones. Comment support actually works now
54  *
55  *  Revision 1.4  1999/09/11 19:02:25  chris
56  *  Fixed bug in comment support.
57  *
58  *  Revision 1.3  1999/09/11 19:00:43  chris
59  *  Added support for comments.
60  *
61  *  Revision 1.2  1999/09/11 18:57:31  chris
62  *  Initial revision.
63  *
64  *  
65  */
66
67 %x      COMMENT
68
69 %{
70 static char rcsid[]="$Id: rpld_conf.lex,v 1.4 2000/07/16 13:18:10 root Exp root $";
71
72 #include <stdio.h>
73 #include <string.h>
74 #include <stdlib.h>
75 #include "rpld_conf.tab.h"
76
77
78 // line number
79 int lineno = 1;
80
81 // function to convert hex digits to a MAC address
82 void strtomac(char *s, char *mac);
83
84 void strtomac(char *s, char *mac)
85 {
86         // mac address *must* be in form 00:11:22:33:44:55
87         int i;
88
89         for (i = 0; i < 6; i++) *(mac + i) = (unsigned char)strtol(s + i * 3, NULL, 16);
90 }
91
92
93 %}
94 ws      [ \t]+
95 nl      \n
96 hb      [0-9A-Fa-f][0-9A-Fa-f]
97
98 %%
99
100 {ws}                    ;
101 {nl}                    { lineno++; }
102
103 \/\/.*                  ;
104
105 "/*"                    BEGIN COMMENT;
106 <COMMENT>.      |
107 <COMMENT>\n             ;
108 <COMMENT>"*/"           BEGIN INITIAL;
109
110 [{]                     { return BLOCK_START; }
111
112 [}]                     { return BLOCK_END; }
113
114 {hb}:{hb}:{hb}:{hb}:{hb}:{hb}   { strtomac(yytext, (yylval.mac_address)); return MACADDR; }
115
116 0x[0-9A-Fa-f]+ {
117                                 yylval.number = strtol(yytext + 2, NULL, 16);
118                                 return NUMBER;
119                         }
120
121 [0-9]+                  {
122                                 int i; i = strtol(yytext, NULL, 10);
123                                 yylval.number = i; return NUMBER;
124                         }
125
126 [A-Za-z\-_]+            { yylval.name = strdup(yytext); return NAME; }
127
128 \"[A-Za-z0-9.:/\-_ ]*\" { yylval.text = strdup(yytext + 1); *(yylval.text + strlen(yylval.text) - 1) = 0; return TEXT;}
129
130 .                       { return yytext[0]; }
131
132 %%
133
134
135 int yywrap()
136 {
137         return 1;
138 }
139