(linenum→info "unix/slp.c:2238")

binutils/2.18/binutils/arparse.y

    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: }
Syntax (Markdown)