\* PHRASE FILE
\* Generate FORTRAN programs
\* 

%MAIN
\PROGRAM\DECLARATIONS\STATEMENTS\END

\*
\* Main blocks
\*

%PROGRAM
\I/ PROGRAM \PROGNAME\!\!

%DECLARATIONS
\DECL\!\!
(2)\DECL\!\DECLARATIONS

%STATEMENTS
\STMT\!
(3)\STMT\!\STATEMENTS

\*
\* Sub-blocks
\*

%DECL
\COMMON
\CHARDEF
\INTDEF
\REALDEF
\LOGDEF

%STMT
(8)\ASSIGN
\DOLOOP
\IF
\IFELSE

\*
\* Declarations
\*

%COMMON
\I/ COMMON / \VARNAME / \VARLIST

%CHARDEF
\I/ CHARACTER*\NUM \VARLIST

%INTDEF
\I/ INTEGER \VARLIST

%REALDEF
\I/ REAL \VARLIST

%LOGDEF
\I/ LOGICAL \VARLIST

\*
\* Statements
\*

%ASSIGN
\I/ \VARNAME = \EXPR

%ASSIGNS
(2)\ASSIGN
\ASSIGN\!\ASSIGNS

%DOLOOP
\I/ DO \NUM \VARNAME = \NUM/ ,\NUM\!\ASSIGNS\!\LNUM/ CONTINUE

%IF
\I/ IF (\COND/ ) GOTO \NUM
\I/ IF (\COND/ ) THEN\!\ASSIGNS\!\I/ END IF

%IFELSE
\I/ IF (\COND/ ) THEN\!\ASSIGNS\!\I/ ELSE\!\ASSIGNS\!\I/ END IF

\*
\* Miscellaneous
\*

%PROGNAME
FRED
TEST
GAMMA2
CUBIC

%END
\!\I/ END\!

%VARNAME
I
J
K
X
Y
Z
ALPHA
BETA

%VARLIST
\VARNAME
(3)\VARNAME/ ,\VARLIST

%EXPR
(5)\NUM
(5)\VARNAME
(5)\VARNAME\OP\VARNAME
\VARNAME\OP/ (\EXPR/ )
(1)(\EXPR/ )\OP\VARNAME
SIN(\EXPR/ )
COS(\EXPR/ )
TAN(\EXPR/ )

%OP
*
/
+
-

%COND
\VARNAME\REL\VARNAME

%REL
LT.
LE.
GE.
GT.
EQ.
NE.

%NUM
\DIGIT
\DIGIT\DIGIT

%LNUM
 \DIGIT    
 \DIGIT\DIGIT   

%I
      

%DIGIT
0
1
2
3
4
5
6
7
8
9
