141 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| funarglist:
 | |
| 		{ $$ = 0; }
 | |
| 	| funargs
 | |
| 		{ $$ = revchain($1); }
 | |
| 	;
 | |
| 
 | |
| funargs:  expr
 | |
| 		{ $$ = mkchain((char *)$1, CHNULL); }
 | |
| 	| funargs SCOMMA expr
 | |
| 		{ $$ = mkchain((char *)$3, $1); }
 | |
| 	;
 | |
| 
 | |
| 
 | |
| expr:	  uexpr
 | |
| 	| SLPAR expr SRPAR	{ $$ = $2; }
 | |
| 	| complex_const
 | |
| 	;
 | |
| 
 | |
| uexpr:	  lhs
 | |
| 	| simple_const
 | |
| 	| expr addop expr   %prec SPLUS
 | |
| 		{ $$ = mkexpr($2, $1, $3); }
 | |
| 	| expr SSTAR expr
 | |
| 		{ $$ = mkexpr(OPSTAR, $1, $3); }
 | |
| 	| expr SSLASH expr
 | |
| 		{ $$ = mkexpr(OPSLASH, $1, $3); }
 | |
| 	| expr SPOWER expr
 | |
| 		{ $$ = mkexpr(OPPOWER, $1, $3); }
 | |
| 	| addop expr  %prec SSTAR
 | |
| 		{ if($1 == OPMINUS)
 | |
| 			$$ = mkexpr(OPNEG, $2, ENULL);
 | |
| 		  else 	$$ = $2;
 | |
| 		}
 | |
| 	| expr relop expr  %prec SEQ
 | |
| 		{ $$ = mkexpr($2, $1, $3); }
 | |
| 	| expr SEQV expr
 | |
| 		{ NO66(".EQV. operator");
 | |
| 		  $$ = mkexpr(OPEQV, $1,$3); }
 | |
| 	| expr SNEQV expr
 | |
| 		{ NO66(".NEQV. operator");
 | |
| 		  $$ = mkexpr(OPNEQV, $1, $3); }
 | |
| 	| expr SOR expr
 | |
| 		{ $$ = mkexpr(OPOR, $1, $3); }
 | |
| 	| expr SAND expr
 | |
| 		{ $$ = mkexpr(OPAND, $1, $3); }
 | |
| 	| SNOT expr
 | |
| 		{ $$ = mkexpr(OPNOT, $2, ENULL); }
 | |
| 	| expr SCONCAT expr
 | |
| 		{ NO66("concatenation operator //");
 | |
| 		  $$ = mkexpr(OPCONCAT, $1, $3); }
 | |
| 	;
 | |
| 
 | |
| addop:	  SPLUS		{ $$ = OPPLUS; }
 | |
| 	| SMINUS	{ $$ = OPMINUS; }
 | |
| 	;
 | |
| 
 | |
| relop:	  SEQ	{ $$ = OPEQ; }
 | |
| 	| SGT	{ $$ = OPGT; }
 | |
| 	| SLT	{ $$ = OPLT; }
 | |
| 	| SGE	{ $$ = OPGE; }
 | |
| 	| SLE	{ $$ = OPLE; }
 | |
| 	| SNE	{ $$ = OPNE; }
 | |
| 	;
 | |
| 
 | |
| lhs:	 name
 | |
| 		{ $$ = mkprim($1, LBNULL, CHNULL); }
 | |
| 	| name substring
 | |
| 		{ NO66("substring operator :");
 | |
| 		  $$ = mkprim($1, LBNULL, $2); }
 | |
| 	| name SLPAR funarglist SRPAR
 | |
| 		{ $$ = mkprim($1, mklist($3), CHNULL); }
 | |
| 	| name SLPAR funarglist SRPAR substring
 | |
| 		{ NO66("substring operator :");
 | |
| 		  $$ = mkprim($1, mklist($3), $5); }
 | |
| 	;
 | |
| 
 | |
| substring:  SLPAR opt_expr SCOLON opt_expr SRPAR
 | |
| 		{ $$ = mkchain((char *)$2, mkchain((char *)$4,CHNULL)); }
 | |
| 	;
 | |
| 
 | |
| opt_expr:
 | |
| 		{ $$ = 0; }
 | |
| 	| expr
 | |
| 	;
 | |
| 
 | |
| simple:	  name
 | |
| 		{ if($1->vclass == CLPARAM)
 | |
| 			$$ = (expptr) cpexpr(
 | |
| 				( (struct Paramblock *) ($1) ) -> paramval);
 | |
| 		}
 | |
| 	| simple_const
 | |
| 	;
 | |
| 
 | |
| simple_const:   STRUE	{ $$ = mklogcon(1); }
 | |
| 	| SFALSE	{ $$ = mklogcon(0); }
 | |
| 	| SHOLLERITH  { $$ = mkstrcon(toklen, token); }
 | |
| 	| SICON	= { $$ = mkintcon( convci(toklen, token) ); }
 | |
| 	| SRCON	= { $$ = mkrealcon(tyreal, token); }
 | |
| 	| SDCON	= { $$ = mkrealcon(TYDREAL, token); }
 | |
| 	| bit_const
 | |
| 	;
 | |
| 
 | |
| complex_const:  SLPAR uexpr SCOMMA uexpr SRPAR
 | |
| 		{ $$ = mkcxcon($2,$4); }
 | |
| 	;
 | |
| 
 | |
| bit_const:  SHEXCON
 | |
| 		{ NOEXT("hex constant");
 | |
| 		  $$ = mkbitcon(4, toklen, token); }
 | |
| 	| SOCTCON
 | |
| 		{ NOEXT("octal constant");
 | |
| 		  $$ = mkbitcon(3, toklen, token); }
 | |
| 	| SBITCON
 | |
| 		{ NOEXT("binary constant");
 | |
| 		  $$ = mkbitcon(1, toklen, token); }
 | |
| 	;
 | |
| 
 | |
| fexpr:	  unpar_fexpr
 | |
| 	| SLPAR fexpr SRPAR
 | |
| 		{ $$ = $2; }
 | |
| 	;
 | |
| 
 | |
| unpar_fexpr:	  lhs
 | |
| 	| simple_const
 | |
| 	| fexpr addop fexpr   %prec SPLUS
 | |
| 		{ $$ = mkexpr($2, $1, $3); }
 | |
| 	| fexpr SSTAR fexpr
 | |
| 		{ $$ = mkexpr(OPSTAR, $1, $3); }
 | |
| 	| fexpr SSLASH fexpr
 | |
| 		{ $$ = mkexpr(OPSLASH, $1, $3); }
 | |
| 	| fexpr SPOWER fexpr
 | |
| 		{ $$ = mkexpr(OPPOWER, $1, $3); }
 | |
| 	| addop fexpr  %prec SSTAR
 | |
| 		{ if($1 == OPMINUS)
 | |
| 			$$ = mkexpr(OPNEG, $2, ENULL);
 | |
| 		  else	$$ = $2;
 | |
| 		}
 | |
| 	| fexpr SCONCAT fexpr
 | |
| 		{ NO66("concatenation operator //");
 | |
| 		  $$ = mkexpr(OPCONCAT, $1, $3); }
 | |
| 	;
 |