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