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