Annotation of src/external/gpl3/binutils/dist/binutils/arparse.y, Revision 1.1.1.4
1.1 skrll 1: %{
2: /* arparse.y - Stange script language parser */
3:
1.1.1.4 ! christos 4: /* Copyright (C) 1992-2016 Free Software Foundation, Inc.
1.1 skrll 5:
6: This file is part of GNU Binutils.
7:
8: This program is free software; you can redistribute it and/or modify
9: it under the terms of the GNU General Public License as published by
10: the Free Software Foundation; either version 3 of the License, or
11: (at your option) any later version.
12:
13: This program is distributed in the hope that it will be useful,
14: but WITHOUT ANY WARRANTY; without even the implied warranty of
15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16: GNU General Public License for more details.
17:
18: You should have received a copy of the GNU General Public License
19: along with this program; if not, write to the Free Software
20: Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21: MA 02110-1301, USA. */
22:
23:
24: /* Contributed by Steve Chamberlain
25: sac@cygnus.com
26:
27: */
28: #define DONTDECLARE_MALLOC
29: #include "sysdep.h"
30: #include "bfd.h"
31: #include "arsup.h"
32: extern int verbose;
33: extern int yylex (void);
34: static int yyerror (const char *);
35: %}
36:
37: %union {
38: char *name;
39: struct list *list ;
40:
41: };
42:
43: %token NEWLINE
44: %token VERBOSE
45: %token <name> FILENAME
46: %token ADDLIB
47: %token LIST
48: %token ADDMOD
49: %token CLEAR
50: %token CREATE
51: %token DELETE
52: %token DIRECTORY
53: %token END
54: %token EXTRACT
55: %token FULLDIR
56: %token HELP
57: %token QUIT
58: %token REPLACE
59: %token SAVE
60: %token OPEN
61:
1.1.1.3 christos 62: %type <list> modulelist
1.1 skrll 63: %type <list> modulename
64: %type <name> optional_filename
65: %%
66:
67: start:
68: { prompt(); } session
69: ;
70:
71: session:
72: session command_line
73: |
74: ;
75:
76: command_line:
77: command NEWLINE { prompt(); }
78: ;
79:
80: command:
1.1.1.3 christos 81: open_command
82: | create_command
1.1 skrll 83: | verbose_command
84: | directory_command
85: | addlib_command
86: | clear_command
87: | addmod_command
88: | save_command
89: | extract_command
90: | replace_command
91: | delete_command
92: | list_command
93: | END { ar_end(); return 0; }
94: | error
95: | FILENAME { yyerror("foo"); }
96: |
97: ;
98:
99:
100: extract_command:
101: EXTRACT modulename
102: { ar_extract($2); }
103: ;
104:
1.1.1.3 christos 105: replace_command:
1.1 skrll 106: REPLACE modulename
107: { ar_replace($2); }
108: ;
1.1.1.3 christos 109:
1.1 skrll 110: clear_command:
111: CLEAR
112: { ar_clear(); }
113: ;
114:
115: delete_command:
116: DELETE modulename
117: { ar_delete($2); }
118: ;
119: addmod_command:
120: ADDMOD modulename
121: { ar_addmod($2); }
122: ;
123:
1.1.1.3 christos 124: list_command:
1.1 skrll 125: LIST
126: { ar_list(); }
127: ;
128:
1.1.1.3 christos 129: save_command:
1.1 skrll 130: SAVE
131: { ar_save(); }
132: ;
133:
134:
135:
136: open_command:
1.1.1.3 christos 137: OPEN FILENAME
1.1 skrll 138: { ar_open($2,0); }
139: ;
140:
141: create_command:
1.1.1.3 christos 142: CREATE FILENAME
1.1 skrll 143: { ar_open($2,1); }
144: ;
145:
146:
147: addlib_command:
148: ADDLIB FILENAME modulelist
149: { ar_addlib($2,$3); }
150: ;
151: directory_command:
152: DIRECTORY FILENAME modulelist optional_filename
153: { ar_directory($2, $3, $4); }
154: ;
155:
156:
157:
158: optional_filename:
159: FILENAME
160: { $$ = $1; }
161: | { $$ = 0; }
162: ;
163:
164: modulelist:
1.1.1.3 christos 165: '(' modulename ')'
1.1 skrll 166: { $$ = $2; }
167: |
168: { $$ = 0; }
169: ;
170:
171: modulename:
172: modulename optcomma FILENAME
173: { struct list *n = (struct list *) malloc(sizeof(struct list));
1.1.1.3 christos 174: n->next = $1;
1.1 skrll 175: n->name = $3;
176: $$ = n;
177: }
178: | { $$ = 0; }
179: ;
1.1.1.3 christos 180:
1.1 skrll 181:
182: optcomma:
183: ','
184: |
185: ;
1.1.1.3 christos 186:
187:
1.1 skrll 188: verbose_command:
1.1.1.3 christos 189: VERBOSE
1.1 skrll 190: { verbose = !verbose; }
191: ;
192:
193:
194: %%
195:
196: static int
197: yyerror (const char *x ATTRIBUTE_UNUSED)
198: {
199: extern int linenumber;
200:
201: printf (_("Syntax error in archive script, line %d\n"), linenumber + 1);
202: return 0;
203: }
CVSweb <webmaster@jp.NetBSD.org>