Trailing-Edge
-
PDP-10 Archives
-
BB-D480F-BB_1985_short
-
f72bnf.syn
There are 12 other files named f72bnf.syn in the archive. Click here to see a list.
;COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1974, 1985
;ALL RIGHTS RESERVED.
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
;TRANSFERRED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
;AUTHORS: F. INFANTE, J. BELL, D. B. TOLMAN, T.F. VASAK/DCE/CKS/RVM/CDM
THE SYNTAX OF DECsystem-10/20 FORTRAN 77 IN EXTENDED BNF
100-310-044-03
JUNE 12,1972
F72BNFV = #10^24 + 0^18 + #2473 !Version date: 28-Sep-84
***** Begin Revision History *****
***** Begin Version 4B *****
1 334 17420 Correct format of DO statement.
***** Begin Version 5B *****
2 653 25441 Unit number for FIND should allow an array reference,
(DCE)
3 741 ----- Add warning for array declaration with a / (slash)
sererating the upper and lower bounds, (DCE)
***** Begin Version 6 *****
4 760 TFV 1-Mar-80 -----
F77 I/O statement changes
***** End Revision History *****
***** Begin Version 7 *****
5 1202 DCE 1-JUL-80 -----
Change syntax to allow expressions on output lists.
6 1203 DCE 24-Nov-80 -----
Modify 1102 to do I/O lists correctly with GIOLIST
7 1213 TFV 20-may-81
Fix ONEARRAY so type declarations are var(subs)*length
8 1233 CKS 27-Jun-81
Replace [ COMMA ] with %OPTCOMMA% in RWSPEC to avoid ambiguity.
Also occurs in IOSPEC1 and ENCODECODESPEC. Add ERREOL action routine
to prevent "TYPE *," from not parsing and also not typing an error
message.
9 1256 CKS 8-Sep-81
Modify COMMONGROUP. The statement COMMON // X contains what used
to be two slashes and is now a concatenation lexeme. Modify the
syntax to allow this.
10 1262 CKS 18-Sep-81
Modify syntax of EQUIVALENCE to allow character substrings
11 1271 CKS 9-Oct-81
Add optional comma in DO statement
12 1277 CKS 20-Oct-81
Modify GOTOSPEC so optional comma in assigned GOTO works: change
VARIABLESPEC to IDENTIFIER.
13 1410 CKS 28-Oct-81
Modify COMMONGROUP to allow the comma in COMMON A,/B/C.
Modify DATA to allow the comma in DATA A/1/,B/1/ to be omitted.
14 1416 CKS 9-Nov-81
Modify DATA to allow character substrings in DATA statement
variable lists.
15 1421 CKS 11-Nov-81
Allow statement function definitions with zero arguments.
16 1464 RVM 26-Jan-82
Add INTRINSPEC (the BNF for INTRINSIC statements).
17 1465 CKS 22-Jan-82
Make the BNF for IOSPEC call action routine KEYSCAN. IOSPEC is
the syntax for the control information list in READ and WRITE
statements, and is too hard to do in BNF.
18 1467 CDM 1-Feb-82
Add SAVESPEC for parsing the SAVE statement.
1510 RVM 14-Mar-82
Make ONEARRAY allow a dimension bound of an array to be asterisk.
1527 CKS 1-Apr-82
Modify ONEARRAY to allow constant expressions in array bounds.
Modify PARAMSPEC to allow F77 parentheses in parameter statement.
1546 CKS 31-May-82
Modify IO statements to unify READ/WRITE and TYPE/ACCEPT. Also
allow expressions as specifiers in TYPE/ACCEPT and "READ f,list"
forms.
1573 CKS 1-Jul-82
Make the statement number in "DO 10 I = ..." be optional. Add
syntax of DO WHILE statement.
1575 TFV 7-Jul-82
Fix ONEARRAY for type declarations. Allow both 'var * len (subs)'
and 'var (subs) * len' forms.
1656 CKS 22-Oct-82
Modify parameter form IDENTIFIER EQUAL %CONSTEXPR% to be %PARMASSIGN%
so we can allow parameter defs to be used later in the same statement
that defines them.
1677 CKS 12-Nov-82
Use ENCSPEC and DECSPEC to parse keyword lists in ENCODE and DECODE.
Use REWSPEC for REWIND and the rest of the utility statements. Use
FINDSPEC for FIND.
***** End Revision History *****
***** Begin Version 10 *********
2461 CDM 28-Sep-84
Add octal and hexadecimal constants for the Military Standard
MIL-STD-1753 to DATA statements.
Add action routine OCTHEX.
2473 CDM 26-Oct-84
Add IMPLICIT NONE for the Military Standard MIL-STD-1753.
Add action routine IMPCHK.
ENDV10
THE INFORMATION IN THIS MEMORANDUM IS
SUBJECT TO CHANGE WITHOUT NOTICE AND
SHOULD NOT BE CONSTRUED AS A COMMITMENT
BY DIGITAL EQUIPEMENT CORPORATION .
**** NOTE ****
These are things you should know when changing the BNF!
Everything before the first form feed is ignored, so all
global comments, and the revision history must be fully
contained on the first logical page.
Starting with page 2, all comments must be preceded by a ";"
(semicolon) in the first column, and terminated with a "."
(dot).
Do not use tabs for spacing, use spaces instead. The BNF will
not accept tabs. Put spaces around all specifications of the
grammar to delimit them.
The .OR.'s are small case l's (as in lucky).
All lines must end in a period (.). (Comments and
productions.)
Action routines are not robust. There are cases with action
routines which will not work unless the front-end is "beefed
up". An example is: (%A% l %B%). The problem is that there
are two routines present in the .OR.. There is only room at
present for one action routine in the lookahead table.
Putting one down in a separate production does not work
either, the table generators notice this.
; 100-310-044-03
PAGE 02
.
;THE COMPONENTS OF THE MODIFIED BNF SYNTAX USED IN THE PRODUCTIONS ON THE FOLLOWING PAGES .
BNFDEFINITION = METASYMBOL "=" BNFCOMPONENT [ COMMENT ] "." .
BNFCOMPONENT = ( TERMINAL l
METASYMBOL l
ONE l
ALL l
OPTION l
LIST l
REPEAT l
ACTION ) .
TERMINAL = """ *ALPHANUMERIC """ ;TERMINAL CHARACTER STRING .
METASYMBOL = [ *LETTER "-" ] *LETTER ;AN ELEMENT
OF THE SYNTAX DEFINED BY THE SYNTAX OR BY A LEXICAL
PROCESS .
ONE = "(" BNFCOMPONENT *[ "l" BNFCOMPONENT ] ")"
;ONLY ONE OF THE BNFCOMPONENTS IS REQUIRED .
ALL = BNFCOMPONENT *[ BNFCOMPONENT ] ;ALL OF THE
BNFCOMPONENTS ARE REQUIRED .
OPTION = "[" BNFCOMPONENT "]" ;USE OF THE BNFCOMPONENT IS
OPTIONAL .
LIST = "+" BNFCOMPONENT ;BNFCOMPONENTS SEPERATED BY
COMMAS .
REPEAT = "*" BNFCOMPONENT ;BNFCOMPONENTS NOT SEPERATED BY
COMMAS .
ACTION = "%" ACTIONNAME "%" ;ACTION TO BE PERFORMED WHEN ENCOUNTERED .
COMMENT = ";" *ASCIICHARACTER .
;*****************************************************************************************************************
; 100-310-044-03
PAGE 03
.
;FORTRAN-10 SYNTAX IN MODIFIED BNF .
EXPRESSION = %EXPRESS% .
VARIABLESPEC = IDENTIFIER %NOLABELS% [ LPAREN +%EXPRESS% RPAREN ] .
DATA = *( [ COMMA ] +DATAITEM VALUELIST ) LINEND .
; (This production permits a comma before the first DATALIST as in
DATA, A/1/
This error is caught in the semantic routine) .
;FORMAT = %FORMATSYN% .
; INTEGERSPEC = DECLARESPEC LINEND .
; REALSPEC = DECLARESPEC LINEND .
; LOGICALSPEC = DECLARESPEC LINEND .
; DOUBLEPRECISION = DECLARESPEC LINEND .
; COMPLEXSPEC = DECLARESPEC LINEND .
DECLARESPEC = ( FUNCTIONSPEC l TYPELIST ) LINEND .
FUNCTIONSPEC = %FUNCTIONSCAN% SUBPROGRAMID .
PARAMSPEC = %PARMLPAREN% +%PARMASSIGN% %PARMRPAREN% LINEND .
; 100-310-044-03
PAGE 04
.
; PROGRAM = [ IDENTIFIER ] LINEND .
; BLOCKDATA = [ IDENTIFIER ] LINEND .
DIMENSION = +ONEARRAY LINEND .
SUBROUTINE = SUBPROGRAMID LINEND .
COMMON = *COMMONGROUP LINEND .
EQUIVALENCE = +( LPAREN SUBVARSPEC COMMA +SUBVARSPEC RPAREN ) LINEND .
SUBVARSPEC = IDENTIFIER %NOLABELS% [ LPAREN
%COLNEXP% ( COLON %RPAREXP% RPAREN
l COMMA +%EXPRESS% RPAREN [ SUBSTRSPEC ]
l RPAREN [ SUBSTRSPEC ] ) ] .
SUBSTRSPEC = LPAREN %COLNEXP% COLON %RPAREXP% RPAREN .
EXTERNSPEC = +( [ ANDSGN l ASTERISK ] IDENTIFIER ) LINEND .
INTRINSPEC = +IDENTIFIER LINEND .
; INCLUDESPEC = LPAREN [ UNITSPEC COMMA ] ( LITSTRING l VARIABLESPEC ) RPAREN LINEND .
;[2473] IMPLICIT NONE - Action routine IMPCHK was added with
;[2473] (<implicitspec>) made optional, since specifying the characters
;[2473] "NONE" does not work in the BNF - TYPEID reads the NONE, sets up
;[2473] a global variable (IMPNON) for IMPCHK to read - If NONE is seen
;[2473] then IMPCHK fails and we can't have the optional (<implicitspec>)
;[2473] - If NONE isn't seen, IMPCHK returns true and the
;[2473] (<implicitspec>) is no longer optional.
IMPLICIT = +( %TYPEID% [ %IMPCHK% LPAREN +%IMPLICITSPEC% RPAREN ] )
LINEND .
SAVESPEC = [ +( IDENTIFIER l SLASH IDENTIFIER SLASH ) ] LINEND .
; PROTECT = +ONEARRAY LINEND .
; GLOBALSPEC = +ONEARRAY LINEND .
NAMELIST = *( SLASH IDENTIFIER SLASH +IDENTIFIER ) LINEND .
; IMPLICITSPEC = %LETTER% [ DASH %LETTER% ] .
;TYPEID = ( "SUBSCRIPTINTEGER" l "DOUBLEPRECISION" l
; ( "INTEGER" l "REAL" l "LOGICAL" l "COMPLEX" l "BIT" ) [ TIMES CONSTANT ] ) %SETTYPE% .
DATAITEM = ( SUBVARSPEC l LPAREN +DATAITEM [ LOOPPART ] RPAREN ) .
OUTPLIST = %NOTEOL% %GIOLIST% .
LOOPPART = EQUAL %EXPRESS% COMMA %EXPRESS% [ COMMA %EXPRESS% ] .
SUBPROGRAMID = IDENTIFIER %PNAMSET% [ LPAREN [ +( IDENTIFIER l ASTERISK l DOLLAR l ANDSGN ) ] RPAREN ] .
ONEARRAY = IDENTIFIER %ASTERTYPE% [
LPAREN +( %ASTEREXPR% [ COLON %ASTEREXPR% ] )
RPAREN ] %ASTERTYPE% .
TYPELIST = +( +ONEARRAY [ VALUELIST ] ) .
;[2461] Octal or hexidecimal constants are allowed for DATA statements;
O'<octalnumbers>' and Z'<hexnumbers>' is allowed, <number> * <octhex>
is allowed (the case of a repeat count), +/- contstant is not, the BNF
does NOT work well for this case with an action routine (when I tried,
it was calling the action routine TWICE because the artificial lexeme
created for the action routine was strange and bizarre); Beware if you
change this.
VALUELIST = SLASH
+( %OCTHEX%
l LITSTRING
l [ PLUS l MINUS ]
( CONSTLEX [ TIMES ( %OCTHEX%
l LITSTRING
l [ PLUS l MINUS ]
( CONSTLEX
l CMPLEXCON )
)
]
l CMPLEXCON )
)
SLASH .
CMPLEXCON = LPAREN [ PLUS l MINUS ] CONSTLEX COMMA [ PLUS l MINUS ] CONSTLEX RPAREN .
; 100-310-044-03
PAGE 05
.
COMMONGROUP = [ SLASH IDENTIFIER SLASH l CONCAT ] +( ONEARRAY %CMNCOMMA% ) .
ASSIGN = %LABELS% LABELEX %TOQUOTE% VARIABLESPEC LINEND .
GOTO = %LABELS% ( LABELEX l GOTOSPEC ) LINEND .
CALL = IDENTIFIER [ LPAREN %EXPRLIST% RPAREN ] LINEND .
; RETURNSPEC = [ %EXPRESS% ] LINEND .
;CONTINUE = LINEND .
; STOP = [ LITSTRING l CONSTLEX ] LINEND .
; PAUSE = [ LITSTRING l CONSTLEX ] LINEND .
;END = LINEND .
RWSPEC = %KEY1SPEC% [ %OPTCOMMA% +OUTPLIST ] LINEND .
IOSPEC1 = %KEY4SPEC% [ %OPTCOMMA% +OUTPLIST ] LINEND .
; ACCEPT = %LABELS% FORMATID [ COMMA +OUTPLIST ] LINEND .
; PUNCH = %LABELS% FORMATID [ COMMA +OUTPLIST ] LINEND .
; WRITESPEC = %LABELS% ( IOSPEC l FORMATID ) [ %OPTCOMMA% +OUTPLIST ] LINEND .
; PRINT = %LABELS% FORMATID [ COMMA +OUTPLIST ] LINEND .
; TYPESPEC = %LABELS% FORMATID [ COMMA +OUTPLIST ] LINEND .
; ENCODE = ENCODECODESPEC LINEND .
; DECODE = ENCODECODESPEC LINEND .
; REREAD = %LABELS% FORMATID [ COMMA +OUTPLIST ] LINEND .
; 100-310-044-03
PAGE 06
.
; BACKSPEC = UTILSPEC .
; REWIND = UTILSPEC .
; UNLOAD = UTILSPEC .
; ENDFILESPEC = UTILSPEC .
; SKIPSPEC = UTILSPEC .
; OPEN = LPAREN +( IDENTIFIER EQUAL ( VARIABLESPEC l CONSTANT l LITSTRING ) ) RPAREN LINEND .
; CLOSESPEC = LPAREN ( CONSTANT l VARIABLESPEC )
; *[ COMMA IDENTIFIER EQUAL ( VARIABLESPEC l LITSTRING ) ] RPAREN LINEND .
FIND = LPAREN %FINDSPEC% RPAREN LINEND .
; KEYSPEC = %NOLABELS% +( IDENTIFIER EQUAL ( CONSTLEX l VARIABLESPEC l ASTERISK ) ) .
; KEYORUNIT = %NOLABELS% ( CONSTLEX [ %RECORDMARK% %EXPRESS% ] l
IDENTIFIER [ %RECORDMARK% %EXPRESS% l EQUAL ( CONSTLEX l VARIABLESPEC l ASTERISK ) ] ) .
; KEYORFMT = %LABELS% ( LABELEX l VARIABLESPEC [ EQUAL %NOLABELS% ( CONSTLEX l VARIABLESPEC l
ASTERISK ) ] l ASTERISK ) .
GOTOSPEC = ( IDENTIFIER [ [ COMMA ] LPAREN +( %LABELS% LABELEX ) RPAREN ] l
LPAREN +( %LABELS% LABELEX ) RPAREN [ COMMA ] %EXPRESS% ) .
ENCODECODESPEC = LPAREN %ENCDECSPEC% RPAREN [ %OPTCOMMA% +OUTPLIST ] LINEND .
; FORMATID = ( LABELEX l IDENTIFIER l ASTERISK ) .
; ACTUALARG = ( %EXPRESS% l DOLLAR CONSTLEX ) .
; REPEATEXPR = +( [ LPAREN ] ( CONSTLEX l VARIABLESPEC ) [ RPAREN ] [ LPAREN ( CONSTLEX l VARIABLESPEC ) RPAREN ] ) .
UTILSPEC = %REWSPEC% LINEND .
; 100-310-044-03
PAGE 07
.
STATEFUNCSPEC = LPAREN ( RPAREN l %NULLCHECK% +%SUBLOCAL% RPAREN ) EQUAL %EXPRESS% LINEND .
ARRAYASSIGNSPEC = LPAREN +%EXPRESS% RPAREN EQUAL %EXPRESS% LINEND .
LOGICALIFSPEC = LPAREN %EXPRESS% RPAREN .
ARITHIFSPEC = LPAREN %EXPRESS% RPAREN %LABELS% LABELEX COMMA %LABELS% LABELEX [ COMMA %LABELS% LABELEX ] LINEND .
ASSIGNSPEC = IDENTIFIER EQUAL %EXPRESS% LINEND .
DOSPEC = %LABELS% [ LABELEX [ COMMA ] ] %NOLABELS% IDENTIFIER EQUAL
%EXPRESS% COMMA %EXPRESS% [ COMMA %EXPRESS% ] LINEND .
DOWHILE = %LABELANDWHILE% LPAREN %EXPRESS% RPAREN LINEND .