1*2c2f96dcSApple OSS Distributions %{ 2*2c2f96dcSApple OSS Distributions /* 3*2c2f96dcSApple OSS Distributions * Mach Operating System 4*2c2f96dcSApple OSS Distributions * Copyright (c) 1990 Carnegie-Mellon University 5*2c2f96dcSApple OSS Distributions * Copyright (c) 1989 Carnegie-Mellon University 6*2c2f96dcSApple OSS Distributions * Copyright (c) 1988 Carnegie-Mellon University 7*2c2f96dcSApple OSS Distributions * Copyright (c) 1987 Carnegie-Mellon University 8*2c2f96dcSApple OSS Distributions * All rights reserved. The CMU software License Agreement specifies 9*2c2f96dcSApple OSS Distributions * the terms and conditions for use and redistribution. 10*2c2f96dcSApple OSS Distributions */ 11*2c2f96dcSApple OSS Distributions 12*2c2f96dcSApple OSS Distributions /* 13*2c2f96dcSApple OSS Distributions * Copyright (c) 1980 Regents of the University of California. 14*2c2f96dcSApple OSS Distributions * All rights reserved. 15*2c2f96dcSApple OSS Distributions * 16*2c2f96dcSApple OSS Distributions * Redistribution and use in source and binary forms are permitted 17*2c2f96dcSApple OSS Distributions * provided that the above copyright notice and this paragraph are 18*2c2f96dcSApple OSS Distributions * duplicated in all such forms and that any documentation, 19*2c2f96dcSApple OSS Distributions * advertising materials, and other materials related to such 20*2c2f96dcSApple OSS Distributions * distribution and use acknowledge that the software was developed 21*2c2f96dcSApple OSS Distributions * by the University of California, Berkeley. The name of the 22*2c2f96dcSApple OSS Distributions * University may not be used to endorse or promote products derived 23*2c2f96dcSApple OSS Distributions * from this software without specific prior written permission. 24*2c2f96dcSApple OSS Distributions * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 25*2c2f96dcSApple OSS Distributions * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 26*2c2f96dcSApple OSS Distributions * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 27*2c2f96dcSApple OSS Distributions * 28*2c2f96dcSApple OSS Distributions * @(#)config.l 5.5 (Berkeley) 6/18/88 29*2c2f96dcSApple OSS Distributions */ 30*2c2f96dcSApple OSS Distributions 31*2c2f96dcSApple OSS Distributions #include <ctype.h> 32*2c2f96dcSApple OSS Distributions #include "parser.h" 33*2c2f96dcSApple OSS Distributions #include "config.h" 34*2c2f96dcSApple OSS Distributions 35*2c2f96dcSApple OSS Distributions int kw_lookup(char *word); 36*2c2f96dcSApple OSS Distributions int octal(char *str); 37*2c2f96dcSApple OSS Distributions int hex(char *str); 38*2c2f96dcSApple OSS Distributions int yylex(void); 39*2c2f96dcSApple OSS Distributions 40*2c2f96dcSApple OSS Distributions #define tprintf if (do_trace) printf 41*2c2f96dcSApple OSS Distributions 42*2c2f96dcSApple OSS Distributions /* 43*2c2f96dcSApple OSS Distributions * Key word table 44*2c2f96dcSApple OSS Distributions */ 45*2c2f96dcSApple OSS Distributions 46*2c2f96dcSApple OSS Distributions struct kt { 47*2c2f96dcSApple OSS Distributions const char *kt_name; 48*2c2f96dcSApple OSS Distributions int kt_val; 49*2c2f96dcSApple OSS Distributions } key_words[] = { 50*2c2f96dcSApple OSS Distributions { "builddir", BUILDDIR }, 51*2c2f96dcSApple OSS Distributions { "init", INIT }, 52*2c2f96dcSApple OSS Distributions { "machine", MACHINE }, 53*2c2f96dcSApple OSS Distributions { "makeoptions", MAKEOPTIONS }, 54*2c2f96dcSApple OSS Distributions { "makevariables", MAKEOPTIONS }, 55*2c2f96dcSApple OSS Distributions { "objectdir", OBJECTDIR }, 56*2c2f96dcSApple OSS Distributions { "options", OPTIONS }, 57*2c2f96dcSApple OSS Distributions { "pseudo-device",PSEUDO_DEVICE }, 58*2c2f96dcSApple OSS Distributions { "sourcedir", SOURCEDIR }, 59*2c2f96dcSApple OSS Distributions { "trace", TRACE }, 60*2c2f96dcSApple OSS Distributions { 0, 0 }, 61*2c2f96dcSApple OSS Distributions }; 62*2c2f96dcSApple OSS Distributions %} 63*2c2f96dcSApple OSS Distributions 64*2c2f96dcSApple OSS Distributions %option nounput 65*2c2f96dcSApple OSS Distributions 66*2c2f96dcSApple OSS Distributions WORD ([A-Za-z_][-A-Za-z_]*|[A-Z][-A-Za-z_0-9]*) 67*2c2f96dcSApple OSS Distributions WORD1 ([A-Za-z_][-A-Za-z_0-9]*) 68*2c2f96dcSApple OSS Distributions %% 69*2c2f96dcSApple OSS Distributions {WORD} | 70*2c2f96dcSApple OSS Distributions {WORD1} { 71*2c2f96dcSApple OSS Distributions int i; 72*2c2f96dcSApple OSS Distributions 73*2c2f96dcSApple OSS Distributions if ((i = kw_lookup(yytext)) == -1) 74*2c2f96dcSApple OSS Distributions { 75*2c2f96dcSApple OSS Distributions yylval.str = yytext; 76*2c2f96dcSApple OSS Distributions tprintf("id(%s) ", yytext); 77*2c2f96dcSApple OSS Distributions return ID; 78*2c2f96dcSApple OSS Distributions } 79*2c2f96dcSApple OSS Distributions tprintf("(%s) ", yytext); 80*2c2f96dcSApple OSS Distributions return i; 81*2c2f96dcSApple OSS Distributions } 82*2c2f96dcSApple OSS Distributions \"[^"]+\" { 83*2c2f96dcSApple OSS Distributions yytext[strlen(yytext)-1] = '\0'; 84*2c2f96dcSApple OSS Distributions yylval.str = yytext + 1; 85*2c2f96dcSApple OSS Distributions return ID; 86*2c2f96dcSApple OSS Distributions } 87*2c2f96dcSApple OSS Distributions 0[0-7]* { 88*2c2f96dcSApple OSS Distributions yylval.val = octal(yytext); 89*2c2f96dcSApple OSS Distributions tprintf("#O:%o ", yylval.val); 90*2c2f96dcSApple OSS Distributions return NUMBER; 91*2c2f96dcSApple OSS Distributions } 92*2c2f96dcSApple OSS Distributions 0x[0-9a-fA-F]+ { 93*2c2f96dcSApple OSS Distributions yylval.val = hex(yytext); 94*2c2f96dcSApple OSS Distributions tprintf("#X:%x ", yylval.val); 95*2c2f96dcSApple OSS Distributions return NUMBER; 96*2c2f96dcSApple OSS Distributions } 97*2c2f96dcSApple OSS Distributions [1-9][0-9]* { 98*2c2f96dcSApple OSS Distributions yylval.val = atoi(yytext); 99*2c2f96dcSApple OSS Distributions tprintf("#D:%d ", yylval.val); 100*2c2f96dcSApple OSS Distributions return NUMBER; 101*2c2f96dcSApple OSS Distributions } 102*2c2f96dcSApple OSS Distributions "?" { 103*2c2f96dcSApple OSS Distributions yylval.val = -1; 104*2c2f96dcSApple OSS Distributions tprintf("? "); 105*2c2f96dcSApple OSS Distributions return NUMBER; 106*2c2f96dcSApple OSS Distributions } 107*2c2f96dcSApple OSS Distributions \n/[ \t] { 108*2c2f96dcSApple OSS Distributions yyline++; 109*2c2f96dcSApple OSS Distributions tprintf("\n... "); 110*2c2f96dcSApple OSS Distributions } 111*2c2f96dcSApple OSS Distributions \n { 112*2c2f96dcSApple OSS Distributions yyline++; 113*2c2f96dcSApple OSS Distributions tprintf("\n"); 114*2c2f96dcSApple OSS Distributions return SEMICOLON; 115*2c2f96dcSApple OSS Distributions } 116*2c2f96dcSApple OSS Distributions #.* { /* Ignored (comment) */; } 117*2c2f96dcSApple OSS Distributions [ \t]* { /* Ignored (white space) */; } 118*2c2f96dcSApple OSS Distributions ";" { return SEMICOLON; } 119*2c2f96dcSApple OSS Distributions "," { return COMMA; } 120*2c2f96dcSApple OSS Distributions "=" { return EQUALS; } 121*2c2f96dcSApple OSS Distributions . { return yytext[0]; } 122*2c2f96dcSApple OSS Distributions 123*2c2f96dcSApple OSS Distributions 124*2c2f96dcSApple OSS Distributions %% 125*2c2f96dcSApple OSS Distributions /* 126*2c2f96dcSApple OSS Distributions * kw_lookup 127*2c2f96dcSApple OSS Distributions * Look up a string in the keyword table. Returns a -1 if the 128*2c2f96dcSApple OSS Distributions * string is not a keyword otherwise it returns the keyword number 129*2c2f96dcSApple OSS Distributions */ 130*2c2f96dcSApple OSS Distributions 131*2c2f96dcSApple OSS Distributions int 132*2c2f96dcSApple OSS Distributions kw_lookup(char *word) 133*2c2f96dcSApple OSS Distributions { 134*2c2f96dcSApple OSS Distributions register struct kt *kp; 135*2c2f96dcSApple OSS Distributions 136*2c2f96dcSApple OSS Distributions for (kp = key_words; kp->kt_name != 0; kp++) 137*2c2f96dcSApple OSS Distributions if (eq(word, kp->kt_name)) 138*2c2f96dcSApple OSS Distributions return kp->kt_val; 139*2c2f96dcSApple OSS Distributions return -1; 140*2c2f96dcSApple OSS Distributions } 141*2c2f96dcSApple OSS Distributions 142*2c2f96dcSApple OSS Distributions /* 143*2c2f96dcSApple OSS Distributions * Number conversion routines 144*2c2f96dcSApple OSS Distributions */ 145*2c2f96dcSApple OSS Distributions 146*2c2f96dcSApple OSS Distributions int 147*2c2f96dcSApple OSS Distributions octal(char *str) 148*2c2f96dcSApple OSS Distributions { 149*2c2f96dcSApple OSS Distributions int num; 150*2c2f96dcSApple OSS Distributions 151*2c2f96dcSApple OSS Distributions (void) sscanf(str, "%o", &num); 152*2c2f96dcSApple OSS Distributions return num; 153*2c2f96dcSApple OSS Distributions } 154*2c2f96dcSApple OSS Distributions 155*2c2f96dcSApple OSS Distributions int 156*2c2f96dcSApple OSS Distributions hex(char *str) 157*2c2f96dcSApple OSS Distributions { 158*2c2f96dcSApple OSS Distributions int num; 159*2c2f96dcSApple OSS Distributions 160*2c2f96dcSApple OSS Distributions (void) sscanf(str+2, "%x", &num); 161*2c2f96dcSApple OSS Distributions return num; 162*2c2f96dcSApple OSS Distributions } 163*2c2f96dcSApple OSS Distributions 164*2c2f96dcSApple OSS Distributions int 165*2c2f96dcSApple OSS Distributions yywrap() 166*2c2f96dcSApple OSS Distributions { 167*2c2f96dcSApple OSS Distributions return 1; 168*2c2f96dcSApple OSS Distributions } 169