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