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