]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.sbin/rrenumd/lexer.l
bluetooth: Fix a mandoc related issues
[FreeBSD/FreeBSD.git] / usr.sbin / rrenumd / lexer.l
1 /*      $KAME: lexer.l,v 1.7 2000/11/08 02:40:53 itojun Exp $   */
2
3 /*-
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  * 3. Neither the name of the project nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  *
33  * $FreeBSD$
34  */
35
36 %{
37 #include <sys/param.h>
38 #include <sys/ioctl.h>
39 #include <sys/socket.h>
40 #include <sys/queue.h>
41
42 #include <string.h>
43
44 #include <net/if.h>
45 #include <netinet/in.h>
46 #include <netinet/in_var.h>
47 #include <netinet/icmp6.h>
48
49 #include <arpa/inet.h>
50
51 #include "y.tab.h"
52
53 int lineno = 1;
54
55 #define LINEBUF_SIZE 1000
56 char linebuf[LINEBUF_SIZE];
57
58 int parse(FILE **);
59 void yyerror(const char *);
60 int yylex(void);
61 %}
62
63 %option noyywrap
64 %option nounput
65
66 /* common section */
67 nl              \n
68 ws              [ \t]+
69 digit           [0-9]
70 letter          [0-9A-Za-z]
71 hexdigit        [0-9A-Fa-f]
72 special         [()+\|\?\*,]
73 dot             \.
74 hyphen          \-
75 colon           \:
76 slash           \/
77 bcl             \{
78 ecl             \}
79 semi            \;
80 usec            {dot}{digit}{1,6}
81 comment         \#.*
82 qstring         \"[^"]*\"
83 decstring       {digit}+
84 hexpair         {hexdigit}{hexdigit}
85 hexstring       0[xX]{hexdigit}+
86 octetstring     {octet}({dot}{octet})+
87 ipv4addr        {digit}{1,3}({dot}{digit}{1,3}){0,3}
88 ipv6addr        {hexdigit}{0,4}({colon}{hexdigit}{0,4}){2,7}
89 ipaddrmask      {slash}{digit}{1,3}
90 keyword         {letter}{letter}+
91 name            {letter}(({letter}|{digit}|{hyphen})*({letter}|{digit}))*
92 hostname        {name}(({dot}{name})+{dot}?)?
93
94 timeval         {digit}{0,2}
95 days            d{timeval}
96 hours           h{timeval}
97 minutes         m{timeval}
98 seconds         s{timeval}
99
100 mprefix         match_prefix|match-prefix
101 uprefix         use_prefix|use-prefix
102
103 %%
104         /* rrenumd keywords */
105 debug           {
106                         return(DEBUG_CMD);
107                 }
108 dest            {
109                         return(DEST_CMD);
110                 }
111 retry           {
112                         return(RETRY_CMD);
113                 }
114 seqnum          {
115                         return(SEQNUM_CMD);
116                 }
117 add             {
118                         yylval.num = RPM_PCO_ADD;
119                         return(ADD);
120                 }
121 change          {
122                         yylval.num = RPM_PCO_CHANGE;
123                         return(CHANGE);
124                  }
125 setglobal       {
126                         yylval.num = RPM_PCO_SETGLOBAL;
127                         return(SETGLOBAL);
128                 }
129 {mprefix}       {
130                         return(MATCH_PREFIX_CMD);
131                 }
132 maxlen          {
133                         return(MAXLEN_CMD);
134                 }
135 minlen          {
136                         return(MINLEN_CMD);
137                 }
138 {uprefix}       {
139                         return(USE_PREFIX_CMD);
140                 }
141 keeplen         {
142                         return(KEEPLEN_CMD);
143                 }
144
145 vltime          {
146                         return(VLTIME_CMD);
147                 }
148 pltime          {
149                         return(PLTIME_CMD);
150                 }
151 raf_onlink      {
152                         return(RAF_ONLINK_CMD);
153                 }
154 raf_auto        {
155                         return(RAF_AUTO_CMD);
156                 }
157 rrf_decrvalid   {
158                         return(RAF_DECRVALID_CMD);
159                 }
160 rrf_decrprefd   {
161                         return(RAF_DECRPREFD_CMD);
162                 }
163 {days}          {
164                         yytext++;
165                         yylval.num = atoi(yytext);
166                         return(DAYS);
167                 }
168 {hours}         {
169                         yytext++;
170                         yylval.num = atoi(yytext);
171                         return(HOURS);
172                 }
173 {minutes}       {
174                         yytext++;
175                         yylval.num = atoi(yytext);
176                         return(MINUTES);
177                 }
178 {seconds}       {
179                         yytext++;
180                         yylval.num = atoi(yytext);
181                         return(SECONDS);
182                 }
183 infinity        {
184                         return(INFINITY);
185                 }
186
187 on              {
188                         yylval.num = 1;
189                         return(ON);
190                 }
191 off             {
192                         yylval.num = 0;
193                         return(OFF);
194                 }
195
196         /* basic rules */
197 {ws}            ;
198 {nl}            {
199                         lineno++;
200                 }
201 {semi}          {
202                         return EOS;
203                 }
204 {bcl}           {
205                         return BCL;
206                 }
207 {ecl}           {
208                         return ECL;
209                 }
210 {qstring}       {
211                         yylval.cs.cp = yytext;
212                         yylval.cs.len = yyleng;
213                         return QSTRING;
214                 }
215 {decstring}     {
216                         yylval.cs.cp = yytext;
217                         yylval.cs.len = yyleng;
218                         return DECSTRING;
219                 }
220 {name}          {
221                         yylval.cs.cp = yytext;
222                         yylval.cs.len = yyleng;
223                         return NAME;
224                 }
225 {ipv4addr}      {
226                         memset(&yylval.addr4, 0, sizeof(struct in_addr));
227                         if (inet_pton(AF_INET, yytext,
228                                       &yylval.addr4) == 1) {
229                                 return IPV4ADDR;
230                         } else {
231                                 return ERROR;
232                         }
233                 }
234 {ipv6addr}      {
235                         memset(&yylval.addr6, 0, sizeof(struct in6_addr));
236                         if (inet_pton(AF_INET6, yytext,
237                                       &yylval.addr6) == 1) {
238                                 return IPV6ADDR;
239                         } else {
240                                 return ERROR;
241                         }
242                 }
243 {ipaddrmask}    {
244                         yytext++;
245                         yylval.num = atoi(yytext);
246                         return(PREFIXLEN);
247                 }
248 {hostname}      {
249                         yylval.cs.cp = yytext;
250                         yylval.cs.len = yyleng;
251                         return HOSTNAME;
252                 }
253 %%
254
255 int parse(FILE **fp)
256 {
257         extern int yyparse(void);
258
259         yyin = *fp;
260
261         if (yyparse())
262                 return(-1);
263
264         return(0);
265
266 }
267
268 void
269 yyerror(const char *s)
270 {
271         printf("%s: at %s in line %d\n", s, yytext, lineno);
272 }