Deleted Added
full compact
parse.y (147874) parse.y (235789)
1%{
2/*-
3 * DEVD (Device action daemon)
4 *
5 * Copyright (c) 2002 M. Warner Losh <imp@freebsd.org>.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
1%{
2/*-
3 * DEVD (Device action daemon)
4 *
5 * Copyright (c) 2002 M. Warner Losh <imp@freebsd.org>.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * $FreeBSD: head/sbin/devd/parse.y 147874 2005-07-10 03:37:15Z imp $
29 * $FreeBSD: head/sbin/devd/parse.y 235789 2012-05-22 16:33:10Z bapt $
30 */
31
30 */
31
32#include <sys/cdefs.h>
32#include "devd.h"
33#include <stdio.h>
34#include <string.h>
35
36%}
37
38%union {
39 char *str;
40 int i;
41 struct eps *eps; /* EventProcStatement */
42 struct event_proc *eventproc;
43}
44
45%token SEMICOLON BEGINBLOCK ENDBLOCK COMMA
46%token <i> NUMBER
47%token <str> STRING
48%token <str> ID
49%token OPTIONS SET DIRECTORY PID_FILE DEVICE_NAME ACTION MATCH
50%token ATTACH DETACH NOMATCH NOTIFY MEDIA_TYPE CLASS SUBDEVICE
51
52%type <eventproc> match_or_action_list
53%type <eps> match_or_action match action
54
55%%
56
57config_file
58 : config_list
59 |
60 ;
61
62config_list
63 : config
64 | config_list config
65 ;
66
67config
68 : option_block
69 | attach_block
70 | detach_block
71 | nomatch_block
72 | notify_block
73 ;
74
75option_block
76 : OPTIONS BEGINBLOCK options ENDBLOCK SEMICOLON
77 ;
78
79options
80 : option
81 | options option
82
83option
84 : directory_option
85 | pid_file_option
86 | set_option
87 ;
88
89directory_option
90 : DIRECTORY STRING SEMICOLON { add_directory($2); }
91 ;
92
93pid_file_option
94 : PID_FILE STRING SEMICOLON { set_pidfile($2); }
95 ;
96
97set_option
98 : SET ID STRING SEMICOLON { set_variable($2, $3); }
99 ;
100
101attach_block
102 : ATTACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
103 { add_attach($2, $4); }
104 | ATTACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON
105 ;
106
107detach_block
108 : DETACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
109 { add_detach($2, $4); }
110 | DETACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON
111 ;
112
113nomatch_block
114 : NOMATCH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
115 { add_nomatch($2, $4); }
116 | NOMATCH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON
117 ;
118
119notify_block
120 : NOTIFY NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
121 { add_notify($2, $4); }
122 | NOTIFY NUMBER BEGINBLOCK ENDBLOCK SEMICOLON
123 ;
124
125match_or_action_list
126 : match_or_action { $$ = add_to_event_proc( NULL, $1); }
127 | match_or_action_list match_or_action
128 { $$ = add_to_event_proc($1, $2); }
129 ;
130
131match_or_action
132 : match
133 | action
134 ;
135
136match
137 : MATCH STRING STRING SEMICOLON { $$ = new_match($2, $3); }
138 | DEVICE_NAME STRING SEMICOLON
139 { $$ = new_match(strdup("device-name"), $2); }
140 | MEDIA_TYPE STRING SEMICOLON
141 { $$ = new_media(strdup("media-type"), $2); }
142 | CLASS STRING SEMICOLON
143 { $$ = new_match(strdup("class"), $2); }
144 | SUBDEVICE STRING SEMICOLON
145 { $$ = new_match(strdup("subdevice"), $2); }
146 ;
147
148action
149 : ACTION STRING SEMICOLON { $$ = new_action($2); }
150 ;
151
152%%
33#include "devd.h"
34#include <stdio.h>
35#include <string.h>
36
37%}
38
39%union {
40 char *str;
41 int i;
42 struct eps *eps; /* EventProcStatement */
43 struct event_proc *eventproc;
44}
45
46%token SEMICOLON BEGINBLOCK ENDBLOCK COMMA
47%token <i> NUMBER
48%token <str> STRING
49%token <str> ID
50%token OPTIONS SET DIRECTORY PID_FILE DEVICE_NAME ACTION MATCH
51%token ATTACH DETACH NOMATCH NOTIFY MEDIA_TYPE CLASS SUBDEVICE
52
53%type <eventproc> match_or_action_list
54%type <eps> match_or_action match action
55
56%%
57
58config_file
59 : config_list
60 |
61 ;
62
63config_list
64 : config
65 | config_list config
66 ;
67
68config
69 : option_block
70 | attach_block
71 | detach_block
72 | nomatch_block
73 | notify_block
74 ;
75
76option_block
77 : OPTIONS BEGINBLOCK options ENDBLOCK SEMICOLON
78 ;
79
80options
81 : option
82 | options option
83
84option
85 : directory_option
86 | pid_file_option
87 | set_option
88 ;
89
90directory_option
91 : DIRECTORY STRING SEMICOLON { add_directory($2); }
92 ;
93
94pid_file_option
95 : PID_FILE STRING SEMICOLON { set_pidfile($2); }
96 ;
97
98set_option
99 : SET ID STRING SEMICOLON { set_variable($2, $3); }
100 ;
101
102attach_block
103 : ATTACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
104 { add_attach($2, $4); }
105 | ATTACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON
106 ;
107
108detach_block
109 : DETACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
110 { add_detach($2, $4); }
111 | DETACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON
112 ;
113
114nomatch_block
115 : NOMATCH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
116 { add_nomatch($2, $4); }
117 | NOMATCH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON
118 ;
119
120notify_block
121 : NOTIFY NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
122 { add_notify($2, $4); }
123 | NOTIFY NUMBER BEGINBLOCK ENDBLOCK SEMICOLON
124 ;
125
126match_or_action_list
127 : match_or_action { $$ = add_to_event_proc( NULL, $1); }
128 | match_or_action_list match_or_action
129 { $$ = add_to_event_proc($1, $2); }
130 ;
131
132match_or_action
133 : match
134 | action
135 ;
136
137match
138 : MATCH STRING STRING SEMICOLON { $$ = new_match($2, $3); }
139 | DEVICE_NAME STRING SEMICOLON
140 { $$ = new_match(strdup("device-name"), $2); }
141 | MEDIA_TYPE STRING SEMICOLON
142 { $$ = new_media(strdup("media-type"), $2); }
143 | CLASS STRING SEMICOLON
144 { $$ = new_match(strdup("class"), $2); }
145 | SUBDEVICE STRING SEMICOLON
146 { $$ = new_match(strdup("subdevice"), $2); }
147 ;
148
149action
150 : ACTION STRING SEMICOLON { $$ = new_action($2); }
151 ;
152
153%%