[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.10 and 1.11

version 1.10, 2020/06/10 21:00:01 version 1.11, 2020/06/10 21:02:33
Line 53 
Line 53 
 %token  <i>     MATCH NOTMATCH MATCHOP  %token  <i>     MATCH NOTMATCH MATCHOP
 %token  <i>     FINAL DOT ALL CCL NCCL CHAR OR STAR QUEST PLUS EMPTYRE  %token  <i>     FINAL DOT ALL CCL NCCL CHAR OR STAR QUEST PLUS EMPTYRE
 %token  <i>     AND BOR APPEND EQ GE GT LE LT NE IN  %token  <i>     AND BOR APPEND EQ GE GT LE LT NE IN
 %token  <i>     ARG BLTIN BREAK CLOSE CONTINUE DELETE DO EXIT FOR FUNC  %token  <i>     ARG BLTIN BREAK CLOSE CONTINUE DELETE DO EXIT FOR FUNC
 %token  <i>     SUB GSUB IF INDEX LSUBSTR MATCHFCN NEXT NEXTFILE  %token  <i>     SUB GSUB IF INDEX LSUBSTR MATCHFCN NEXT NEXTFILE
 %token  <i>     ADD MINUS MULT DIVIDE MOD  %token  <i>     ADD MINUS MULT DIVIDE MOD
 %token  <i>     ASSIGN ASGNOP ADDEQ SUBEQ MULTEQ DIVEQ MODEQ POWEQ  %token  <i>     ASSIGN ASGNOP ADDEQ SUBEQ MULTEQ DIVEQ MODEQ POWEQ
Line 72 
Line 72 
 %type   <i>     do st  %type   <i>     do st
 %type   <i>     pst opt_pst lbrace rbrace rparen comma nl opt_nl and bor  %type   <i>     pst opt_pst lbrace rbrace rparen comma nl opt_nl and bor
 %type   <i>     subop print  %type   <i>     subop print
   %type   <cp>    string
   
 %right  ASGNOP  %right  ASGNOP
 %right  '?'  %right  '?'
Line 80 
Line 81 
 %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 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 239 
Line 240 
                         $$ = 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       {          | pattern '|' GETLINE var       {
                         if (safe) SYNTAX("cmd | getline is unsafe");                          if (safe) SYNTAX("cmd | getline is unsafe");
                         else $$ = op3(GETLINE, $4, itonp($2), $1); }                          else $$ = op3(GETLINE, $4, itonp($2), $1); }
         | pattern '|' GETLINE           {          | pattern '|' GETLINE           {
                         if (safe) SYNTAX("cmd | getline is unsafe");                          if (safe) SYNTAX("cmd | getline is unsafe");
                         else $$ = op3(GETLINE, (Node*)0, itonp($2), $1); }                          else $$ = op3(GETLINE, (Node*)0, itonp($2), $1); }
         | pattern term %prec CAT        { $$ = op2(CAT, $1, $2); }          | pattern term %prec CAT        { $$ = op2(CAT, $1, $2); }
Line 293 
Line 294 
         ;          ;
   
 simple_stmt:  simple_stmt:
           print prarg '|' term          {            print prarg '|' term          {
                         if (safe) SYNTAX("print | is unsafe");                          if (safe) SYNTAX("print | is unsafe");
                         else $$ = stat3($1, $2, itonp($3), $4); }                          else $$ = stat3($1, $2, itonp($3), $4); }
         | print prarg APPEND term       {          | print prarg APPEND term       {
Line 349 
Line 350 
           SUB | GSUB            SUB | GSUB
         ;          ;
   
   string:
             STRING
           | string STRING         { $$ = catstr($1, $2); }
           ;
   
 term:  term:
           term '/' ASGNOP term          { $$ = op2(DIVEQ, $1, $4); }            term '/' ASGNOP term          { $$ = op2(DIVEQ, $1, $4); }
         | term '+' term                 { $$ = op2(ADD, $1, $3); }          | term '+' term                 { $$ = op2(ADD, $1, $3); }
Line 395 
Line 401 
         | 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                        { $$ = celltonode($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 422 
Line 428 
         | varname '[' patlist ']'       { $$ = op2(ARRAY, makearr($1), $3); }          | varname '[' patlist ']'       { $$ = op2(ARRAY, makearr($1), $3); }
         | IVAR                          { $$ = op1(INDIRECT, celltonode($1, CVAR)); }          | IVAR                          { $$ = op1(INDIRECT, celltonode($1, CVAR)); }
         | INDIRECT term                 { $$ = op1(INDIRECT, $2); }          | INDIRECT term                 { $$ = op1(INDIRECT, $2); }
         ;          ;
   
 varlist:  varlist:
           /* nothing */         { arglist = $$ = 0; }            /* nothing */         { arglist = $$ = 0; }

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.11