🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

5 total messages Started by Stephen Kenkel Tue, 24 Jun 1986 16:23
possible implied-do bug?
#387
Author: Stephen Kenkel
Date: Tue, 24 Jun 1986 16:23
18 lines
979 bytes
The following program compiles under VMS fortran, but not
f77:

	  dimension l(10),m(10),n(10)
          write (*, * ) i,((l(k), m(k), n (k)), k=1,10)
	  end

This version works:

	  dimension l(10),m(10),n(10)
          write (*, * ) i,(l(k), m(k), n (k), k=1,10)
	  end

The extra parenthesis around the items in the implied do list
appears to be causing trouble.  Is this a bug, or is the compiler
in compliance with the standard?

Thanks.
Re: possible implied-do bug?
#388
Author: Andrew Koenig
Date: Wed, 25 Jun 1986 12:46
28 lines
1320 bytes
> The following program compiles under VMS fortran, but not
> f77:
>
>	  dimension l(10),m(10),n(10)
>          write (*, * ) i,((l(k), m(k), n (k)), k=1,10)
>	  end
>
> This version works:
>
>	  dimension l(10),m(10),n(10)
>          write (*, * ) i,(l(k), m(k), n (k), k=1,10)
>	  end
>
> The extra parenthesis around the items in the implied do list
> appears to be causing trouble.  Is this a bug, or is the compiler
> in compliance with the standard?
>
> Thanks.

The compiler is in compliance with the standard.

The list of expressions in an implied DO must not be parenthesized.
Otherwise there would be an ambiguity:

	write (*,*) ((3.0,4.0), k = 1, n)

Does this print ten alternating repetitions of 3.0 and 4.0,
or is (3.0,4.0) a complex constant?
Re: possible implied-do bug?
#389
Author: Steve Dever
Date: Wed, 25 Jun 1986 20:05
22 lines
1302 bytes
In article <1452@alvin.mcnc.UUCP> kenkel@mcnc.UUCP (Stephen Kenkel) writes:
>The following program compiles under VMS fortran, but not
>f77:
>
>	  dimension l(10),m(10),n(10)
>          write (*, * ) i,((l(k), m(k), n (k)), k=1,10)
>	  end
>

The ANSI FORTRAN standard (section 12.8.2.3) states that an implied DO list
has the form:

     (dlist, i = e1, e2 [, e3])

where dlist is an input/output list.
The standard does not allow an extra set of parentheses around
an I/O list in a READ or WRITE statement so the compiler is correct in not
accepting them.  This was allowed in the FORTRAN-66 standard but was removed
to eliminate the syntactic conflict with complex constants in a list-directed
output list.

Steve Dever (sun!steved)
Re: possible implied-do bug?
#391
Author: steve
Date: Thu, 26 Jun 1986 17:27
83 lines
3695 bytes
In article <1452@alvin.mcnc.UUCP>, kenkel@mcnc.UUCP (Stephen Kenkel) writes:
> The following program compiles under VMS fortran, but not f77:
> 
> 	  dimension l(10),m(10),n(10)
>           write (*, * ) i,((l(k), m(k), n (k)), k=1,10)
> 	  end
> 
> This version works:
> 
> 	  dimension l(10),m(10),n(10)
>           write (*, * ) i,(l(k), m(k), n (k), k=1,10)
> 	  end
> 
> The extra parenthesis around the items in the implied do list
> appears to be causing trouble.  Is this a bug, or is the compiler
> in compliance with the standard?

It looks like f77 is complying with the standard and VMS Fortran has relaxed
the requirements.  Quoting from the ANSI standard:

	12.8.2.3 Implied-DO List.  An implied-DO list if of the form:

		( dlist, i = e1, e2 [,e3] )

	where: i, e1, e2, and e3 are as specified for the DO statement (11.10)

		dlist is an input/output list

	.......

	12.8.2 Input/Ouput List.  .....

	An input/output list is a list (2.10) of input/output list items and
	implied-DO lists (12.8.2.3).  An input/output list item is either an
	input list item or an output list item.

	.....

	12.8.2.2 Output list items.  An output list item must be one of the
	following:

		(1) A variable name
		(2) An array element name
		(3) A character substring name
		(4) An array name
		(5) Any other expression except a character expression
		involving concatenation of an operand whose length
		specification is an asterisk in parentheses unless the
		operand is the symbolic name of a constant.

	Note that a constant, an expression involving operators or function
	references, or an expression enclosed in parentheses may appear as
	an output list item but must not appear as an input list item.

	2.10 List

	A list is a nonempty sequence (2.1) of syntactic entities seperated
	by commas.  The entities in the list are called list items.


Essentially, the stuff after the ( in an implied-DO list before the indexing
information must be a valid I/O list.  The only time parentheses are allowed
in an I/O list is surrounding an expression or surrounding an implied-DO list.
A sequence of things seperated by commas is certainly not a valid Fortran
expression.  Since there is no loop index information given, it is not a
valid implied-DO list either.  Therefore it is not a valid I/O list item.

Editorial remark:
It has been my experience that VMS Fortran is *very* liberal in what it
will accept as valid Fortran.  If you care at all about being portable, get
a copy of the ANSI standard and throw away your vendor's manuals.  The other
recommendation I would make is to always use the /STANDARD qualifier when
you compile on a VAX.  This should flag most of the non-standard extensions
you are using.  I don't know how picky this is on a VAX since all of my
developement work is done on a Ridge but it should help.

-- 

...smeagol\			Steve Schlaifer
......wlbr->!jplgodo!steve	Advance Projects Group, Jet Propulsion Labs
....logico/			4800 Oak Grove Drive, M/S 156/204
				Pasadena, California, 91109
					+1 818 354 3171
Re: possible implied-do bug?
#395
Author: Cathy
Date: Mon, 30 Jun 1986 22:48
46 lines
1708 bytes
In article <1452@alvin.mcnc.UUCP> kenkel@mcnc.UUCP writes:
>The following program compiles under VMS fortran, but not
>f77:
>
>	  dimension l(10),m(10),n(10)
>          write (*, * ) i,((l(k), m(k), n (k)), k=1,10)
>	  end
>
>This version works:
>
	...
>
>The extra parenthesis around the items in the implied do list
>appears to be causing trouble.  Is this a bug, or is the compiler
>in compliance with the standard?
>

	The compiler seems to agree with the standard. The syntax is:

io_implied_do_list
	:	"(" io_list "," id "=" exp "," exp [ "," exp ] ")"
	;
io_list
	:	io_entity ( "," io_entity )*
	;

io_entity
	:	array_variable
	|	io_implied_do_list
	;

	The extra bracket would imply an internal io_implied_do_list.

		Best wishes,
			Cathy

-- 

	 - Marxist unite!
	 - Leaders unite!
	 - Bad-spellers of the of the world untie!
  
UUCP:  ...!seismo!mcvax!ukc!dcl-cs!cathy
DARPA: cathy%lancs.comp@ucl-cs	| Post: University of Lancaster,
JANET: cathy@uk.ac.lancs.comp	|	Department of Computing,
Phone: +44 524 65201 ext ????	|	Bailrigg, Lancaster, LA1 4YR, UK.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads