xref: /csrg-svn/old/htable/parse.y (revision 8785)
18734Ssam %{
28734Ssam #ifndef lint
3*8785Ssam static char sccsid[] = "@(#)parse.y	4.2 (Berkeley) 10/21/82";
48734Ssam #endif
58734Ssam 
68734Ssam #include "htable.h"
78734Ssam %}
88734Ssam 
98734Ssam %union {
108734Ssam 	int	number;
118734Ssam 	struct	addr *addrlist;
128734Ssam 	struct	name *namelist;
138734Ssam }
148734Ssam %start Table
158734Ssam 
168734Ssam %token			END
178734Ssam %token <number>		NUMBER KEYWORD
188734Ssam %token <namelist>	NAME
198734Ssam 
208734Ssam %type <namelist>	Names Cputype Opsys Protos Proto
218734Ssam %type <addrlist>	Addresses Address
228734Ssam %%
238734Ssam Table	:	Entry
248734Ssam 	|	Table Entry
258734Ssam 	;
268734Ssam 
278734Ssam Entry	:	KEYWORD ':' Addresses ':' Names ':' END
288734Ssam 	= {
298734Ssam 		do_entry($1, $3, $5, NONAME, NONAME, NONAME);
308734Ssam 	}
318734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' END
328734Ssam 	= {
338734Ssam 		do_entry($1, $3, $5, $7, NONAME, NONAME);
348734Ssam 	}
358734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' END
368734Ssam 	= {
378734Ssam 		do_entry($1, $3, $5, $7, $9, NONAME);
388734Ssam 	}
398734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' ':' END
408734Ssam 	= {
418734Ssam 		do_entry($1, $3, $5, $7, $9, NONAME);
428734Ssam 	}
438734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' Protos ':' END
448734Ssam 	= {
458734Ssam 		do_entry($1, $3, $5, $7, $9, $11);
468734Ssam 	}
478734Ssam 	|	error END
488734Ssam 	|	END		/* blank line */
498734Ssam 	;
508734Ssam 
518734Ssam Addresses:	Address
528734Ssam 	= {
538734Ssam 		$$ = $1;
548734Ssam 	}
558734Ssam 	|	Address ',' Addresses
568734Ssam 	= {
578734Ssam 		$1->addr_link = $3;
588734Ssam 		$$ = $1;
598734Ssam 	}
608734Ssam 	;
618734Ssam 
628734Ssam Address	:	NUMBER '.' NUMBER '.' NUMBER '.' NUMBER
638734Ssam 	= {
64*8785Ssam 		char *a;
65*8785Ssam 
66*8785Ssam 		$$ = (struct addr *)malloc(sizeof (struct addr));
67*8785Ssam 		a = (char *)&($$->addr_val);
68*8785Ssam 		a[0] = $1; a[1] = $3; a[2] = $5; a[3] = $7;
698734Ssam 		$$->addr_link = NOADDR;
708734Ssam 	}
718734Ssam 	;
728734Ssam 
738734Ssam Names	:	NAME
748734Ssam 	= {
758734Ssam 		$$ = $1;
768734Ssam 	}
778734Ssam 	|	NAME ',' Names
788734Ssam 	= {
798734Ssam 		$1->name_link = $3;
808734Ssam 		$$ = $1;
818734Ssam 	}
828734Ssam 	;
838734Ssam 
848734Ssam Cputype :	/* empty */
858734Ssam 	= {
868734Ssam 		$$ = NONAME;
878734Ssam 	}
888734Ssam 	|	NAME
898734Ssam 	= {
908734Ssam 		$$ = $1;
918734Ssam 	}
928734Ssam 	;
938734Ssam 
948734Ssam Opsys	:	/* empty */
958734Ssam 	= {
968734Ssam 		$$ = NONAME;
978734Ssam 	}
988734Ssam 	|	NAME
998734Ssam 	= {
1008734Ssam 		$$ = $1;
1018734Ssam 	}
1028734Ssam 	;
1038734Ssam 
1048734Ssam Protos	:	Proto
1058734Ssam 	= {
1068734Ssam 		$$ = $1;
1078734Ssam 	}
1088734Ssam 	|	Proto ',' Protos
1098734Ssam 	= {
1108734Ssam 		$1->name_link = $3;
1118734Ssam 		$$ = $1;
1128734Ssam 	}
1138734Ssam 	;
1148734Ssam 
1158734Ssam Proto	:	NAME
1168734Ssam 	= {
1178734Ssam 		$$ = $1;
1188734Ssam 	}
1198734Ssam 	;
1208734Ssam %%
1218734Ssam 
1228734Ssam #include <stdio.h>
1238734Ssam 
1248734Ssam extern int yylineno;
1258734Ssam 
1268734Ssam yyerror(msg)
1278734Ssam 	char *msg;
1288734Ssam {
1298734Ssam 	fprintf(stderr, "\"%s\", line %d: %s\n", infile, yylineno, msg);
1308734Ssam }
131