fixed bug introduced last time (compare again nvismax/2 not nvismax)
[unix-history] / usr / src / old / htable / parse.y
CommitLineData
10f88819 1%{
528b0614
DF
2/*
3 * Copyright (c) 1983 Regents of the University of California.
4 * All rights reserved. The Berkeley software License Agreement
5 * specifies the terms and conditions for redistribution.
6 */
7
8#ifndef lint
2de3e885 9static char sccsid[] = "@(#)parse.y 5.2 (Berkeley) %G%";
528b0614
DF
10#endif not lint
11
10f88819
SL
12
13#include "htable.h"
14%}
15
16%union {
17 int number;
18 struct addr *addrlist;
19 struct name *namelist;
20}
21%start Table
22
23%token END
24%token <number> NUMBER KEYWORD
25%token <namelist> NAME
26
27%type <namelist> Names Cputype Opsys Protos Proto
28%type <addrlist> Addresses Address
29%%
30Table : Entry
31 | Table Entry
32 ;
33
34Entry : KEYWORD ':' Addresses ':' Names ':' END
35 = {
36 do_entry($1, $3, $5, NONAME, NONAME, NONAME);
37 }
38 | KEYWORD ':' Addresses ':' Names ':' Cputype ':' END
39 = {
40 do_entry($1, $3, $5, $7, NONAME, NONAME);
41 }
42 | KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' END
43 = {
44 do_entry($1, $3, $5, $7, $9, NONAME);
45 }
46 | KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' ':' END
47 = {
48 do_entry($1, $3, $5, $7, $9, NONAME);
49 }
50 | KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' Protos ':' END
51 = {
52 do_entry($1, $3, $5, $7, $9, $11);
53 }
54 | error END
55 | END /* blank line */
56 ;
57
58Addresses: Address
59 = {
60 $$ = $1;
61 }
62 | Address ',' Addresses
63 = {
64 $1->addr_link = $3;
65 $$ = $1;
66 }
67 ;
68
69Address : NUMBER '.' NUMBER '.' NUMBER '.' NUMBER
70 = {
cd08f4dd
SL
71 char *a;
72
73 $$ = (struct addr *)malloc(sizeof (struct addr));
74 a = (char *)&($$->addr_val);
75 a[0] = $1; a[1] = $3; a[2] = $5; a[3] = $7;
10f88819
SL
76 $$->addr_link = NOADDR;
77 }
78 ;
79
80Names : NAME
81 = {
82 $$ = $1;
83 }
84 | NAME ',' Names
85 = {
86 $1->name_link = $3;
87 $$ = $1;
88 }
89 ;
90
91Cputype : /* empty */
92 = {
93 $$ = NONAME;
94 }
95 | NAME
96 = {
97 $$ = $1;
98 }
99 ;
100
101Opsys : /* empty */
102 = {
103 $$ = NONAME;
104 }
105 | NAME
106 = {
107 $$ = $1;
108 }
109 ;
110
111Protos : Proto
112 = {
113 $$ = $1;
114 }
115 | Proto ',' Protos
116 = {
117 $1->name_link = $3;
118 $$ = $1;
119 }
120 ;
121
122Proto : NAME
123 = {
124 $$ = $1;
125 }
126 ;
127%%
128
129#include <stdio.h>
130
131extern int yylineno;
132
133yyerror(msg)
134 char *msg;
135{
136 fprintf(stderr, "\"%s\", line %d: %s\n", infile, yylineno, msg);
137}