|
|
1.1 root 1: %{
2:
3: /*
4: * Copyright (c) 1983 Regents of the University of California.
5: * All rights reserved.
6: *
7: * Redistribution and use in source and binary forms are permitted provided
8: * that: (1) source distributions retain this entire copyright notice and
9: * comment, and (2) distributions including binaries display the following
10: * acknowledgement: ``This product includes software developed by the
11: * University of California, Berkeley and its contributors'' in the
12: * documentation or other materials provided with the distribution and in
13: * all advertising materials mentioning features or use of this software.
14: * Neither the name of the University nor the names of its contributors may
15: * be used to endorse or promote products derived from this software without
16: * specific prior written permission.
17: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20: */
21:
22: #ifndef lint
23: static char sccsid[] = "@(#)parse.y 5.5 (Berkeley) 6/1/90";
24: #endif /* not lint */
25:
26: #include "htable.h"
27: %}
28:
29: %union {
30: int number;
31: struct addr *addrlist;
32: struct name *namelist;
33: }
34: %start Table
35:
36: %token END
37: %token <number> NUMBER KEYWORD
38: %token <namelist> NAME
39:
40: %type <namelist> Names Cputype Opsys Protos Proto
41: %type <addrlist> Addresses Address
42: %%
43: Table : Entry
44: | Table Entry
45: ;
46:
47: Entry : KEYWORD ':' Addresses ':' Names ':' END
48: = {
49: do_entry($1, $3, $5, NONAME, NONAME, NONAME);
50: }
51: | KEYWORD ':' Addresses ':' Names ':' Cputype ':' END
52: = {
53: do_entry($1, $3, $5, $7, NONAME, NONAME);
54: }
55: | KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' END
56: = {
57: do_entry($1, $3, $5, $7, $9, NONAME);
58: }
59: | KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' ':' END
60: = {
61: do_entry($1, $3, $5, $7, $9, NONAME);
62: }
63: | KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' Protos ':' END
64: = {
65: do_entry($1, $3, $5, $7, $9, $11);
66: }
67: | error END
68: | END /* blank line */
69: ;
70:
71: Addresses: Address
72: = {
73: $$ = $1;
74: }
75: | Address ',' Addresses
76: = {
77: $1->addr_link = $3;
78: $$ = $1;
79: }
80: ;
81:
82: Address : NUMBER '.' NUMBER '.' NUMBER '.' NUMBER
83: = {
84: char *a;
85:
86: $$ = (struct addr *)malloc(sizeof (struct addr));
87: a = (char *)&($$->addr_val);
88: a[0] = $1; a[1] = $3; a[2] = $5; a[3] = $7;
89: $$->addr_link = NOADDR;
90: }
91: ;
92:
93: Names : NAME
94: = {
95: $$ = $1;
96: }
97: | NAME ',' Names
98: = {
99: $1->name_link = $3;
100: $$ = $1;
101: }
102: ;
103:
104: Cputype : /* empty */
105: = {
106: $$ = NONAME;
107: }
108: | NAME
109: = {
110: $$ = $1;
111: }
112: ;
113:
114: Opsys : /* empty */
115: = {
116: $$ = NONAME;
117: }
118: | NAME
119: = {
120: $$ = $1;
121: }
122: ;
123:
124: Protos : Proto
125: = {
126: $$ = $1;
127: }
128: | Proto ',' Protos
129: = {
130: $1->name_link = $3;
131: $$ = $1;
132: }
133: ;
134:
135: Proto : NAME
136: = {
137: $$ = $1;
138: }
139: ;
140: %%
141:
142: #include <stdio.h>
143:
144: extern int yylineno;
145:
146: yyerror(msg)
147: char *msg;
148: {
149: fprintf(stderr, "\"%s\", line %d: %s\n", infile, yylineno, msg);
150: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.