home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / f77 / gram.expr < prev    next >
Encoding:
Text File  |  1979-01-10  |  2.6 KB  |  126 lines

  1. funarglist:
  2.         { $$ = 0; }
  3.     | funargs
  4.     ;
  5.  
  6. funargs:  expr
  7.         { $$ = mkchain($1, 0); }
  8.     | funargs SCOMMA expr
  9.         { $$ = hookup($1, mkchain($3,0) ); }
  10.     ;
  11.  
  12.  
  13. expr:      uexpr
  14.     | SLPAR expr SRPAR    { $$ = $2; }
  15.     | complex_const
  16.     ;
  17.  
  18. uexpr:      lhs
  19.     | simple_const
  20.     | expr addop expr   %prec SPLUS
  21.         { $$ = mkexpr($2, $1, $3); }
  22.     | expr SSTAR expr
  23.         { $$ = mkexpr(OPSTAR, $1, $3); }
  24.     | expr SSLASH expr
  25.         { $$ = mkexpr(OPSLASH, $1, $3); }
  26.     | expr SPOWER expr
  27.         { $$ = mkexpr(OPPOWER, $1, $3); }
  28.     | addop expr  %prec SSTAR
  29.         { if($1 == OPMINUS)
  30.             $$ = mkexpr(OPNEG, $2, 0);
  31.           else     $$ = $2;
  32.         }
  33.     | expr relop expr  %prec SEQ
  34.         { $$ = mkexpr($2, $1, $3); }
  35.     | expr SEQV expr
  36.         { $$ = mkexpr(OPEQV, $1,$3); }
  37.     | expr SNEQV expr
  38.         { $$ = mkexpr(OPNEQV, $1, $3); }
  39.     | expr SOR expr
  40.         { $$ = mkexpr(OPOR, $1, $3); }
  41.     | expr SAND expr
  42.         { $$ = mkexpr(OPAND, $1, $3); }
  43.     | SNOT expr
  44.         { $$ = mkexpr(OPNOT, $2, 0); }
  45.     | expr SCONCAT expr
  46.         { $$ = mkexpr(OPCONCAT, $1, $3); }
  47.     ;
  48.  
  49. addop:      SPLUS        { $$ = OPPLUS; }
  50.     | SMINUS    { $$ = OPMINUS; }
  51.     ;
  52.  
  53. relop:      SEQ    { $$ = OPEQ; }
  54.     | SGT    { $$ = OPGT; }
  55.     | SLT    { $$ = OPLT; }
  56.     | SGE    { $$ = OPGE; }
  57.     | SLE    { $$ = OPLE; }
  58.     | SNE    { $$ = OPNE; }
  59.     ;
  60.  
  61. lhs:     name
  62.         { $$ = mkprim($1, 0, 0, 0); }
  63.     | name SLPAR opt_expr SCOLON opt_expr SRPAR
  64.         { $$ = mkprim($1, 0, $3, $5); }
  65.     | name SLPAR funarglist SRPAR
  66.         { $$ = mkprim($1, mklist($3), 0, 0); }
  67.     | name SLPAR funarglist SRPAR SLPAR opt_expr SCOLON opt_expr SRPAR
  68.         { $$ = mkprim($1, mklist($3), $6, $8); }
  69.     ;
  70.  
  71. opt_expr:
  72.         { $$ = 0; }
  73.     | expr
  74.     ;
  75.  
  76. simple:      name
  77.         { if($1->vclass == CLPARAM)
  78.             $$ = cpexpr($1->paramval);
  79.         }
  80.     | simple_const
  81.     ;
  82.  
  83. simple_const:   STRUE    { $$ = mklogcon(1); }
  84.     | SFALSE    { $$ = mklogcon(0); }
  85.     | SHOLLERITH  { $$ = mkstrcon(toklen, token); }
  86.     | SICON    = { $$ = mkintcon( convci(toklen, token) ); }
  87.     | SRCON    = { $$ = mkrealcon(TYREAL, convcd(toklen, token)); }
  88.     | SDCON    = { $$ = mkrealcon(TYDREAL, convcd(toklen, token)); }
  89.     ;
  90.  
  91. complex_const:  SLPAR uexpr SCOMMA uexpr SRPAR
  92.         { $$ = mkcxcon($2,$4); }
  93.     ;
  94.  
  95. bit_const:  SHEXCON
  96.         { $$ = mkbitcon(4, toklen, token); }
  97.     | SOCTCON
  98.         { $$ = mkbitcon(3, toklen, token); }
  99.     | SBITCON
  100.         { $$ = mkbitcon(1, toklen, token); }
  101.     ;
  102.  
  103. fexpr:      unpar_fexpr
  104.     | SLPAR fexpr SRPAR
  105.         { $$ = $2; }
  106.     ;
  107.  
  108. unpar_fexpr:      lhs
  109.     | simple_const
  110.     | fexpr addop fexpr   %prec SPLUS
  111.         { $$ = mkexpr($2, $1, $3); }
  112.     | fexpr SSTAR fexpr
  113.         { $$ = mkexpr(OPSTAR, $1, $3); }
  114.     | fexpr SSLASH fexpr
  115.         { $$ = mkexpr(OPSLASH, $1, $3); }
  116.     | fexpr SPOWER fexpr
  117.         { $$ = mkexpr(OPPOWER, $1, $3); }
  118.     | addop fexpr  %prec SSTAR
  119.         { if($1 == OPMINUS)
  120.             $$ = mkexpr(OPNEG, $2, 0);
  121.           else    $$ = $2;
  122.         }
  123.     | fexpr SCONCAT fexpr
  124.         { $$ = mkexpr(OPCONCAT, $1, $3); }
  125.     ;
  126.