xref: /csrg-svn/old/htable/parse.y (revision 42798)
18734Ssam %{
234773Sbostic 
321131Sdist /*
421131Sdist  * Copyright (c) 1983 Regents of the University of California.
533537Sbostic  * All rights reserved.
633537Sbostic  *
7*42798Sbostic  * %sccs.include.redist.c%
821131Sdist  */
921131Sdist 
108734Ssam #ifndef lint
11*42798Sbostic static char sccsid[] = "@(#)parse.y	5.5 (Berkeley) 06/01/90";
1233537Sbostic #endif /* not lint */
138734Ssam 
148734Ssam #include "htable.h"
158734Ssam %}
168734Ssam 
178734Ssam %union {
188734Ssam 	int	number;
198734Ssam 	struct	addr *addrlist;
208734Ssam 	struct	name *namelist;
218734Ssam }
228734Ssam %start Table
238734Ssam 
248734Ssam %token			END
258734Ssam %token <number>		NUMBER KEYWORD
268734Ssam %token <namelist>	NAME
278734Ssam 
288734Ssam %type <namelist>	Names Cputype Opsys Protos Proto
298734Ssam %type <addrlist>	Addresses Address
308734Ssam %%
318734Ssam Table	:	Entry
328734Ssam 	|	Table Entry
338734Ssam 	;
348734Ssam 
358734Ssam Entry	:	KEYWORD ':' Addresses ':' Names ':' END
368734Ssam 	= {
378734Ssam 		do_entry($1, $3, $5, NONAME, NONAME, NONAME);
388734Ssam 	}
398734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' END
408734Ssam 	= {
418734Ssam 		do_entry($1, $3, $5, $7, NONAME, NONAME);
428734Ssam 	}
438734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' END
448734Ssam 	= {
458734Ssam 		do_entry($1, $3, $5, $7, $9, NONAME);
468734Ssam 	}
478734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' ':' END
488734Ssam 	= {
498734Ssam 		do_entry($1, $3, $5, $7, $9, NONAME);
508734Ssam 	}
518734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' Protos ':' END
528734Ssam 	= {
538734Ssam 		do_entry($1, $3, $5, $7, $9, $11);
548734Ssam 	}
558734Ssam 	|	error END
568734Ssam 	|	END		/* blank line */
578734Ssam 	;
588734Ssam 
598734Ssam Addresses:	Address
608734Ssam 	= {
618734Ssam 		$$ = $1;
628734Ssam 	}
638734Ssam 	|	Address ',' Addresses
648734Ssam 	= {
658734Ssam 		$1->addr_link = $3;
668734Ssam 		$$ = $1;
678734Ssam 	}
688734Ssam 	;
698734Ssam 
708734Ssam Address	:	NUMBER '.' NUMBER '.' NUMBER '.' NUMBER
718734Ssam 	= {
728785Ssam 		char *a;
738785Ssam 
748785Ssam 		$$ = (struct addr *)malloc(sizeof (struct addr));
758785Ssam 		a = (char *)&($$->addr_val);
768785Ssam 		a[0] = $1; a[1] = $3; a[2] = $5; a[3] = $7;
778734Ssam 		$$->addr_link = NOADDR;
788734Ssam 	}
798734Ssam 	;
808734Ssam 
818734Ssam Names	:	NAME
828734Ssam 	= {
838734Ssam 		$$ = $1;
848734Ssam 	}
858734Ssam 	|	NAME ',' Names
868734Ssam 	= {
878734Ssam 		$1->name_link = $3;
888734Ssam 		$$ = $1;
898734Ssam 	}
908734Ssam 	;
918734Ssam 
928734Ssam Cputype :	/* empty */
938734Ssam 	= {
948734Ssam 		$$ = NONAME;
958734Ssam 	}
968734Ssam 	|	NAME
978734Ssam 	= {
988734Ssam 		$$ = $1;
998734Ssam 	}
1008734Ssam 	;
1018734Ssam 
1028734Ssam Opsys	:	/* empty */
1038734Ssam 	= {
1048734Ssam 		$$ = NONAME;
1058734Ssam 	}
1068734Ssam 	|	NAME
1078734Ssam 	= {
1088734Ssam 		$$ = $1;
1098734Ssam 	}
1108734Ssam 	;
1118734Ssam 
1128734Ssam Protos	:	Proto
1138734Ssam 	= {
1148734Ssam 		$$ = $1;
1158734Ssam 	}
1168734Ssam 	|	Proto ',' Protos
1178734Ssam 	= {
1188734Ssam 		$1->name_link = $3;
1198734Ssam 		$$ = $1;
1208734Ssam 	}
1218734Ssam 	;
1228734Ssam 
1238734Ssam Proto	:	NAME
1248734Ssam 	= {
1258734Ssam 		$$ = $1;
1268734Ssam 	}
1278734Ssam 	;
1288734Ssam %%
1298734Ssam 
1308734Ssam #include <stdio.h>
1318734Ssam 
1328734Ssam extern int yylineno;
1338734Ssam 
yyerror(msg)1348734Ssam yyerror(msg)
1358734Ssam 	char *msg;
1368734Ssam {
1378734Ssam 	fprintf(stderr, "\"%s\", line %d: %s\n", infile, yylineno, msg);
1388734Ssam }
139