* elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Improve
[binutils.git] / binutils / arparse.y
blobcf0ece1b92a6f44fa68f9528d3fa3fa6c7ef7b4b
1 %{
2 /* arparse.y - Stange script language parser */
4 /* Copyright 1992, 1993, 1995, 1997, 1999 Free Software Foundation, Inc.
6 This file is part of GNU Binutils.
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 2 of the License, or
11 (at your option) any later version.
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.
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
23 /* Contributed by Steve Chamberlain
24 sac@cygnus.com
27 #define DONTDECLARE_MALLOC
28 #include "bfd.h"
29 #include "bucomm.h"
30 #include "arsup.h"
31 extern int verbose;
32 extern int yylex PARAMS ((void));
33 static int yyerror PARAMS ((const char *));
36 %union {
37 char *name;
38 struct list *list ;
42 %token NEWLINE
43 %token VERBOSE
44 %token <name> FILENAME
45 %token ADDLIB
46 %token LIST
47 %token ADDMOD
48 %token CLEAR
49 %token CREATE
50 %token DELETE
51 %token DIRECTORY
52 %token END
53 %token EXTRACT
54 %token FULLDIR
55 %token HELP
56 %token QUIT
57 %token REPLACE
58 %token SAVE
59 %token OPEN
61 %type <list> modulelist
62 %type <list> modulename
63 %type <name> optional_filename
66 start:
67 { prompt(); } session
70 session:
71 session command_line
75 command_line:
76 command NEWLINE { prompt(); }
79 command:
80 open_command
81 | create_command
82 | verbose_command
83 | directory_command
84 | addlib_command
85 | clear_command
86 | addmod_command
87 | save_command
88 | extract_command
89 | replace_command
90 | delete_command
91 | list_command
92 | END { ar_end(); return 0; }
93 | error
94 | FILENAME { yyerror("foo"); }
99 extract_command:
100 EXTRACT modulename
101 { ar_extract($2); }
104 replace_command:
105 REPLACE modulename
106 { ar_replace($2); }
109 clear_command:
110 CLEAR
111 { ar_clear(); }
114 delete_command:
115 DELETE modulename
116 { ar_delete($2); }
118 addmod_command:
119 ADDMOD modulename
120 { ar_addmod($2); }
123 list_command:
124 LIST
125 { ar_list(); }
128 save_command:
129 SAVE
130 { ar_save(); }
135 open_command:
136 OPEN FILENAME
137 { ar_open($2,0); }
140 create_command:
141 CREATE FILENAME
142 { ar_open($2,1); }
146 addlib_command:
147 ADDLIB FILENAME modulelist
148 { ar_addlib($2,$3); }
150 directory_command:
151 DIRECTORY FILENAME modulelist optional_filename
152 { ar_directory($2, $3, $4); }
157 optional_filename:
158 FILENAME
159 { $$ = $1; }
160 | { $$ = 0; }
163 modulelist:
164 '(' modulename ')'
165 { $$ = $2; }
167 { $$ = 0; }
170 modulename:
171 modulename optcomma FILENAME
172 { struct list *n = (struct list *) malloc(sizeof(struct list));
173 n->next = $1;
174 n->name = $3;
175 $$ = n;
177 | { $$ = 0; }
181 optcomma:
187 verbose_command:
188 VERBOSE
189 { verbose = !verbose; }
195 static int
196 yyerror (x)
197 const char *x ATTRIBUTE_UNUSED;
199 extern int linenumber;
201 printf (_("Syntax error in archive script, line %d\n"), linenumber + 1);
202 return 0;