Bell 32V release
[unix-history] / usr / src / cmd / f77 / gram.expr
CommitLineData
0d57d6f5
TL
1funarglist:
2 { $$ = 0; }
3 | funargs
4 ;
5
6funargs: expr
7 { $$ = mkchain($1, 0); }
8 | funargs SCOMMA expr
9 { $$ = hookup($1, mkchain($3,0) ); }
10 ;
11
12
13expr: uexpr
14 | SLPAR expr SRPAR { $$ = $2; }
15 | complex_const
16 ;
17
18uexpr: 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
49addop: SPLUS { $$ = OPPLUS; }
50 | SMINUS { $$ = OPMINUS; }
51 ;
52
53relop: SEQ { $$ = OPEQ; }
54 | SGT { $$ = OPGT; }
55 | SLT { $$ = OPLT; }
56 | SGE { $$ = OPGE; }
57 | SLE { $$ = OPLE; }
58 | SNE { $$ = OPNE; }
59 ;
60
61lhs: 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
71opt_expr:
72 { $$ = 0; }
73 | expr
74 ;
75
76simple: name
77 { if($1->vclass == CLPARAM)
78 $$ = cpexpr($1->paramval);
79 }
80 | simple_const
81 ;
82
83simple_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
91complex_const: SLPAR uexpr SCOMMA uexpr SRPAR
92 { $$ = mkcxcon($2,$4); }
93 ;
94
95bit_const: SHEXCON
96 { $$ = mkbitcon(4, toklen, token); }
97 | SOCTCON
98 { $$ = mkbitcon(3, toklen, token); }
99 | SBITCON
100 { $$ = mkbitcon(1, toklen, token); }
101 ;
102
103fexpr: unpar_fexpr
104 | SLPAR fexpr SRPAR
105 { $$ = $2; }
106 ;
107
108unpar_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 ;