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