Automatic date update in version.in
[deliverable/binutils-gdb.git] / binutils / arparse.y
CommitLineData
252b5132 1%{
a582903f 2/* arparse.y - Strange script language parser */
252b5132 3
b3adc24a 4/* Copyright (C) 1992-2020 Free Software Foundation, Inc.
252b5132 5
32866df7 6 This file is part of GNU Binutils.
252b5132 7
32866df7
NC
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.
252b5132 12
32866df7
NC
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.
252b5132 17
32866df7
NC
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. */
252b5132
RH
22
23
24/* Contributed by Steve Chamberlain
25 sac@cygnus.com
26
27*/
28#define DONTDECLARE_MALLOC
3db64b00 29#include "sysdep.h"
252b5132 30#include "bfd.h"
252b5132
RH
31#include "arsup.h"
32extern int verbose;
2da42df6
AJ
33extern int yylex (void);
34static int yyerror (const char *);
252b5132
RH
35%}
36
37%union {
38 char *name;
39struct 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
3aade688 62%type <list> modulelist
252b5132
RH
63%type <list> modulename
64%type <name> optional_filename
65%%
66
67start:
68 { prompt(); } session
69 ;
70
71session:
72 session command_line
73 |
74 ;
75
76command_line:
77 command NEWLINE { prompt(); }
944cd72c 78 ;
252b5132
RH
79
80command:
3aade688
L
81 open_command
82 | create_command
252b5132
RH
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
100extract_command:
101 EXTRACT modulename
102 { ar_extract($2); }
103 ;
104
3aade688 105replace_command:
252b5132
RH
106 REPLACE modulename
107 { ar_replace($2); }
108 ;
3aade688 109
252b5132
RH
110clear_command:
111 CLEAR
112 { ar_clear(); }
113 ;
114
115delete_command:
116 DELETE modulename
117 { ar_delete($2); }
118 ;
119addmod_command:
120 ADDMOD modulename
121 { ar_addmod($2); }
122 ;
123
3aade688 124list_command:
252b5132
RH
125 LIST
126 { ar_list(); }
127 ;
128
3aade688 129save_command:
252b5132
RH
130 SAVE
131 { ar_save(); }
132 ;
133
134
135
136open_command:
3aade688 137 OPEN FILENAME
252b5132
RH
138 { ar_open($2,0); }
139 ;
140
141create_command:
3aade688 142 CREATE FILENAME
252b5132
RH
143 { ar_open($2,1); }
144 ;
145
146
147addlib_command:
148 ADDLIB FILENAME modulelist
149 { ar_addlib($2,$3); }
150 ;
151directory_command:
152 DIRECTORY FILENAME modulelist optional_filename
153 { ar_directory($2, $3, $4); }
154 ;
155
156
157
158optional_filename:
159 FILENAME
160 { $$ = $1; }
161 | { $$ = 0; }
162 ;
163
164modulelist:
3aade688 165 '(' modulename ')'
252b5132
RH
166 { $$ = $2; }
167 |
168 { $$ = 0; }
169 ;
170
171modulename:
172 modulename optcomma FILENAME
173 { struct list *n = (struct list *) malloc(sizeof(struct list));
3aade688 174 n->next = $1;
252b5132
RH
175 n->name = $3;
176 $$ = n;
177 }
178 | { $$ = 0; }
179 ;
3aade688 180
252b5132
RH
181
182optcomma:
183 ','
184 |
185 ;
3aade688
L
186
187
252b5132 188verbose_command:
3aade688 189 VERBOSE
252b5132
RH
190 { verbose = !verbose; }
191 ;
192
193
194%%
195
196static int
2da42df6 197yyerror (const char *x ATTRIBUTE_UNUSED)
252b5132
RH
198{
199 extern int linenumber;
200
201 printf (_("Syntax error in archive script, line %d\n"), linenumber + 1);
202 return 0;
203}
This page took 0.741396 seconds and 4 git commands to generate.