7 { $$ = mkchain($1, 0); }
9 { $$ = hookup($1, mkchain($3,0) ); }
14 | SLPAR expr SRPAR { $$ = $2; }
20 | expr addop expr %prec SPLUS
21 { $$ = mkexpr($2, $1, $3); }
23 { $$ = mkexpr(OPSTAR, $1, $3); }
25 { $$ = mkexpr(OPSLASH, $1, $3); }
27 { $$ = mkexpr(OPPOWER, $1, $3); }
28 | addop expr %prec SSTAR
30 $$ = mkexpr(OPNEG, $2, 0);
33 | expr relop expr %prec SEQ
34 { $$ = mkexpr($2, $1, $3); }
36 { $$ = mkexpr(OPEQV, $1,$3); }
38 { $$ = mkexpr(OPNEQV, $1, $3); }
40 { $$ = mkexpr(OPOR, $1, $3); }
42 { $$ = mkexpr(OPAND, $1, $3); }
44 { $$ = mkexpr(OPNOT, $2, 0); }
46 { $$ = mkexpr(OPCONCAT, $1, $3); }
49 addop: SPLUS { $$ = OPPLUS; }
50 | SMINUS { $$ = OPMINUS; }
53 relop: SEQ { $$ = OPEQ; }
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); }
77 { if($1->vclass == CLPARAM)
78 $$ = cpexpr($1->b_param.paramval);
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)); }
91 complex_const: SLPAR uexpr SCOMMA uexpr SRPAR
92 { $$ = mkcxcon($2,$4); }
96 { $$ = mkbitcon(4, toklen, token); }
98 { $$ = mkbitcon(3, toklen, token); }
100 { $$ = mkbitcon(1, toklen, token); }
110 | fexpr addop fexpr %prec SPLUS
111 { $$ = mkexpr($2, $1, $3); }
113 { $$ = mkexpr(OPSTAR, $1, $3); }
115 { $$ = mkexpr(OPSLASH, $1, $3); }
117 { $$ = mkexpr(OPPOWER, $1, $3); }
118 | addop fexpr %prec SSTAR
120 $$ = mkexpr(OPNEG, $2, 0);
123 | fexpr SCONCAT fexpr
124 { $$ = mkexpr(OPCONCAT, $1, $3); }