Eagle Legacy Modernization, LLC

Fortran Grammar

Main program: Fortran_Program

Fortran syntax:

 Count  Terminals:
  Fortran_Comment: ! comment to end of line
  Fortran_Common_Reference: An identifier
  Fortran_EOLN: End of line
  Fortran_Function_Definition: An identifier
  Fortran_Function_Reference: An identifier
  Fortran_Identifier_Reference: An identifier
  Fortran_Literal: Literal quotes:' escape:none doubled:yes multiline:no
  Fortran_Number: Number exponent_chars:Ee suffix_chars:LlFfDd trailing_period:yes ignore_char:none
  Fortran_Variable_Definition: An identifier
  Fortran_Variable_Reference: An identifier
 Count  Statistics(*) Tokens:
    Fortran_AdditiveExpression: Fortran_Expression ("+"|"-") Fortran_Expression
    Fortran_BracketExpression: '[' [Fortran_Expression]* ']'
    Fortran_BuiltIn: (".FALSE."|".TRUE.")
    Fortran_EqualityExpression: Fortran_Expression Fortran_EqOper Fortran_Expression
    |   Fortran_EqOper: ((".EQ."|".NE.") | ("=="|"/="))
    Fortran_FunctionCall: Fortran_Identifier_Reference '(' [Fortran_Expression]* ')'
    Fortran_LogicalAndExpression: Fortran_Expression ".AND." Fortran_Expression
    Fortran_LogicalNotExpression: ".NOT." Fortran_Expression
    Fortran_LogicalOrExpression: Fortran_Expression ".OR." Fortran_Expression
    Fortran_MultiplicativeExpression: Fortran_Expression ("*"|"/") Fortran_Expression
    Fortran_NegativeExpression: ("-") Fortran_Expression
    Fortran_ParenthesizedExpression: '(' Fortran_Expression ')'
    Fortran_RelationalExpression: Fortran_Expression ("<"|">"|"<="|">=") Fortran_Expression
    Fortran_StringConcatenation: Fortran_Expression "//" Fortran_Expression
    Fortran_Subscript: Fortran_Identifier_Reference '(' Fortran_Expression* ')'
    Fortran_VariableExpression: Fortran_Variable
    Fortran_CommentEOLN: Fortran_Comment Fortran_EOLN
    Fortran_Expression: (Fortran_Number | Fortran_Literal | Fortran_NegativeExpression | Fortran_AdjustLFunction | Fortran_LenFunction | Fortran_ModFunction | Fortran_TrimFunction | Fortran_IndexFunction | Fortran_FunctionCall | Fortran_Subscript | Fortran_LogicalNotExpression | Fortran_BuiltIn | Fortran_VariableExpression | Fortran_ParenthesizedExpression | Fortran_BracketExpression | Fortran_MultiplicativeExpression | Fortran_AdditiveExpression | Fortran_StringConcatenation | Fortran_RelationalExpression | Fortran_EqualityExpression | Fortran_LogicalAndExpression | Fortran_LogicalOrExpression)
    Fortran_Program: Fortran_Statement*
    Fortran_Statement: (Fortran_Assignment | Fortran_CallStatement | Fortran_Common | Fortran_Data | Fortran_DoStatement | Fortran_ExitStatement | Fortran_Function | Fortran_IfStatement | Fortran_Implicit | Fortran_PrintStatement | Fortran_ProgramBlock | Fortran_Subroutine | Fortran_WriteStatement | Fortran_WhileStatement | Fortran_CommentEOLN)
    Fortran_Type: Fortran_DataType [Fortran_Dimension]
    |   Fortran_CharacterType: "CHARACTER" '(' "LEN" '=' Fortran_Number ')'
    |   Fortran_DataType: (("INTEGER"|"LOGICAL") | Fortran_CharacterType)
    |   Fortran_Dimension: ',' "DIMENSION" '(' Fortran_Number ')'
    Fortran_Variable: Fortran_Variable_Reference
    Fortran_AdjustLFunction: "ADJUSTL" '(' Fortran_Expression ')'
    Fortran_IndexFunction: "INDEX" '(' Fortran_Variable ',' Fortran_Expression ')'
    Fortran_LenFunction: "LEN" '(' Fortran_Expression ')'
    Fortran_ModFunction: "MOD" '(' Fortran_Expression ',' Fortran_Expression ')'
    Fortran_TrimFunction: "TRIM" '(' Fortran_Expression ')'
    Fortran_Assignment: Fortran_Variable '=' Fortran_Expression Fortran_EOLN
    Fortran_CallStatement: "CALL" Fortran_Function_Reference '(' Fortran_Expression* ')' Fortran_EOLN
    Fortran_Common: "COMMON" '/' Fortran_Common_Reference '/' Fortran_Variable_Reference* Fortran_EOLN
    Fortran_Data: Fortran_Type "::" Fortran_Variable_Definition* Fortran_EOLN
    Fortran_DoStatement: "DO" Fortran_Variable_Reference '=' Fortran_Expression ',' Fortran_Expression [Fortran_DoIncrement] Fortran_EOLN Fortran_Statement* "END" "DO" Fortran_EOLN
    |   Fortran_DoIncrement: ',' Fortran_Expression
    Fortran_ExitStatement: "EXIT" Fortran_EOLN
    Fortran_Function: Fortran_Type "FUNCTION" Fortran_Function_Definition '(' [Fortran_Variable_Reference]* ')' Fortran_EOLN Fortran_Statement* "END" "FUNCTION" Fortran_Function_Reference Fortran_EOLN
    Fortran_IfStatement: "IF" Fortran_Expression "THEN" Fortran_EOLN Fortran_Statement* [Fortran_IfElseIfBlock]* [Fortran_IfElseBlock] "END" "IF" Fortran_EOLN
    |   Fortran_IfElseBlock: "ELSE" Fortran_EOLN Fortran_Statement*
    |   Fortran_IfElseIfBlock: "ELSE" "IF" Fortran_Expression "THEN" Fortran_EOLN Fortran_Statement*
    Fortran_Implicit: "IMPLICIT" "NONE" Fortran_EOLN
    Fortran_PrintStatement: "PRINT" Fortran_PrintFormat ',' Fortran_Expression Fortran_EOLN
    |   Fortran_PrintFormat: ('*' | Fortran_Literal)
    Fortran_ProgramBlock: "PROGRAM" Fortran_Function_Definition Fortran_EOLN Fortran_Statement* "END" "PROGRAM" Fortran_Function_Reference Fortran_EOLN
    Fortran_Subroutine: "SUBROUTINE" Fortran_Function_Definition '(' [Fortran_Variable_Reference]* ')' Fortran_EOLN Fortran_Statement* "END" "SUBROUTINE" Fortran_Function_Reference Fortran_EOLN
    Fortran_WhileStatement: "DO" "WHILE" '(' Fortran_Expression ')' Fortran_EOLN Fortran_Statement* "END" "DO" Fortran_EOLN
    Fortran_WriteStatement: "WRITE" '(' Fortran_Variable ',' Fortran_Literal ')' Fortran_Variable_Reference* [Fortran_Comment] Fortran_EOLN

Terminals = 10 (instances=0)
Tokens = 48 (instances=0)

(*) Statistics are shown in the same order as the Tokens.
Percentages are rounded; 'all' and 'none' mean 100% and 0% before rounding.
For lists, it shows the average number of occurrences, excluding empty lists.