xref: /freebsd/sbin/devd/parse.y (revision 3047fefe49f57a673de8df152c199de12ec2c6d3)
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$
30  */
31 
32 #include "devd.h"
33 #include <stdio.h>
34 
35 %}
36 
37 %union {
38 	char *str;
39 	int i;
40 }
41 
42 %token SEMICOLON BEGINBLOCK ENDBLOCK COMMA
43 %token <i> NUMBER
44 %token <str> STRING
45 %token <str> ID
46 %token OPTIONS SET DIRECTORY PID_FILE DEVICE_NAME ACTION MATCH
47 %token ATTACH DETACH NOMATCH
48 
49 %type <str> id
50 %type <i> number
51 %type <str> string
52 
53 %%
54 
55 config_file
56 	: config_list
57 	;
58 
59 config_list
60 	: config
61 	| config_list config
62 	;
63 
64 config
65 	: option_block
66 	| attach_block
67 	| detach_block
68 	| nomatch_block
69 	;
70 
71 option_block
72 	: OPTIONS BEGINBLOCK options ENDBLOCK SEMICOLON
73 	;
74 
75 options
76 	: option
77 	| options option
78 
79 option
80 	: directory_option
81 	| pid_file_option
82 	| set_option
83 	;
84 
85 directory_option
86 	: DIRECTORY string SEMICOLON { add_directory($2); }
87 	;
88 
89 pid_file_option
90 	: PID_FILE string SEMICOLON
91 	;
92 
93 set_option
94 	: SET id string SEMICOLON
95 	;
96 
97 attach_block
98 	: ATTACH number BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
99 	;
100 
101 detach_block
102 	: DETACH number BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
103 	;
104 
105 nomatch_block
106 	: NOMATCH number BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON
107 	;
108 
109 match_or_action_list
110 	: match_or_action
111 	| match_or_action_list match_or_action
112 	;
113 
114 match_or_action
115 	: match
116 	| action
117 	;
118 
119 match
120 	: MATCH string string SEMICOLON
121 	| DEVICE_NAME string SEMICOLON
122 	;
123 
124 action
125 	: ACTION string SEMICOLON
126 	;
127 
128 number
129 	: NUMBER	{ $$ = $1; }
130 
131 string
132 	: STRING	{ $$ = $1; }
133 
134 id
135 	: ID		{ $$ = $1; }
136 
137 %%
138