conf_parse.y revision 51292
1/* 2 * Copyright (c) 1997-1999 Erez Zadok 3 * Copyright (c) 1989 Jan-Simon Pendry 4 * Copyright (c) 1989 Imperial College of Science, Technology & Medicine 5 * Copyright (c) 1989 The Regents of the University of California. 6 * All rights reserved. 7 * 8 * This code is derived from software contributed to Berkeley by 9 * Jan-Simon Pendry at Imperial College, London. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. All advertising materials mentioning features or use of this software 20 * must display the following acknowledgment: 21 * This product includes software developed by the University of 22 * California, Berkeley and its contributors. 23 * 4. Neither the name of the University nor the names of its contributors 24 * may be used to endorse or promote products derived from this software 25 * without specific prior written permission. 26 * 27 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 28 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 31 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37 * SUCH DAMAGE. 38 * 39 * %W% (Berkeley) %G% 40 * 41 * $Id: conf_parse.y,v 1.3 1999/04/16 14:20:59 ezk Exp $ 42 * 43 */ 44 45%{ 46#ifdef HAVE_CONFIG_H 47# include <config.h> 48#endif /* HAVE_CONFIG_H */ 49#include <am_defs.h> 50#include <amd.h> 51 52/* AIX requires this to be the first thing in the file. */ 53#ifndef __GNUC__ 54# if HAVE_ALLOCA_H 55# include <alloca.h> 56# else /* not HAVE_ALLOCA_H */ 57# ifdef _AIX 58#pragma alloca 59# else /* not _AIX */ 60# ifndef alloca 61 /* predefined by HP cc +Olibcalls */ 62voidp alloca(); 63# endif /* not alloca */ 64# endif /* not _AIX */ 65# endif /* not HAVE_ALLOCA_H */ 66#endif /* not __GNUC__ */ 67 68extern char *yytext; 69extern int yylineno; 70extern int yylex(void); 71 72static int yyerror(const char *s); 73static int retval; 74static char *header_section = NULL; /* start with no header section */ 75 76#define YYDEBUG 1 77 78#define PARSE_DEBUG 0 79 80#if PARSE_DEBUG 81# define dprintf(f,s) fprintf(stderr, (f), yylineno, (s)) 82# define amu_return(v) 83#else 84# define dprintf(f,s) 85# define amu_return(v) return((v)) 86#endif /* PARSE_DEBUG */ 87 88%} 89 90%union { 91char *strtype; 92} 93 94%token LEFT_BRACKET RIGHT_BRACKET EQUAL 95%token NEWLINE 96%token <strtype> NONWS_STRING 97%token <strtype> NONWSEQ_STRING 98%token <strtype> QUOTED_NONWSEQ_STRING 99 100%start file 101%% 102 103/****************************************************************************/ 104file : { yydebug = PARSE_DEBUG; } newlines map_sections 105 | { yydebug = PARSE_DEBUG; } map_sections 106 ; 107 108newlines : NEWLINE 109 | NEWLINE newlines 110 ; 111 112map_sections : map_section 113 | map_section map_sections 114 ; 115 116map_section : sec_header kv_pairs 117 ; 118 119sec_header : LEFT_BRACKET NONWS_STRING RIGHT_BRACKET NEWLINE 120 { 121 if (yydebug) 122 fprintf(stderr, "sec_header1 = \"%s\"\n", $2); 123 header_section = $2; 124 } 125 ; 126 127kv_pairs : kv_pair 128 | kv_pair kv_pairs 129 ; 130 131kv_pair : NONWS_STRING EQUAL NONWS_STRING NEWLINE 132 { 133 if (yydebug) 134 fprintf(stderr,"parse1: key=\"%s\", val=\"%s\"\n", $1, $3); 135 retval = set_conf_kv(header_section, $1, $3); 136 if (retval != 0) { 137 yyerror("syntax error"); 138 YYABORT; 139 } 140 } 141 | NONWS_STRING EQUAL NONWSEQ_STRING NEWLINE 142 { 143 if (yydebug) 144 fprintf(stderr,"parse2: key=\"%s\", val=\"%s\"\n", $1, $3); 145 retval = set_conf_kv(header_section, $1, $3); 146 if (retval != 0) { 147 yyerror("syntax error"); 148 YYABORT; 149 } 150 } 151 | NONWS_STRING EQUAL QUOTED_NONWSEQ_STRING NEWLINE 152 { 153 if (yydebug) 154 fprintf(stderr,"parse3: key=\"%s\", val=\"%s\"\n", $1, $3); 155 retval = set_conf_kv(header_section, $1, $3); 156 if (retval != 0) { 157 yyerror("syntax error"); 158 YYABORT; 159 } 160 } 161 | NEWLINE 162 ; 163 164/****************************************************************************/ 165%% 166 167static int 168yyerror(const char *s) 169{ 170 fprintf(stderr, "AMDCONF: %s on line %d (section %s)\n", 171 s, yylineno, 172 (header_section ? header_section : "null")); 173 exit(1); 174 return 1; /* to full compilers that insist on a return statement */ 175} 176