parse.y revision 107665
1105573Simp%{ 2105573Simp/*- 3105573Simp * DEVD (Device action daemon) 4105573Simp * 5105573Simp * Copyright (c) 2002 M. Warner Losh <imp@freebsd.org>. 6105573Simp * All rights reserved. 7105573Simp * 8105573Simp * Redistribution and use in source and binary forms, with or without 9105573Simp * modification, are permitted provided that the following conditions 10105573Simp * are met: 11105573Simp * 1. Redistributions of source code must retain the above copyright 12105573Simp * notice, this list of conditions and the following disclaimer. 13105573Simp * 2. Redistributions in binary form must reproduce the above copyright 14105573Simp * notice, this list of conditions and the following disclaimer in the 15105573Simp * documentation and/or other materials provided with the distribution. 16105573Simp * 17105573Simp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18105573Simp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19105573Simp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20105573Simp * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21105573Simp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22105573Simp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23105573Simp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24105573Simp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25105573Simp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26105573Simp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27105573Simp * SUCH DAMAGE. 28105573Simp * 29105573Simp * $FreeBSD: head/sbin/devd/parse.y 107665 2002-12-07 08:04:36Z imp $ 30105573Simp */ 31105573Simp 32105573Simp#include "devd.h" 33105573Simp#include <stdio.h> 34107665Simp#include <string.h> 35105573Simp 36105573Simp%} 37105573Simp 38105573Simp%union { 39105573Simp char *str; 40105573Simp int i; 41107665Simp struct eps *eps; /* EventProcStatement */ 42107665Simp struct event_proc *eventproc; 43105573Simp} 44105573Simp 45105573Simp%token SEMICOLON BEGINBLOCK ENDBLOCK COMMA 46105573Simp%token <i> NUMBER 47105573Simp%token <str> STRING 48105573Simp%token <str> ID 49105573Simp%token OPTIONS SET DIRECTORY PID_FILE DEVICE_NAME ACTION MATCH 50105573Simp%token ATTACH DETACH NOMATCH 51105573Simp 52107665Simp%type <eventproc> match_or_action_list 53107665Simp%type <eps> match_or_action match action 54105573Simp 55105573Simp%% 56105573Simp 57105573Simpconfig_file 58105573Simp : config_list 59107665Simp | 60105573Simp ; 61105573Simp 62105573Simpconfig_list 63105573Simp : config 64105573Simp | config_list config 65105573Simp ; 66105573Simp 67105573Simpconfig 68105573Simp : option_block 69105573Simp | attach_block 70105573Simp | detach_block 71105573Simp | nomatch_block 72105573Simp ; 73105573Simp 74105573Simpoption_block 75105573Simp : OPTIONS BEGINBLOCK options ENDBLOCK SEMICOLON 76105573Simp ; 77105573Simp 78105573Simpoptions 79105573Simp : option 80105573Simp | options option 81105573Simp 82105573Simpoption 83105573Simp : directory_option 84105573Simp | pid_file_option 85105573Simp | set_option 86105573Simp ; 87105573Simp 88105573Simpdirectory_option 89107665Simp : DIRECTORY STRING SEMICOLON { add_directory($2); } 90105573Simp ; 91105573Simp 92105573Simppid_file_option 93107665Simp : PID_FILE STRING SEMICOLON { set_pidfile($2); } 94105573Simp ; 95105573Simp 96105573Simpset_option 97107665Simp : SET ID STRING SEMICOLON { set_variable($2, $3); } 98105573Simp ; 99105573Simp 100105573Simpattach_block 101107665Simp : ATTACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 102107665Simp { add_attach($2, $4); } 103105573Simp ; 104105573Simp 105105573Simpdetach_block 106107665Simp : DETACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 107107665Simp { add_detach($2, $4); } 108105573Simp ; 109105573Simp 110105573Simpnomatch_block 111107665Simp : NOMATCH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 112107665Simp { add_nomatch($2, $4); } 113105573Simp ; 114105573Simp 115105573Simpmatch_or_action_list 116107665Simp : match_or_action { $$ = add_to_event_proc( NULL, $1); } 117105573Simp | match_or_action_list match_or_action 118107665Simp { $$ = add_to_event_proc($1, $2); } 119105573Simp ; 120105573Simp 121105573Simpmatch_or_action 122105573Simp : match 123105573Simp | action 124105573Simp ; 125105573Simp 126105573Simpmatch 127107665Simp : MATCH STRING STRING SEMICOLON { $$ = new_match($2, $3); } 128107665Simp | DEVICE_NAME STRING SEMICOLON 129107665Simp { $$ = new_match(strdup("device-name"), $2); } 130105573Simp ; 131105573Simp 132105573Simpaction 133107665Simp : ACTION STRING SEMICOLON { $$ = new_action($2); } 134105573Simp ; 135105573Simp 136105573Simp%% 137