1%{ 2/* 3 * Copyright (c) 1997-2006 Erez Zadok 4 * Copyright (c) 1989 Jan-Simon Pendry 5 * Copyright (c) 1989 Imperial College of Science, Technology & Medicine 6 * Copyright (c) 1989 The Regents of the University of California. 7 * All rights reserved. 8 * 9 * This code is derived from software contributed to Berkeley by 10 * Jan-Simon Pendry at Imperial College, London. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 1. Redistributions of source code must retain the above copyright 16 * notice, this list of conditions and the following disclaimer. 17 * 2. Redistributions in binary form must reproduce the above copyright 18 * notice, this list of conditions and the following disclaimer in the 19 * documentation and/or other materials provided with the distribution. 20 * 3. All advertising materials mentioning features or use of this software 21 * must display the following acknowledgment: 22 * This product includes software developed by the University of 23 * California, Berkeley and its contributors. 24 * 4. Neither the name of the University nor the names of its contributors 25 * may be used to endorse or promote products derived from this software 26 * without specific prior written permission. 27 * 28 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 29 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 30 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 31 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 32 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 38 * SUCH DAMAGE. 39 * 40 * 41 * File: am-utils/amd/conf_tok.l 42 * 43 */ 44 45/* 46 * Lexical analyzer for AMD configuration parser. 47 */ 48 49#ifdef HAVE_CONFIG_H 50# include <config.h> 51#endif /* HAVE_CONFIG_H */ 52/* 53 * Some systems include a definition for the macro ECHO in <sys/ioctl.h>, 54 * and their (bad) version of lex defines it too at the very beginning of 55 * the generated lex.yy.c file (before it can be easily undefined), 56 * resulting in a conflict. So undefine it here before needed. 57 * Luckily, it does not appear that this macro is actually used in the rest 58 * of the generated lex.yy.c file. 59 */ 60#ifdef ECHO 61# undef ECHO 62#endif /* ECHO */ 63#include <am_defs.h> 64#include <amd.h> 65#include <conf_parse.h> 66/* and once again undefine this, just in case */ 67#ifdef ECHO 68# undef ECHO 69#endif /* ECHO */ 70 71/* 72 * There are some things that need to be defined only if using GNU flex. 73 * These must not be defined if using standard lex 74 */ 75#ifdef FLEX_SCANNER 76# ifndef ECHO 77# define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) 78# endif /* not ECHO */ 79#endif /* FLEX_SCANNER */ 80 81int ayylineno = 0; 82 83int yylex(void); 84/* 85 * some systems such as DU-4.x have a different GNU flex in /usr/bin 86 * which automatically generates yywrap macros and symbols. So I must 87 * distinguish between them and when yywrap is actually needed. 88 */ 89#ifndef yywrap 90int yywrap(void); 91#endif /* not yywrap */ 92 93#define TOK_DEBUG 0 94 95#if TOK_DEBUG 96# define dprintf(f,s) fprintf(stderr, (f), ayylineno, (s)) 97# define amu_return(v) 98#else /* not TOK_DEBUG */ 99# define dprintf(f,s) 100# define amu_return(v) return((v)) 101#endif /* not TOK_DEBUG */ 102 103/* no need to use yywrap() */ 104#define YY_SKIP_YYWRAP 105 106%} 107 108/* This option causes Solaris lex to fail. Use flex. See BUGS file */ 109/* no need to use yyunput() */ 110%option nounput 111 112/* allocate more output slots so lex scanners don't run out of mem */ 113%o 1024 114 115DIGIT [0-9] 116ALPHA [A-Za-z] 117ALPHANUM [A-Za-z0-9] 118SYMBOL [A-Za-z0-9_-] 119PATH [A-Za-z0-9_-/] 120NONWSCHAR [^ \t\n\[\]=] 121NONWSEQCHAR [^ \t\n\[\]] 122NONNL [^\n] 123NONQUOTE [^\"] 124 125%% 126 127\n { 128 ayylineno++; 129 amu_return(NEWLINE); 130 } 131 132\[ { 133 dprintf("%8d: Left bracket \"%s\"\n", yytext); 134 yylval.strtype = strdup((char *)yytext); 135 amu_return(LEFT_BRACKET); 136 } 137 138\] { 139 dprintf("%8d: Right bracket \"%s\"\n", yytext); 140 yylval.strtype = strdup((char *)yytext); 141 amu_return(RIGHT_BRACKET); 142 } 143 144= { 145 dprintf("%8d: Equal \"%s\"\n", yytext); 146 yylval.strtype = strdup((char *)yytext); 147 amu_return(EQUAL); 148 } 149 150[ \t]* { 151 dprintf("%8d: Whitespace \"%s\"\n", yytext); 152 } 153"#"[^\n]*\n { 154 /* a comment line includes the terminating \n */ 155 ayylineno++; 156 yytext[strlen((char *)yytext)-1] = '\0'; 157 dprintf("%8d: Comment \"%s\"\n", yytext); 158 } 159 160{NONWSCHAR}{NONWSCHAR}* { 161 dprintf("%8d: Non-WS string \"%s\"\n", yytext); 162 yylval.strtype = strdup((char *)yytext); 163 amu_return(NONWS_STRING); 164 } 165 166\"{NONQUOTE}{NONQUOTE}*\" { 167 dprintf("%8d: QUOTED-Non-WS-EQ string \"%s\"\n", yytext); 168 /* must strip quotes */ 169 yytext[strlen((char *)yytext)-1] = '\0'; 170 yylval.strtype = strdup((char *)&yytext[1]); 171 amu_return(QUOTED_NONWSEQ_STRING); 172 } 173 174{NONWSEQCHAR}{NONWSEQCHAR}* { 175 dprintf("%8d: Non-WS-EQ string \"%s\"\n", yytext); 176 yylval.strtype = strdup((char *)yytext); 177 amu_return(NONWSEQ_STRING); 178 } 179 180%% 181 182/* 183 * some systems such as DU-4.x have a different GNU flex in /usr/bin 184 * which automatically generates yywrap macros and symbols. So I must 185 * distinguish between them and when yywrap is actually needed. 186 */ 187#ifndef yywrap 188int yywrap(void) 189{ 190 return 1; 191} 192#endif /* not yywrap */ 193