[BACK]Return to awkgram.y CVS log [TXT][DIR] Up to [local] / src / usr.bin / awk

Diff for /src/usr.bin/awk/awkgram.y between version 1.3 and 1.4

version 1.3, 1997/04/07 15:59:54 version 1.4, 1997/08/25 16:17:09
Line 1 
Line 1 
   /*      $OpenBSD$       */
 /****************************************************************  /****************************************************************
 Copyright (C) AT&T and Lucent Technologies 1996  Copyright (C) Lucent Technologies 1997
 All Rights Reserved  All Rights Reserved
   
 Permission to use, copy, modify, and distribute this software and  Permission to use, copy, modify, and distribute this software and
Line 7 
Line 8 
 granted, provided that the above copyright notice appear in all  granted, provided that the above copyright notice appear in all
 copies and that both that the copyright notice and this  copies and that both that the copyright notice and this
 permission notice and warranty disclaimer appear in supporting  permission notice and warranty disclaimer appear in supporting
 documentation, and that the names of AT&T or Lucent Technologies  documentation, and that the name Lucent Technologies or any of
 or any of their entities not be used in advertising or publicity  its entities not be used in advertising or publicity pertaining
 pertaining to distribution of the software without specific,  to distribution of the software without specific, written prior
 written prior permission.  permission.
   
 AT&T AND LUCENT DISCLAIM ALL WARRANTIES WITH REGARD TO THIS  LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
 FITNESS. IN NO EVENT SHALL AT&T OR LUCENT OR ANY OF THEIR  IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
 ENTITIES BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
 DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR  IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
 USE OR PERFORMANCE OF THIS SOFTWARE.  THIS SOFTWARE.
 ****************************************************************/  ****************************************************************/
   
 %{  %{
Line 59 
Line 60 
 %token  <i>     PRINT PRINTF SPRINTF  %token  <i>     PRINT PRINTF SPRINTF
 %token  <p>     ELSE INTEST CONDEXPR  %token  <p>     ELSE INTEST CONDEXPR
 %token  <i>     POSTINCR PREINCR POSTDECR PREDECR  %token  <i>     POSTINCR PREINCR POSTDECR PREDECR
 %token  <cp>    VAR IVAR VARNF CALL NUMBER STRING FIELD  %token  <cp>    VAR IVAR VARNF CALL NUMBER STRING
 %token  <s>     REGEXPR  %token  <s>     REGEXPR
   
 %type   <p>     pas pattern ppattern plist pplist patlist prarg term re  %type   <p>     pas pattern ppattern plist pplist patlist prarg term re
Line 79 
Line 80 
 %left   AND  %left   AND
 %left   GETLINE  %left   GETLINE
 %nonassoc APPEND EQ GE GT LE LT NE MATCHOP IN '|'  %nonassoc APPEND EQ GE GT LE LT NE MATCHOP IN '|'
 %left   ARG BLTIN BREAK CALL CLOSE CONTINUE DELETE DO EXIT FOR FIELD FUNC  %left   ARG BLTIN BREAK CALL CLOSE CONTINUE DELETE DO EXIT FOR FUNC
 %left   GSUB IF INDEX LSUBSTR MATCHFCN NEXT NUMBER  %left   GSUB IF INDEX LSUBSTR MATCHFCN NEXT NUMBER
 %left   PRINT PRINTF RETURN SPLIT SPRINTF STRING SUB SUBSTR  %left   PRINT PRINTF RETURN SPLIT SPRINTF STRING SUB SUBSTR
 %left   REGEXPR VAR VARNF IVAR WHILE '('  %left   REGEXPR VAR VARNF IVAR WHILE '('
Line 238 
Line 239 
                         $$ = op3($2, (Node *)1, $1, $3); }                          $$ = op3($2, (Node *)1, $1, $3); }
         | pattern IN varname            { $$ = op2(INTEST, $1, makearr($3)); }          | pattern IN varname            { $$ = op2(INTEST, $1, makearr($3)); }
         | '(' plist ')' IN varname      { $$ = op2(INTEST, $2, makearr($5)); }          | '(' plist ')' IN varname      { $$ = op2(INTEST, $2, makearr($5)); }
         | pattern '|' GETLINE var       { $$ = op3(GETLINE, $4, (Node*)$2, $1); }          | pattern '|' GETLINE var       {
         | pattern '|' GETLINE           { $$ = op3(GETLINE, (Node*)0, (Node*)$2, $1); }                          if (safe) ERROR "cmd | getline is unsafe" SYNTAX;
                           else $$ = op3(GETLINE, $4, (Node*)$2, $1); }
           | pattern '|' GETLINE           {
                           if (safe) ERROR "cmd | getline is unsafe" SYNTAX;
                           else $$ = op3(GETLINE, (Node*)0, (Node*)$2, $1); }
         | pattern term %prec CAT        { $$ = op2(CAT, $1, $2); }          | pattern term %prec CAT        { $$ = op2(CAT, $1, $2); }
         | re          | re
         | term          | term
Line 288 
Line 293 
         ;          ;
   
 simple_stmt:  simple_stmt:
           print prarg '|' term          { $$ = stat3($1, $2, (Node *) $3, $4); }            print prarg '|' term          {
         | print prarg APPEND term       { $$ = stat3($1, $2, (Node *) $3, $4); }                          if (safe) ERROR "print | is unsafe" SYNTAX;
         | print prarg GT term           { $$ = stat3($1, $2, (Node *) $3, $4); }                          else $$ = stat3($1, $2, (Node *) $3, $4); }
           | print prarg APPEND term       {
                           if (safe) ERROR "print >> is unsafe" SYNTAX;
                           else $$ = stat3($1, $2, (Node *) $3, $4); }
           | print prarg GT term           {
                           if (safe) ERROR "print > is unsafe" SYNTAX;
                           else $$ = stat3($1, $2, (Node *) $3, $4); }
         | print prarg                   { $$ = stat3($1, $2, NIL, NIL); }          | print prarg                   { $$ = stat3($1, $2, NIL, NIL); }
         | DELETE varname '[' patlist ']' { $$ = stat2(DELETE, makearr($2), $4); }          | DELETE varname '[' patlist ']' { $$ = stat2(DELETE, makearr($2), $4); }
         | DELETE varname                 { $$ = stat2(DELETE, makearr($2), 0); }          | DELETE varname                 { $$ = stat2(DELETE, makearr($2), 0); }
Line 352 
Line 363 
         | BLTIN '(' ')'                 { $$ = op2(BLTIN, (Node *) $1, rectonode()); }          | BLTIN '(' ')'                 { $$ = op2(BLTIN, (Node *) $1, rectonode()); }
         | BLTIN '(' patlist ')'         { $$ = op2(BLTIN, (Node *) $1, $3); }          | BLTIN '(' patlist ')'         { $$ = op2(BLTIN, (Node *) $1, $3); }
         | BLTIN                         { $$ = op2(BLTIN, (Node *) $1, rectonode()); }          | BLTIN                         { $$ = op2(BLTIN, (Node *) $1, rectonode()); }
         | CALL '(' ')'                  { $$ = op2(CALL, valtonode($1,CVAR), NIL); }          | CALL '(' ')'                  { $$ = op2(CALL, celltonode($1,CVAR), NIL); }
         | CALL '(' patlist ')'          { $$ = op2(CALL, valtonode($1,CVAR), $3); }          | CALL '(' patlist ')'          { $$ = op2(CALL, celltonode($1,CVAR), $3); }
         | DECR var                      { $$ = op1(PREDECR, $2); }          | DECR var                      { $$ = op1(PREDECR, $2); }
         | INCR var                      { $$ = op1(PREINCR, $2); }          | INCR var                      { $$ = op1(PREINCR, $2); }
         | var DECR                      { $$ = op1(POSTDECR, $1); }          | var DECR                      { $$ = op1(POSTDECR, $1); }
Line 375 
Line 386 
                         $$ = op3(MATCHFCN, NIL, $3, (Node*)makedfa(strnode($5), 1));                          $$ = op3(MATCHFCN, NIL, $3, (Node*)makedfa(strnode($5), 1));
                   else                    else
                         $$ = op3(MATCHFCN, (Node *)1, $3, $5); }                          $$ = op3(MATCHFCN, (Node *)1, $3, $5); }
         | NUMBER                        { $$ = valtonode($1, CCON); }          | NUMBER                        { $$ = celltonode($1, CCON); }
         | SPLIT '(' pattern comma varname comma pattern ')'     /* string */          | SPLIT '(' pattern comma varname comma pattern ')'     /* string */
                 { $$ = op4(SPLIT, $3, makearr($5), $7, (Node*)STRING); }                  { $$ = op4(SPLIT, $3, makearr($5), $7, (Node*)STRING); }
         | SPLIT '(' pattern comma varname comma reg_expr ')'    /* const /regexp/ */          | SPLIT '(' pattern comma varname comma reg_expr ')'    /* const /regexp/ */
Line 383 
Line 394 
         | SPLIT '(' pattern comma varname ')'          | SPLIT '(' pattern comma varname ')'
                 { $$ = op4(SPLIT, $3, makearr($5), NIL, (Node*)STRING); }  /* default */                  { $$ = op4(SPLIT, $3, makearr($5), NIL, (Node*)STRING); }  /* default */
         | SPRINTF '(' patlist ')'       { $$ = op1($1, $3); }          | SPRINTF '(' patlist ')'       { $$ = op1($1, $3); }
         | STRING                        { $$ = valtonode($1, CCON); }          | STRING                        { $$ = celltonode($1, CCON); }
         | subop '(' reg_expr comma pattern ')'          | subop '(' reg_expr comma pattern ')'
                 { $$ = op4($1, NIL, (Node*)makedfa($3, 1), $5, rectonode()); }                  { $$ = op4($1, NIL, (Node*)makedfa($3, 1), $5, rectonode()); }
         | subop '(' pattern comma pattern ')'          | subop '(' pattern comma pattern ')'
Line 408 
Line 419 
 var:  var:
           varname            varname
         | varname '[' patlist ']'       { $$ = op2(ARRAY, makearr($1), $3); }          | varname '[' patlist ']'       { $$ = op2(ARRAY, makearr($1), $3); }
         | FIELD                         { $$ = valtonode($1, CFLD); }          | IVAR                          { $$ = op1(INDIRECT, celltonode($1, CVAR)); }
         | IVAR                          { $$ = op1(INDIRECT, valtonode($1, CVAR)); }  
         | INDIRECT term                 { $$ = op1(INDIRECT, $2); }          | INDIRECT term                 { $$ = op1(INDIRECT, $2); }
         ;          ;
   
 varlist:  varlist:
           /* nothing */         { arglist = $$ = 0; }            /* nothing */         { arglist = $$ = 0; }
         | VAR                   { arglist = $$ = valtonode($1,CVAR); }          | VAR                   { arglist = $$ = celltonode($1,CVAR); }
         | varlist comma VAR     {          | varlist comma VAR     {
                         checkdup($1, $3);                          checkdup($1, $3);
                         arglist = $$ = linkum($1,valtonode($3,CVAR)); }                          arglist = $$ = linkum($1,celltonode($3,CVAR)); }
         ;          ;
   
 varname:  varname:
           VAR                   { $$ = valtonode($1, CVAR); }            VAR                   { $$ = celltonode($1, CVAR); }
         | ARG                   { $$ = op1(ARG, (Node *) $1); }          | ARG                   { $$ = op1(ARG, (Node *) $1); }
         | VARNF                 { $$ = op1(VARNF, (Node *) $1); }          | VARNF                 { $$ = op1(VARNF, (Node *) $1); }
         ;          ;
Line 438 
Line 448 
 {  {
         if (isarr(p))          if (isarr(p))
                 ERROR "%s is an array, not a function", p->nval SYNTAX;                  ERROR "%s is an array, not a function", p->nval SYNTAX;
         else if (isfunc(p))          else if (isfcn(p))
                 ERROR "you can't define function %s more than once", p->nval SYNTAX;                  ERROR "you can't define function %s more than once", p->nval SYNTAX;
         curfname = p->nval;          curfname = p->nval;
 }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4