xref: /csrg-svn/old/htable/parse.y (revision 8734)
1 %{
2 #ifndef lint
3 static char sccsid[] = "@(#)parse.y	4.1 (Berkeley) 10/20/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 		$$ = alloc_addr();
65 		$$->addr_val = ($1) | ($3 << 8) | ($5 << 16) | ($7 << 24);
66 		$$->addr_link = NOADDR;
67 	}
68 	;
69 
70 Names	:	NAME
71 	= {
72 		$$ = $1;
73 	}
74 	|	NAME ',' Names
75 	= {
76 		$1->name_link = $3;
77 		$$ = $1;
78 	}
79 	;
80 
81 Cputype :	/* empty */
82 	= {
83 		$$ = NONAME;
84 	}
85 	|	NAME
86 	= {
87 		$$ = $1;
88 	}
89 	;
90 
91 Opsys	:	/* empty */
92 	= {
93 		$$ = NONAME;
94 	}
95 	|	NAME
96 	= {
97 		$$ = $1;
98 	}
99 	;
100 
101 Protos	:	Proto
102 	= {
103 		$$ = $1;
104 	}
105 	|	Proto ',' Protos
106 	= {
107 		$1->name_link = $3;
108 		$$ = $1;
109 	}
110 	;
111 
112 Proto	:	NAME
113 	= {
114 		$$ = $1;
115 	}
116 	;
117 %%
118 
119 #include <stdio.h>
120 
121 extern int yylineno;
122 
123 yyerror(msg)
124 	char *msg;
125 {
126 	fprintf(stderr, "\"%s\", line %d: %s\n", infile, yylineno, msg);
127 }
128