* add p cc
[mascara-docs.git] / compilers / pcc / pcc-1.0.0 / f77 / fcom / gram.expr
blobe8977a727a38be9eb20d13b215d0a0b034f79f54
1 funarglist:
2                 { $$ = 0; }
3         | funargs
4         ;
6 funargs:  expr
7                 { $$ = mkchain($1, 0); }
8         | funargs SCOMMA expr
9                 { $$ = hookup($1, mkchain($3,0) ); }
10         ;
13 expr:     uexpr
14         | SLPAR expr SRPAR      { $$ = $2; }
15         | complex_const
16         ;
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         ;
49 addop:    SPLUS         { $$ = OPPLUS; }
50         | SMINUS        { $$ = OPMINUS; }
51         ;
53 relop:    SEQ   { $$ = OPEQ; }
54         | SGT   { $$ = OPGT; }
55         | SLT   { $$ = OPLT; }
56         | SGE   { $$ = OPGE; }
57         | SLE   { $$ = OPLE; }
58         | SNE   { $$ = OPNE; }
59         ;
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         ;
71 opt_expr:
72                 { $$ = 0; }
73         | expr
74         ;
76 simple:   name
77                 { if($1->vclass == CLPARAM)
78                         $$ = cpexpr($1->b_param.paramval);
79                 }
80         | simple_const
81         ;
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         ;
91 complex_const:  SLPAR uexpr SCOMMA uexpr SRPAR
92                 { $$ = mkcxcon($2,$4); }
93         ;
95 bit_const:  SHEXCON
96                 { $$ = mkbitcon(4, toklen, token); }
97         | SOCTCON
98                 { $$ = mkbitcon(3, toklen, token); }
99         | SBITCON
100                 { $$ = mkbitcon(1, toklen, token); }
101         ;
103 fexpr:    unpar_fexpr
104         | SLPAR fexpr SRPAR
105                 { $$ = $2; }
106         ;
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         ;