xref: /netbsd-src/external/gpl3/binutils.old/dist/binutils/arparse.y (revision e992f068c547fd6e84b3f104dc2340adcc955732)
175fd0b74Schristos %{
2ede78133Schristos /* arparse.y - Strange script language parser */
375fd0b74Schristos 
4*e992f068Schristos /* Copyright (C) 1992-2022 Free Software Foundation, Inc.
575fd0b74Schristos 
675fd0b74Schristos    This file is part of GNU Binutils.
775fd0b74Schristos 
875fd0b74Schristos    This program is free software; you can redistribute it and/or modify
975fd0b74Schristos    it under the terms of the GNU General Public License as published by
1075fd0b74Schristos    the Free Software Foundation; either version 3 of the License, or
1175fd0b74Schristos    (at your option) any later version.
1275fd0b74Schristos 
1375fd0b74Schristos    This program is distributed in the hope that it will be useful,
1475fd0b74Schristos    but WITHOUT ANY WARRANTY; without even the implied warranty of
1575fd0b74Schristos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1675fd0b74Schristos    GNU General Public License for more details.
1775fd0b74Schristos 
1875fd0b74Schristos    You should have received a copy of the GNU General Public License
1975fd0b74Schristos    along with this program; if not, write to the Free Software
2075fd0b74Schristos    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
2175fd0b74Schristos    MA 02110-1301, USA.  */
2275fd0b74Schristos 
2375fd0b74Schristos 
2475fd0b74Schristos /* Contributed by Steve Chamberlain
2575fd0b74Schristos    		  sac@cygnus.com
2675fd0b74Schristos 
2775fd0b74Schristos */
2875fd0b74Schristos #define DONTDECLARE_MALLOC
2975fd0b74Schristos #include "sysdep.h"
3075fd0b74Schristos #include "bfd.h"
3175fd0b74Schristos #include "arsup.h"
3275fd0b74Schristos extern int verbose;
3375fd0b74Schristos extern int yylex (void);
34*e992f068Schristos static void yyerror (const char *);
3575fd0b74Schristos %}
3675fd0b74Schristos 
3775fd0b74Schristos %union {
3875fd0b74Schristos   char *name;
3975fd0b74Schristos struct list *list ;
4075fd0b74Schristos 
4175fd0b74Schristos };
4275fd0b74Schristos 
4375fd0b74Schristos %token NEWLINE
4475fd0b74Schristos %token VERBOSE
4575fd0b74Schristos %token <name> FILENAME
4675fd0b74Schristos %token ADDLIB
4775fd0b74Schristos %token LIST
4875fd0b74Schristos %token ADDMOD
4975fd0b74Schristos %token CLEAR
5075fd0b74Schristos %token CREATE
5175fd0b74Schristos %token DELETE
5275fd0b74Schristos %token DIRECTORY
5375fd0b74Schristos %token END
5475fd0b74Schristos %token EXTRACT
5575fd0b74Schristos %token FULLDIR
5675fd0b74Schristos %token HELP
5775fd0b74Schristos %token QUIT
5875fd0b74Schristos %token REPLACE
5975fd0b74Schristos %token SAVE
6075fd0b74Schristos %token OPEN
6175fd0b74Schristos 
6275fd0b74Schristos %type <list> modulelist
6375fd0b74Schristos %type <list> modulename
6475fd0b74Schristos %type <name> optional_filename
6575fd0b74Schristos %%
6675fd0b74Schristos 
6775fd0b74Schristos start:
6875fd0b74Schristos 	{ prompt(); } session
6975fd0b74Schristos 	;
7075fd0b74Schristos 
7175fd0b74Schristos session:
7275fd0b74Schristos 	    session command_line
7375fd0b74Schristos 	|
7475fd0b74Schristos 	;
7575fd0b74Schristos 
7675fd0b74Schristos command_line:
7775fd0b74Schristos 		command NEWLINE { prompt(); }
7875fd0b74Schristos 	;
7975fd0b74Schristos 
8075fd0b74Schristos command:
8175fd0b74Schristos 		open_command
8275fd0b74Schristos 	|	create_command
8375fd0b74Schristos 	| 	verbose_command
8475fd0b74Schristos 	|	directory_command
8575fd0b74Schristos 	|	addlib_command
8675fd0b74Schristos 	|	clear_command
8775fd0b74Schristos 	|	addmod_command
8875fd0b74Schristos 	| 	save_command
8975fd0b74Schristos         |       extract_command
9075fd0b74Schristos 	|	replace_command
9175fd0b74Schristos 	|	delete_command
9275fd0b74Schristos 	|	list_command
9375fd0b74Schristos 	| 	END	 { ar_end(); return 0; }
9475fd0b74Schristos 	| 	error
9575fd0b74Schristos 	|       FILENAME { yyerror("foo"); }
9675fd0b74Schristos 	|
9775fd0b74Schristos 	;
9875fd0b74Schristos 
9975fd0b74Schristos 
10075fd0b74Schristos extract_command:
10175fd0b74Schristos                 EXTRACT modulename
10275fd0b74Schristos 		{ ar_extract($2); }
10375fd0b74Schristos 	;
10475fd0b74Schristos 
10575fd0b74Schristos replace_command:
10675fd0b74Schristos 		REPLACE modulename
10775fd0b74Schristos 		{ ar_replace($2); }
10875fd0b74Schristos 	;
10975fd0b74Schristos 
11075fd0b74Schristos clear_command:
11175fd0b74Schristos 		CLEAR
11275fd0b74Schristos 		{ ar_clear(); }
11375fd0b74Schristos 	;
11475fd0b74Schristos 
11575fd0b74Schristos delete_command:
11675fd0b74Schristos 		DELETE modulename
11775fd0b74Schristos 		{ ar_delete($2); }
11875fd0b74Schristos 	;
11975fd0b74Schristos addmod_command:
12075fd0b74Schristos 	ADDMOD modulename
12175fd0b74Schristos 		{ ar_addmod($2); }
12275fd0b74Schristos 	;
12375fd0b74Schristos 
12475fd0b74Schristos list_command:
12575fd0b74Schristos 		LIST
12675fd0b74Schristos 		{ ar_list(); }
12775fd0b74Schristos 	;
12875fd0b74Schristos 
12975fd0b74Schristos save_command:
13075fd0b74Schristos 		SAVE
13175fd0b74Schristos 		{ ar_save(); }
13275fd0b74Schristos 	;
13375fd0b74Schristos 
13475fd0b74Schristos 
13575fd0b74Schristos 
13675fd0b74Schristos open_command:
13775fd0b74Schristos 		OPEN FILENAME
13875fd0b74Schristos 		{ ar_open($2,0); }
13975fd0b74Schristos 	;
14075fd0b74Schristos 
14175fd0b74Schristos create_command:
14275fd0b74Schristos 		CREATE FILENAME
14375fd0b74Schristos 		{ ar_open($2,1); }
14475fd0b74Schristos 	;
14575fd0b74Schristos 
14675fd0b74Schristos 
14775fd0b74Schristos addlib_command:
14875fd0b74Schristos 		ADDLIB FILENAME modulelist
14975fd0b74Schristos 		{ ar_addlib($2,$3); }
15075fd0b74Schristos 	;
15175fd0b74Schristos directory_command:
15275fd0b74Schristos 		DIRECTORY FILENAME modulelist optional_filename
15375fd0b74Schristos 		{ ar_directory($2, $3, $4); }
15475fd0b74Schristos 	;
15575fd0b74Schristos 
15675fd0b74Schristos 
15775fd0b74Schristos 
15875fd0b74Schristos optional_filename:
15975fd0b74Schristos 		FILENAME
16075fd0b74Schristos 		{ $$ = $1; }
16175fd0b74Schristos 	|	{ $$ = 0; }
16275fd0b74Schristos 	;
16375fd0b74Schristos 
16475fd0b74Schristos modulelist:
16575fd0b74Schristos 	'(' modulename ')'
16675fd0b74Schristos 		{ $$ = $2; }
16775fd0b74Schristos 	|
16875fd0b74Schristos 		{ $$ = 0; }
16975fd0b74Schristos 	;
17075fd0b74Schristos 
17175fd0b74Schristos modulename:
17275fd0b74Schristos 		modulename optcomma FILENAME
17375fd0b74Schristos 		{ 	struct list *n  = (struct list *) malloc(sizeof(struct list));
17475fd0b74Schristos 			n->next = $1;
17575fd0b74Schristos 			n->name = $3;
17675fd0b74Schristos 			$$ = n;
17775fd0b74Schristos 		 }
17875fd0b74Schristos 	|	{ $$ = 0; }
17975fd0b74Schristos 	;
18075fd0b74Schristos 
18175fd0b74Schristos 
18275fd0b74Schristos optcomma:
18375fd0b74Schristos 		','
18475fd0b74Schristos 	|
18575fd0b74Schristos 	;
18675fd0b74Schristos 
18775fd0b74Schristos 
18875fd0b74Schristos verbose_command:
18975fd0b74Schristos 	VERBOSE
19075fd0b74Schristos 		{ verbose = !verbose; }
19175fd0b74Schristos 	;
19275fd0b74Schristos 
19375fd0b74Schristos 
19475fd0b74Schristos %%
19575fd0b74Schristos 
196*e992f068Schristos static void
19775fd0b74Schristos yyerror (const char *x ATTRIBUTE_UNUSED)
19875fd0b74Schristos {
19975fd0b74Schristos   extern int linenumber;
20075fd0b74Schristos 
20175fd0b74Schristos   printf (_("Syntax error in archive script, line %d\n"), linenumber + 1);
20275fd0b74Schristos }
203