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