
1: %{ 2: /* arparse.y - Stange script language parser */ 3: 4: /* Copyright 1992, 1993, 1995, 1997, 1999, 2002, 2003, 2007 5: Free Software Foundation, Inc. 6: 7: This file is part of GNU Binutils. 8: 9: This program is free software; you can redistribute it and/or modify 10: it under the terms of the GNU General Public License as published by 11: the Free Software Foundation; either version 3 of the License, or 12: (at your option) any later version. 13: 14: This program is distributed in the hope that it will be useful, 15: but WITHOUT ANY WARRANTY; without even the implied warranty of 16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17: GNU General Public License for more details. 18: 19: You should have received a copy of the GNU General Public License 20: along with this program; if not, write to the Free Software 21: Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 22: MA 02110-1301, USA. */ 23: 24: 25: /* Contributed by Steve Chamberlain 26: sac@cygnus.com 27: 28: */ 29: #define DONTDECLARE_MALLOC 30: #include "sysdep.h" 31: #include "bfd.h" 32: #include "arsup.h" 33: extern int verbose; 34: extern int yylex (void); 35: static int yyerror (const char *); 36: %} 37: 38: %union { 39: char *name; 40: struct list *list ; 41: 42: }; 43: 44: %token NEWLINE 45: %token VERBOSE 46: %token <name> FILENAME 47: %token ADDLIB 48: %token LIST 49: %token ADDMOD 50: %token CLEAR 51: %token CREATE 52: %token DELETE 53: %token DIRECTORY 54: %token END 55: %token EXTRACT 56: %token FULLDIR 57: %token HELP 58: %token QUIT 59: %token REPLACE 60: %token SAVE 61: %token OPEN 62: 63: %type <list> modulelist 64: %type <list> modulename 65: %type <name> optional_filename 66: %% 67: 68: start: 69: { prompt(); } session 70: ; 71: 72: session: 73: session command_line 74: | 75: ; 76: 77: command_line: 78: command NEWLINE { prompt(); } 79: ; 80: 81: command: 82: open_command 83: | create_command 84: | verbose_command 85: | directory_command 86: | addlib_command 87: | clear_command 88: | addmod_command 89: | save_command 90: | extract_command 91: | replace_command 92: | delete_command 93: | list_command 94: | END { ar_end(); return 0; } 95: | error 96: | FILENAME { yyerror("foo"); } 97: | 98: ; 99: 100: 101: extract_command: 102: EXTRACT modulename 103: { ar_extract($2); } 104: ; 105: 106: replace_command: 107: REPLACE modulename 108: { ar_replace($2); } 109: ; 110: 111: clear_command: 112: CLEAR 113: { ar_clear(); } 114: ; 115: 116: delete_command: 117: DELETE modulename 118: { ar_delete($2); } 119: ; 120: addmod_command: 121: ADDMOD modulename 122: { ar_addmod($2); } 123: ; 124: 125: list_command: 126: LIST 127: { ar_list(); } 128: ; 129: 130: save_command: 131: SAVE 132: { ar_save(); } 133: ; 134: 135: 136: 137: open_command: 138: OPEN FILENAME 139: { ar_open($2,0); } 140: ; 141: 142: create_command: 143: CREATE FILENAME 144: { ar_open($2,1); } 145: ; 146: 147: 148: addlib_command: 149: ADDLIB FILENAME modulelist 150: { ar_addlib($2,$3); } 151: ; 152: directory_command: 153: DIRECTORY FILENAME modulelist optional_filename 154: { ar_directory($2, $3, $4); } 155: ; 156: 157: 158: 159: optional_filename: 160: FILENAME 161: { $$ = $1; } 162: | { $$ = 0; } 163: ; 164: 165: modulelist: 166: '(' modulename ')' 167: { $$ = $2; } 168: | 169: { $$ = 0; } 170: ; 171: 172: modulename: 173: modulename optcomma FILENAME 174: { struct list *n = (struct list *) malloc(sizeof(struct list)); 175: n->next = $1; 176: n->name = $3; 177: $$ = n; 178: } 179: | { $$ = 0; } 180: ; 181: 182: 183: optcomma: 184: ',' 185: | 186: ; 187: 188: 189: verbose_command: 190: VERBOSE 191: { verbose = !verbose; } 192: ; 193: 194: 195: %% 196: 197: static int 198: yyerror (const char *x ATTRIBUTE_UNUSED) 199: { 200: extern int linenumber; 201: 202: printf (_("Syntax error in archive script, line %d\n"), linenumber + 1); 203: return 0; 204: }