xref: /csrg-svn/old/htable/parse.y (revision 8734)
1*8734Ssam %{
2*8734Ssam #ifndef lint
3*8734Ssam static char sccsid[] = "@(#)parse.y	4.1 (Berkeley) 10/20/82";
4*8734Ssam #endif
5*8734Ssam 
6*8734Ssam #include "htable.h"
7*8734Ssam %}
8*8734Ssam 
9*8734Ssam %union {
10*8734Ssam 	int	number;
11*8734Ssam 	struct	addr *addrlist;
12*8734Ssam 	struct	name *namelist;
13*8734Ssam }
14*8734Ssam %start Table
15*8734Ssam 
16*8734Ssam %token			END
17*8734Ssam %token <number>		NUMBER KEYWORD
18*8734Ssam %token <namelist>	NAME
19*8734Ssam 
20*8734Ssam %type <namelist>	Names Cputype Opsys Protos Proto
21*8734Ssam %type <addrlist>	Addresses Address
22*8734Ssam %%
23*8734Ssam Table	:	Entry
24*8734Ssam 	|	Table Entry
25*8734Ssam 	;
26*8734Ssam 
27*8734Ssam Entry	:	KEYWORD ':' Addresses ':' Names ':' END
28*8734Ssam 	= {
29*8734Ssam 		do_entry($1, $3, $5, NONAME, NONAME, NONAME);
30*8734Ssam 	}
31*8734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' END
32*8734Ssam 	= {
33*8734Ssam 		do_entry($1, $3, $5, $7, NONAME, NONAME);
34*8734Ssam 	}
35*8734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' END
36*8734Ssam 	= {
37*8734Ssam 		do_entry($1, $3, $5, $7, $9, NONAME);
38*8734Ssam 	}
39*8734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' ':' END
40*8734Ssam 	= {
41*8734Ssam 		do_entry($1, $3, $5, $7, $9, NONAME);
42*8734Ssam 	}
43*8734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' Protos ':' END
44*8734Ssam 	= {
45*8734Ssam 		do_entry($1, $3, $5, $7, $9, $11);
46*8734Ssam 	}
47*8734Ssam 	|	error END
48*8734Ssam 	|	END		/* blank line */
49*8734Ssam 	;
50*8734Ssam 
51*8734Ssam Addresses:	Address
52*8734Ssam 	= {
53*8734Ssam 		$$ = $1;
54*8734Ssam 	}
55*8734Ssam 	|	Address ',' Addresses
56*8734Ssam 	= {
57*8734Ssam 		$1->addr_link = $3;
58*8734Ssam 		$$ = $1;
59*8734Ssam 	}
60*8734Ssam 	;
61*8734Ssam 
62*8734Ssam Address	:	NUMBER '.' NUMBER '.' NUMBER '.' NUMBER
63*8734Ssam 	= {
64*8734Ssam 		$$ = alloc_addr();
65*8734Ssam 		$$->addr_val = ($1) | ($3 << 8) | ($5 << 16) | ($7 << 24);
66*8734Ssam 		$$->addr_link = NOADDR;
67*8734Ssam 	}
68*8734Ssam 	;
69*8734Ssam 
70*8734Ssam Names	:	NAME
71*8734Ssam 	= {
72*8734Ssam 		$$ = $1;
73*8734Ssam 	}
74*8734Ssam 	|	NAME ',' Names
75*8734Ssam 	= {
76*8734Ssam 		$1->name_link = $3;
77*8734Ssam 		$$ = $1;
78*8734Ssam 	}
79*8734Ssam 	;
80*8734Ssam 
81*8734Ssam Cputype :	/* empty */
82*8734Ssam 	= {
83*8734Ssam 		$$ = NONAME;
84*8734Ssam 	}
85*8734Ssam 	|	NAME
86*8734Ssam 	= {
87*8734Ssam 		$$ = $1;
88*8734Ssam 	}
89*8734Ssam 	;
90*8734Ssam 
91*8734Ssam Opsys	:	/* empty */
92*8734Ssam 	= {
93*8734Ssam 		$$ = NONAME;
94*8734Ssam 	}
95*8734Ssam 	|	NAME
96*8734Ssam 	= {
97*8734Ssam 		$$ = $1;
98*8734Ssam 	}
99*8734Ssam 	;
100*8734Ssam 
101*8734Ssam Protos	:	Proto
102*8734Ssam 	= {
103*8734Ssam 		$$ = $1;
104*8734Ssam 	}
105*8734Ssam 	|	Proto ',' Protos
106*8734Ssam 	= {
107*8734Ssam 		$1->name_link = $3;
108*8734Ssam 		$$ = $1;
109*8734Ssam 	}
110*8734Ssam 	;
111*8734Ssam 
112*8734Ssam Proto	:	NAME
113*8734Ssam 	= {
114*8734Ssam 		$$ = $1;
115*8734Ssam 	}
116*8734Ssam 	;
117*8734Ssam %%
118*8734Ssam 
119*8734Ssam #include <stdio.h>
120*8734Ssam 
121*8734Ssam extern int yylineno;
122*8734Ssam 
123*8734Ssam yyerror(msg)
124*8734Ssam 	char *msg;
125*8734Ssam {
126*8734Ssam 	fprintf(stderr, "\"%s\", line %d: %s\n", infile, yylineno, msg);
127*8734Ssam }
128