|
|
1.1 root 1: %{
2:
3: /*
4: * Copyright (c) 1980 Regents of the University of California.
5: * All rights reserved.
6: *
7: * Redistribution and use in source and binary forms are permitted
8: * provided that the above copyright notice and this paragraph are
9: * duplicated in all such forms and that any documentation,
10: * advertising materials, and other materials related to such
11: * distribution and use acknowledge that the software was developed
12: * by the University of California, Berkeley. The name of the
13: * University may not be used to endorse or promote products derived
14: * from this software without specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: *
19: * @(#)config.l 5.5 (Berkeley) 6/18/88
20: */
21:
22: #include <ctype.h>
23: #include "y.tab.h"
24: #include "config.h"
25:
26: #define tprintf if (do_trace) printf
27:
28: /*
29: * Key word table
30: */
31:
32: struct kt {
33: char *kt_name;
34: int kt_val;
35: } key_words[] = {
36: { "and", AND },
37: { "args", ARGS },
38: { "at", AT },
39: { "config", CONFIG },
40: { "controller", CONTROLLER },
41: { "cpu", CPU },
42: { "csr", CSR },
43: { "device", DEVICE },
44: { "disk", DISK },
45: { "drive", DRIVE },
46: { "dst", DST },
47: { "dumps", DUMPS },
48: { "flags", FLAGS },
49: { "hz", HZ },
50: { "ident", IDENT },
51: { "machine", MACHINE },
52: { "major", MAJOR },
53: { "makeoptions", MAKEOPTIONS },
54: { "master", MASTER },
55: { "maxusers", MAXUSERS },
56: { "minor", MINOR },
57: { "nexus", NEXUS },
58: { "on", ON },
59: { "options", OPTIONS },
60: { "priority", PRIORITY },
61: { "pseudo-device",PSEUDO_DEVICE },
62: { "root", ROOT },
63: { "size", SIZE },
64: { "slave", SLAVE },
65: { "swap", SWAP },
66: { "tape", DEVICE },
67: { "timezone", TIMEZONE },
68: { "trace", TRACE },
69: { "vector", VECTOR },
70: { 0, 0 },
71: };
72: %}
73: WORD [A-Za-z_][-A-Za-z_]*
74: %%
75: {WORD} {
76: int i;
77:
78: if ((i = kw_lookup(yytext)) == -1)
79: {
80: yylval.str = yytext;
81: tprintf("id(%s) ", yytext);
82: return ID;
83: }
84: tprintf("(%s) ", yytext);
85: return i;
86: }
87: \"[^"]+\" {
88: yytext[strlen(yytext)-1] = '\0';
89: yylval.str = yytext + 1;
90: return ID;
91: }
92: 0[0-7]* {
93: yylval.val = octal(yytext);
94: tprintf("#O:%o ", yylval.val);
95: return NUMBER;
96: }
97: 0x[0-9a-fA-F]+ {
98: yylval.val = hex(yytext);
99: tprintf("#X:%x ", yylval.val);
100: return NUMBER;
101: }
102: [1-9][0-9]* {
103: yylval.val = atoi(yytext);
104: tprintf("#D:%d ", yylval.val);
105: return NUMBER;
106: }
107: [0-9]"."[0-9]* {
108: double atof();
109: yylval.val = (int) (60 * atof(yytext) + 0.5);
110: return FPNUMBER;
111: }
112: "-" {
113: return MINUS;
114: }
115: "?" {
116: yylval.val = -1;
117: tprintf("? ");
118: return NUMBER;
119: }
120: \n/[ \t] {
121: yyline++;
122: tprintf("\n... ");
123: }
124: \n {
125: yyline++;
126: tprintf("\n");
127: return SEMICOLON;
128: }
129: #.* { /* Ignored (comment) */; }
130: [ \t]* { /* Ignored (white space) */; }
131: ";" { return SEMICOLON; }
132: "," { return COMMA; }
133: "=" { return EQUALS; }
134: "@" { return AT; }
135: . { return yytext[0]; }
136:
137: %%
138: /*
139: * kw_lookup
140: * Look up a string in the keyword table. Returns a -1 if the
141: * string is not a keyword otherwise it returns the keyword number
142: */
143:
144: kw_lookup(word)
145: register char *word;
146: {
147: register struct kt *kp;
148:
149: for (kp = key_words; kp->kt_name != 0; kp++)
150: if (eq(word, kp->kt_name))
151: return kp->kt_val;
152: return -1;
153: }
154:
155: /*
156: * Number conversion routines
157: */
158:
159: octal(str)
160: char *str;
161: {
162: int num;
163:
164: (void) sscanf(str, "%o", &num);
165: return num;
166: }
167:
168: hex(str)
169: char *str;
170: {
171: int num;
172:
173: (void) sscanf(str+2, "%x", &num);
174: return num;
175: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.