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