Eagle Legacy Modernization, LLC

Algol68 Grammar

Main program: Algol68_Program

Algol68 syntax:

 Count  Terminals:
  Algol68_Comment: # comment #
  Algol68_Format: Literal quotes:$ escape:none doubled:no multiline:no
  Algol68_Identifier_Reference: An identifier
  Algol68_Literal: Literal quotes:" escape:\ doubled:no multiline:no
  Algol68_Number: Number exponent_chars:Ee suffix_chars:LlFfDd trailing_period:yes ignore_char:none
  Algol68_Procedure_Definition: An identifier
  Algol68_Variable_Definition: An identifier
 Count  Statistics(*) Tokens:
    Algol68_Expression: (Algol68_Number | Algol68_Literal | Algol68_ArrayInfo | Algol68_PreIncrementExpression | Algol68_PostIncrementExpression | Algol68_NegativeExpression | Algol68_LogicalNotExpression | Algol68_EntierExpression | Algol68_WholeExpression | Algol68_BuiltIn | Algol68_ProcedureCall | Algol68_VariableExpression | Algol68_BracketsExpression | Algol68_ParenthesizedExpression | Algol68_SubscriptExpression | Algol68_Subfield | Algol68_Power_Expression | Algol68_MultiplicativeExpression | Algol68_AdditiveExpression | Algol68_RelationalExpression | Algol68_LogicalAndExpression | Algol68_LogicalOrExpression | Algol68_AssignmentExpression | Algol68_RangeExpression)
    Algol68_Program: Algol68_TopElement*
    |   Algol68_Main: "MAIN" ':' '(' Algol68_Statement* ')'
    |   Algol68_TopElement: (Algol68_Statement | Algol68_Main)
    Algol68_Statement: (Algol68_Comment | Algol68_Data | Algol68_ForStatement | Algol68_IfStatement | Algol68_PrintStatement | Algol68_PrintfStatement | Algol68_Procedure | Algol68_WhileStatement | Algol68_Assignment | Algol68_ExpressionStatement)
    Algol68_Type: (Algol68_ArrayType | ("BOOL"|"INT"|"DOUBLE"|"STRING"|"VOID"))
    |   Algol68_ArrayType: '[' ']' Algol68_Type
    Algol68_Variable: Algol68_Identifier_Reference* [Algol68_Subscript]
    |   Algol68_ColonSubscript: ':' Algol68_Expression
    |   Algol68_Subscript: '[' Algol68_Expression [Algol68_ColonSubscript] ']'
    Algol68_AdditiveExpression: Algol68_Expression ("+"|"-") Algol68_Expression
    Algol68_ArrayInfo: ("UPB"|"LWB") Algol68_Variable
    Algol68_AssignmentExpression: Algol68_Expression (":="|"*="|"+="|"-=") Algol68_Expression
    Algol68_BracketsExpression: '[' Algol68_Expression* ']'
    Algol68_BuiltIn: ("FALSE"|"TRUE")
    Algol68_EntierExpression: "ENTIER" Algol68_Expression
    Algol68_LogicalAndExpression: Algol68_Expression "and" Algol68_Expression
    Algol68_LogicalNotExpression: '~' Algol68_Expression
    Algol68_LogicalOrExpression: Algol68_Expression ("or"|"xor") Algol68_Expression
    Algol68_MultiplicativeExpression: Algol68_Expression Algol68_MultOper Algol68_Expression
    |   Algol68_MultOper: (("*"|"/"|"%") | ("mod"|"over"))
    Algol68_NegativeExpression: ("-") Algol68_Expression
    Algol68_ParenthesizedExpression: '(' Algol68_Expression* ')'
    Algol68_PostIncrementExpression: Algol68_Variable ("++"|"--")
    Algol68_Power_Expression: Algol68_Expression "**" Algol68_Expression
    Algol68_PreIncrementExpression: ("++"|"--") Algol68_Variable
    Algol68_ProcedureCall: Algol68_Variable ['?'] Algol68_FunctionArguments
    |   Algol68_FunctionArg: (Algol68_FunctionSetArg | Algol68_Expression)
    |   |   Algol68_FunctionSetArg: Algol68_Identifier_Reference "=>" Algol68_Expression
    |   Algol68_FunctionArguments: '(' Algol68_FunctionArg* ')'
    Algol68_RangeExpression: Algol68_Expression ".." Algol68_Expression
    Algol68_RelationalExpression: Algol68_Expression Algol68_RelOp Algol68_Expression
    |   Algol68_RelOp: (("<"|">"|"<="|">="|"="|"~="|"/=") | ("LT"|"LE"|"EQ"|"NE"|"GE"|"GT"))
    Algol68_Subfield: Algol68_Expression '.' Algol68_Expression
    Algol68_SubscriptExpression: Algol68_Expression '[' [Algol68_Expression] [':'] [Algol68_SubscriptionEnd] ']'
    |   Algol68_SubscriptionEnd: ("end" | Algol68_Expression)
    Algol68_VariableExpression: Algol68_Variable
    Algol68_WholeExpression: "WHOLE" '(' Algol68_Expression ',' Algol68_Number ')'
    Algol68_Assignment: Algol68_Variable ("="|"+="|":="|"+:=") Algol68_Expression [';']
    Algol68_Data: Algol68_Type Algol68_Variable_Definition* [Algol68_DataInitialValue] ';'
    |   Algol68_DataInitialValue: ("="|":=") Algol68_Expression
    Algol68_ExpressionStatement: Algol68_Expression [';']
    Algol68_ForStatement: "FOR" Algol68_Variable Algol68_ForClause* "DO" Algol68_Statement* "OD" [';']
    |   Algol68_ForClause: ("FROM"|"BY"|"TO"|"WHILE") Algol68_Expression
    Algol68_IfStatement: "IF" Algol68_Expression "THEN" Algol68_Statement* [Algol68_IfElifClause]* [Algol68_IfElseClause] "FI" [';']
    |   Algol68_IfElifClause: "ELIF" Algol68_Expression "THEN" Algol68_Statement*
    |   Algol68_IfElseClause: "ELSE" Algol68_Statement*
    Algol68_PrintStatement: "PRINT" '(' '(' Algol68_PrintWhat* ')' ')' [';']
    |   Algol68_PrintNewLine: "NEW" "LINE"
    |   Algol68_PrintWhat: (Algol68_Expression | Algol68_PrintNewLine)
    Algol68_PrintfStatement: "PRINTF" "((" Algol68_Format ',' Algol68_Expression "))" [';']
    Algol68_Procedure: "PROC" Algol68_Procedure_Definition '=' [Algol68_ProcedureParams] [Algol68_ProcedureReturns] '(' Algol68_Statement* [Algol68_Variable] ')' ';'
    |   Algol68_Parameter: Algol68_Type Algol68_Variable_Definition
    |   Algol68_ProcedureParams: '(' [Algol68_Parameter]* ')'
    |   Algol68_ProcedureReturns: Algol68_Type ':'
    Algol68_WhileStatement: "WHILE" Algol68_Expression "DO" Algol68_Statement* "OD" [';']

Terminals = 7 (instances=0)
Tokens = 56 (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.