home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
fchek284.zip
/
pointer.patch
< prev
next >
Wrap
Text File
|
1994-11-06
|
4KB
|
145 lines
This file contains information to allow users to add minimal support
for the nonstandard POINTER statement provided by many FORTRAN 77
vendors. The syntax is described below. It is not the same as the
Fortran 90 POINTER statement. This fix does not include real checking
of the statement other than basic syntax, but it keeps ftnchek from
choking on it. No guarantees accompany this fix.
To implement the fix, go to the directory containing the ftnchek
source code and give the commands
$ patch < pointer.patch
$ make
Thanks go to John Dannenhoffer for working this out. A few minor
changes have been made to improve it. The explanations following the
patch code are from him.
The following is the patch code.
diff -c ./fortran.y pointer/fortran.y
*** ./fortran.y Tue Oct 25 17:25:19 1994
--- pointer/fortran.y Sun Nov 6 16:45:05 1994
***************
*** 224,229 ****
--- 224,230 ----
%token tok_OPEN
%token tok_PARAMETER
%token tok_PAUSE
+ %token tok_POINTER
%token tok_PRECISION
%token tok_PRINT
%token tok_PROGRAM
***************
*** 460,465 ****
--- 461,467 ----
| external_stmt
| intrinsic_stmt
| save_stmt
+ | pointer_stmt
;
***************
*** 1440,1445 ****
--- 1442,1478 ----
{
def_intrins_name(&($3));
}
+ ;
+
+ /* constructs for POINTER(pointer=pointee) statement */
+ pointer_stmt : tok_POINTER pointer_item_list EOS
+ ;
+
+ pointer_item_list: pointer_item
+ | pointer_item_list ',' pointer_item
+ ;
+
+ pointer_item : '(' pointer_name ',' pointee_name ')'
+ ;
+
+ pointer_name : symbolic_name
+ {
+ declare_type(&($1),type_INTEGER,local_wordsize);
+ }
+ ;
+
+ pointee_name : symbolic_name
+ {
+ /* Suppress set/used warnings since
+ often is accessed only via pointer */
+ use_lvalue(&($1));
+ use_variable(&($1));
+ }
+ | array_declarator
+ {
+ use_lvalue(&($1));
+ use_variable(&($1));
+ }
;
/* 26 */
diff -c ./keywords.h pointer/keywords.h
*** ./keywords.h Sun Jul 10 18:56:41 1994
--- pointer/keywords.h Sun Nov 6 16:45:05 1994
***************
*** 106,111 ****
--- 106,112 ----
{"OPEN", tok_OPEN, IK | EK | MP | NA},
{"PARAMETER", tok_PARAMETER, IK | NI | EK | MP | NA},
{"PAUSE", tok_PAUSE, IK | NP | EK},
+ {"POINTER", tok_POINTER, IK | MP | NI | EK | NA},
{"PRECISION", tok_PRECISION, IK | NI | EK | TY},
{"PRINT", tok_PRINT, IK | EK},
{"PROGRAM", tok_PROGRAM, IK | NP | NI | EK},
Date: 18 Nov 1993 12:37:24 -0500
From: dannenho@percheron.res.utc.com (John Dannenhoffer)
To: moniot@mary.fordham.EDU
Prof. Moniot,
Thank you for your help in getting me started with adding the
POINTER statement to ftnchek. With your help, I was able to
successfully include the POINTER statement in my version of ftnchek.
I have included the changes which I have made so that you could
include them in a future release (if you want to).
The description of the POINTER statement, taken roughly from the
IBM Fortran manual is:
Syntax:
POINTER (pointer,pointee) [,(pointer,pointee)]
where:
pointer is the name of a pointer variable
pointee is a variable name, array declarator, or array name
The POINTER statement allows you to specify that the value of the
variable 'pointer' should be used as the address for any reference
to 'pointee'. The compiler does not allocate storage for the
'pointee'. The storage is allocated at execution time by the
assignment of the address of a block of storage to the associated
pointer. The pointer can become associated with either static or
dynamic storage. A reference to the pointee requires that the
associated pointer be defined.
A pointer is a variable of type INTEGER*4, and you cannot
explicitly assign a type to it. You can use pointers in any
expression or statement in which an INTEGER*4 variable can be used.
You can assign any data type to a pointee, but you cannot assign a
storage class or initial value to a pointee.
An actual array that appears as a pointee in a POINTER statement
is called a pointee array. You can dimension a pointee array in
an explicit type statement, a DIMENSION statement, or in the
POINTER statement itself.
Thanks again for all your help.
John Dannenhoffer
(203) 727-7775
dannenho@utrc.utc.com