aboutsummaryrefslogtreecommitdiff
path: root/binutils/arparse.y
diff options
context:
space:
mode:
authorSteve Chamberlain <sac@cygnus>1992-04-15 21:36:37 +0000
committerSteve Chamberlain <sac@cygnus>1992-04-15 21:36:37 +0000
commitc0cc691258938d3c280b06531b951936b93dc921 (patch)
tree9af53c44f19477b1b442bc080eb12b77ed3f1726 /binutils/arparse.y
parent4a11eef2ebf99f527ee5452386a5f2a099ed6b8b (diff)
downloadgdb-c0cc691258938d3c280b06531b951936b93dc921.zip
gdb-c0cc691258938d3c280b06531b951936b93dc921.tar.gz
gdb-c0cc691258938d3c280b06531b951936b93dc921.tar.bz2
Wed Apr 15 14:33:07 1992 Steve Chamberlain (sac@thepub.cygnus.com)
* arsup.c, arsup.h, arparse.y, arlex.l: support for archive scripting language.
Diffstat (limited to 'binutils/arparse.y')
-rw-r--r--binutils/arparse.y197
1 files changed, 197 insertions, 0 deletions
diff --git a/binutils/arparse.y b/binutils/arparse.y
new file mode 100644
index 0000000..dccdf8e
--- /dev/null
+++ b/binutils/arparse.y
@@ -0,0 +1,197 @@
+%{
+/* arparse.y - Stange script language parser */
+
+/* Copyright (C) 1992 Free Software Foundation, Inc.
+
+This file is part of GNU Binutils.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+
+/* Contributed by Steve Chamberlain
+ sac@cygnus.com
+
+*/
+#define DONTDECLARE_MALLOC
+#include "bfd.h"
+#include <sysdep.h>
+#include "arsup.h"
+extern int interactive;
+extern bfd *inarch;
+extern int verbose;
+void (*command)();
+FILE *listing;
+%}
+
+%union {
+ char *name;
+struct list *list ;
+
+};
+
+%token NEWLINE
+%token VERBOSE
+%token <name> FILENAME
+%token ADDLIB
+%token LIST
+%token ADDMOD
+%token CLEAR
+%token CREATE
+%token DELETE
+%token DIRECTORY
+%token END
+%token EXTRACT
+%token FULLDIR
+%token HELP
+%token QUIT
+%token REPLACE
+%token SAVE
+%token OPEN
+
+%type <list> modulelist
+%type <list> modulename
+%type <name> optional_filename
+%%
+
+start:
+ { prompt(); } session
+ ;
+
+session:
+ session command_line
+ |
+ ;
+
+command_line:
+ command NEWLINE { prompt(); }
+
+command:
+ open_command
+ | create_command
+ | verbose_command
+ | directory_command
+ | addlib_command
+ | clear_command
+ | addmod_command
+ | save_command
+ | replace_command
+ | delete_command
+ | list_command
+ | END { return 0; }
+ | error
+ |
+ ;
+
+
+replace_command:
+ REPLACE modulename
+ { ar_replace($2); }
+ ;
+
+clear_command:
+ CLEAR
+ { ar_clear(); }
+ ;
+
+delete_command:
+ DELETE modulename
+ { ar_delete($2); }
+ ;
+addmod_command:
+ ADDMOD modulename
+ { ar_addmod($2); }
+ ;
+
+list_command:
+ LIST
+ { ar_list(); }
+ ;
+
+save_command:
+ SAVE
+ { ar_save(); }
+ ;
+
+
+
+open_command:
+ OPEN FILENAME
+ { ar_open($2,0); }
+ ;
+
+create_command:
+ CREATE FILENAME
+ { ar_open($2,1); }
+ ;
+
+
+addlib_command:
+ ADDLIB FILENAME modulelist
+ { ar_addlib($2,$3); }
+ ;
+directory_command:
+ DIRECTORY FILENAME modulelist optional_filename
+ { ar_directory($2, $3, $4); }
+ ;
+
+
+
+optional_filename:
+ FILENAME
+ { $$ = $1; }
+ | { $$ = 0; }
+ ;
+
+modulelist:
+ '(' modulename ')'
+ { $$ = $2; }
+ |
+ { $$ = 0; }
+ ;
+
+modulename:
+ modulename optcomma FILENAME
+ { struct list *n = (struct list *) malloc(sizeof(struct list));
+ n->next = $1;
+ n->name = $3;
+ $$ = n;
+ }
+ | { $$ = 0; }
+ ;
+
+
+optcomma:
+ ','
+ |
+ ;
+
+
+verbose_command:
+ VERBOSE
+ { verbose = !verbose; }
+ ;
+
+
+%%
+
+
+int
+yyerror(x)
+char *x;
+{
+ extern int linenumber;
+ printf("Synax error in archive script, line %d\n", linenumber + 1);
+ return 0;
+}