Automatic date update in version.in
[deliverable/binutils-gdb.git] / binutils / arparse.y
CommitLineData
252b5132
RH
1%{
2/* arparse.y - Stange script language parser */
3
b90efa5b 4/* Copyright (C) 1992-2015 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
62%type <list> modulelist
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:
81 open_command
82 | create_command
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
105replace_command:
106 REPLACE modulename
107 { ar_replace($2); }
108 ;
109
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
124list_command:
125 LIST
126 { ar_list(); }
127 ;
128
129save_command:
130 SAVE
131 { ar_save(); }
132 ;
133
134
135
136open_command:
137 OPEN FILENAME
138 { ar_open($2,0); }
139 ;
140
141create_command:
142 CREATE FILENAME
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:
165 '(' modulename ')'
166 { $$ = $2; }
167 |
168 { $$ = 0; }
169 ;
170
171modulename:
172 modulename optcomma FILENAME
173 { struct list *n = (struct list *) malloc(sizeof(struct list));
174 n->next = $1;
175 n->name = $3;
176 $$ = n;
177 }
178 | { $$ = 0; }
179 ;
180
181
182optcomma:
183 ','
184 |
185 ;
186
187
188verbose_command:
189 VERBOSE
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.581647 seconds and 4 git commands to generate.