xref: /csrg-svn/old/htable/parse.y (revision 21131)
18734Ssam %{
2*21131Sdist /*
3*21131Sdist  * Copyright (c) 1983 Regents of the University of California.
4*21131Sdist  * All rights reserved.  The Berkeley software License Agreement
5*21131Sdist  * specifies the terms and conditions for redistribution.
6*21131Sdist  */
7*21131Sdist 
88734Ssam #ifndef lint
9*21131Sdist char copyright[] =
10*21131Sdist "@(#) Copyright (c) 1983 Regents of the University of California.\n\
11*21131Sdist  All rights reserved.\n";
12*21131Sdist #endif not lint
138734Ssam 
14*21131Sdist #ifndef lint
15*21131Sdist static char sccsid[] = "@(#)parse.y	5.1 (Berkeley) 05/28/85";
16*21131Sdist #endif not lint
17*21131Sdist 
18*21131Sdist 
198734Ssam #include "htable.h"
208734Ssam %}
218734Ssam 
228734Ssam %union {
238734Ssam 	int	number;
248734Ssam 	struct	addr *addrlist;
258734Ssam 	struct	name *namelist;
268734Ssam }
278734Ssam %start Table
288734Ssam 
298734Ssam %token			END
308734Ssam %token <number>		NUMBER KEYWORD
318734Ssam %token <namelist>	NAME
328734Ssam 
338734Ssam %type <namelist>	Names Cputype Opsys Protos Proto
348734Ssam %type <addrlist>	Addresses Address
358734Ssam %%
368734Ssam Table	:	Entry
378734Ssam 	|	Table Entry
388734Ssam 	;
398734Ssam 
408734Ssam Entry	:	KEYWORD ':' Addresses ':' Names ':' END
418734Ssam 	= {
428734Ssam 		do_entry($1, $3, $5, NONAME, NONAME, NONAME);
438734Ssam 	}
448734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' END
458734Ssam 	= {
468734Ssam 		do_entry($1, $3, $5, $7, NONAME, NONAME);
478734Ssam 	}
488734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' END
498734Ssam 	= {
508734Ssam 		do_entry($1, $3, $5, $7, $9, NONAME);
518734Ssam 	}
528734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' ':' END
538734Ssam 	= {
548734Ssam 		do_entry($1, $3, $5, $7, $9, NONAME);
558734Ssam 	}
568734Ssam 	|	KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' Protos ':' END
578734Ssam 	= {
588734Ssam 		do_entry($1, $3, $5, $7, $9, $11);
598734Ssam 	}
608734Ssam 	|	error END
618734Ssam 	|	END		/* blank line */
628734Ssam 	;
638734Ssam 
648734Ssam Addresses:	Address
658734Ssam 	= {
668734Ssam 		$$ = $1;
678734Ssam 	}
688734Ssam 	|	Address ',' Addresses
698734Ssam 	= {
708734Ssam 		$1->addr_link = $3;
718734Ssam 		$$ = $1;
728734Ssam 	}
738734Ssam 	;
748734Ssam 
758734Ssam Address	:	NUMBER '.' NUMBER '.' NUMBER '.' NUMBER
768734Ssam 	= {
778785Ssam 		char *a;
788785Ssam 
798785Ssam 		$$ = (struct addr *)malloc(sizeof (struct addr));
808785Ssam 		a = (char *)&($$->addr_val);
818785Ssam 		a[0] = $1; a[1] = $3; a[2] = $5; a[3] = $7;
828734Ssam 		$$->addr_link = NOADDR;
838734Ssam 	}
848734Ssam 	;
858734Ssam 
868734Ssam Names	:	NAME
878734Ssam 	= {
888734Ssam 		$$ = $1;
898734Ssam 	}
908734Ssam 	|	NAME ',' Names
918734Ssam 	= {
928734Ssam 		$1->name_link = $3;
938734Ssam 		$$ = $1;
948734Ssam 	}
958734Ssam 	;
968734Ssam 
978734Ssam Cputype :	/* empty */
988734Ssam 	= {
998734Ssam 		$$ = NONAME;
1008734Ssam 	}
1018734Ssam 	|	NAME
1028734Ssam 	= {
1038734Ssam 		$$ = $1;
1048734Ssam 	}
1058734Ssam 	;
1068734Ssam 
1078734Ssam Opsys	:	/* empty */
1088734Ssam 	= {
1098734Ssam 		$$ = NONAME;
1108734Ssam 	}
1118734Ssam 	|	NAME
1128734Ssam 	= {
1138734Ssam 		$$ = $1;
1148734Ssam 	}
1158734Ssam 	;
1168734Ssam 
1178734Ssam Protos	:	Proto
1188734Ssam 	= {
1198734Ssam 		$$ = $1;
1208734Ssam 	}
1218734Ssam 	|	Proto ',' Protos
1228734Ssam 	= {
1238734Ssam 		$1->name_link = $3;
1248734Ssam 		$$ = $1;
1258734Ssam 	}
1268734Ssam 	;
1278734Ssam 
1288734Ssam Proto	:	NAME
1298734Ssam 	= {
1308734Ssam 		$$ = $1;
1318734Ssam 	}
1328734Ssam 	;
1338734Ssam %%
1348734Ssam 
1358734Ssam #include <stdio.h>
1368734Ssam 
1378734Ssam extern int yylineno;
1388734Ssam 
1398734Ssam yyerror(msg)
1408734Ssam 	char *msg;
1418734Ssam {
1428734Ssam 	fprintf(stderr, "\"%s\", line %d: %s\n", infile, yylineno, msg);
1438734Ssam }
144