BSD 4 release
[unix-history] / usr / src / cmd / f77 / gram.expr
index 4491d0b..09250ff 100644 (file)
@@ -4,9 +4,9 @@ funarglist:
        ;
 
 funargs:  expr
        ;
 
 funargs:  expr
-               { $$ = mkchain($1, 0); }
+               { $$ = mkchain($1, CHNULL); }
        | funargs SCOMMA expr
        | funargs SCOMMA expr
-               { $$ = hookup($1, mkchain($3,0) ); }
+               { $$ = hookup($1, mkchain($3,CHNULL) ); }
        ;
 
 
        ;
 
 
@@ -27,23 +27,26 @@ uexpr:        lhs
                { $$ = mkexpr(OPPOWER, $1, $3); }
        | addop expr  %prec SSTAR
                { if($1 == OPMINUS)
                { $$ = mkexpr(OPPOWER, $1, $3); }
        | addop expr  %prec SSTAR
                { if($1 == OPMINUS)
-                       $$ = mkexpr(OPNEG, $2, 0);
+                       $$ = mkexpr(OPNEG, $2, ENULL);
                  else  $$ = $2;
                }
        | expr relop expr  %prec SEQ
                { $$ = mkexpr($2, $1, $3); }
        | expr SEQV expr
                  else  $$ = $2;
                }
        | expr relop expr  %prec SEQ
                { $$ = mkexpr($2, $1, $3); }
        | expr SEQV expr
-               { $$ = mkexpr(OPEQV, $1,$3); }
+               { NO66(".EQV. operator");
+                 $$ = mkexpr(OPEQV, $1,$3); }
        | expr SNEQV expr
        | expr SNEQV expr
-               { $$ = mkexpr(OPNEQV, $1, $3); }
+               { NO66(".NEQV. operator");
+                 $$ = mkexpr(OPNEQV, $1, $3); }
        | expr SOR expr
                { $$ = mkexpr(OPOR, $1, $3); }
        | expr SAND expr
                { $$ = mkexpr(OPAND, $1, $3); }
        | SNOT expr
        | expr SOR expr
                { $$ = mkexpr(OPOR, $1, $3); }
        | expr SAND expr
                { $$ = mkexpr(OPAND, $1, $3); }
        | SNOT expr
-               { $$ = mkexpr(OPNOT, $2, 0); }
+               { $$ = mkexpr(OPNOT, $2, ENULL); }
        | expr SCONCAT expr
        | expr SCONCAT expr
-               { $$ = mkexpr(OPCONCAT, $1, $3); }
+               { NO66("concatenation operator //");
+                 $$ = mkexpr(OPCONCAT, $1, $3); }
        ;
 
 addop:   SPLUS         { $$ = OPPLUS; }
        ;
 
 addop:   SPLUS         { $$ = OPPLUS; }
@@ -59,13 +62,19 @@ relop:        SEQ   { $$ = OPEQ; }
        ;
 
 lhs:    name
        ;
 
 lhs:    name
-               { $$ = mkprim($1, 0, 0, 0); }
-       | name SLPAR opt_expr SCOLON opt_expr SRPAR
-               { $$ = mkprim($1, 0, $3, $5); }
+               { $$ = mkprim($1, PNULL, CHNULL); }
+       | name substring
+               { NO66("substring operator :");
+                 $$ = mkprim($1, PNULL, $2); }
        | name SLPAR funarglist SRPAR
        | name SLPAR funarglist SRPAR
-               { $$ = mkprim($1, mklist($3), 0, 0); }
-       | name SLPAR funarglist SRPAR SLPAR opt_expr SCOLON opt_expr SRPAR
-               { $$ = mkprim($1, mklist($3), $6, $8); }
+               { $$ = mkprim($1, mklist($3), CHNULL); }
+       | name SLPAR funarglist SRPAR substring
+               { NO66("substring operator :");
+                 $$ = mkprim($1, mklist($3), $5); }
+       ;
+
+substring:  SLPAR opt_expr SCOLON opt_expr SRPAR
+               { $$ = mkchain($2, mkchain($4,CHNULL)); }
        ;
 
 opt_expr:
        ;
 
 opt_expr:
@@ -75,7 +84,8 @@ opt_expr:
 
 simple:          name
                { if($1->vclass == CLPARAM)
 
 simple:          name
                { if($1->vclass == CLPARAM)
-                       $$ = cpexpr($1->paramval);
+                       $$ = (expptr) cpexpr(
+                               ( (struct Paramblock *) ($1) ) -> paramval);
                }
        | simple_const
        ;
                }
        | simple_const
        ;
@@ -93,11 +103,14 @@ complex_const:  SLPAR uexpr SCOMMA uexpr SRPAR
        ;
 
 bit_const:  SHEXCON
        ;
 
 bit_const:  SHEXCON
-               { $$ = mkbitcon(4, toklen, token); }
+               { NOEXT("hex constant");
+                 $$ = mkbitcon(4, toklen, token); }
        | SOCTCON
        | SOCTCON
-               { $$ = mkbitcon(3, toklen, token); }
+               { NOEXT("octal constant");
+                 $$ = mkbitcon(3, toklen, token); }
        | SBITCON
        | SBITCON
-               { $$ = mkbitcon(1, toklen, token); }
+               { NOEXT("binary constant");
+                 $$ = mkbitcon(1, toklen, token); }
        ;
 
 fexpr:   unpar_fexpr
        ;
 
 fexpr:   unpar_fexpr
@@ -117,9 +130,10 @@ unpar_fexpr:         lhs
                { $$ = mkexpr(OPPOWER, $1, $3); }
        | addop fexpr  %prec SSTAR
                { if($1 == OPMINUS)
                { $$ = mkexpr(OPPOWER, $1, $3); }
        | addop fexpr  %prec SSTAR
                { if($1 == OPMINUS)
-                       $$ = mkexpr(OPNEG, $2, 0);
+                       $$ = mkexpr(OPNEG, $2, ENULL);
                  else  $$ = $2;
                }
        | fexpr SCONCAT fexpr
                  else  $$ = $2;
                }
        | fexpr SCONCAT fexpr
-               { $$ = mkexpr(OPCONCAT, $1, $3); }
+               { NO66("concatenation operator //");
+                 $$ = mkexpr(OPCONCAT, $1, $3); }
        ;
        ;