xref: /xnu-10063.121.3/SETUP/config/lexer.l (revision 2c2f96dc2b9a4408a43d3150ae9c105355ca3daa)
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