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