progam: endOfLine moduleAttributes endOfLine moduleDeclarations endOfLine moduleBody endOfLine $EOF
progam   ::= endOfLine* moduleAttributes? endOfLine* moduleDeclarations? endOfLine* moduleBody? endOfLine* '$EOF'
no referencesendOfLine: NEWLINE COMMENT REMCOMMENT
endOfLine
         ::= 'NEWLINE'
           | 'COMMENT'
           | 'REMCOMMENT'
referenced by: endOfStatement moduleAttributes moduleBody moduleDeclarations progam endOfStatement: endOfLine COLON
         ::= ( endOfLine | 'COLON' )+
referenced by: block doLoopStmt forEachStmt forNextStmt functionStmt ifBlockStmt ifElseBlockStmt ifElseIfBlockStmt propertyGetStmt propertyLetStmt propertySetStmt sC_Case selectCaseStmt subStmt whileWendStmt withStmt moduleAttributes: attributeStmt endOfLine
         ::= ( attributeStmt endOfLine+ )+
referenced by: progam attributeStmt: ATTRIBUTE implicitCallStmt_InStmt EQ literal ,
         ::= 'ATTRIBUTE' implicitCallStmt_InStmt 'EQ' literal ( ',' literal )*
referenced by: blockStmt moduleAttributes moduleDeclarations: moduleDeclarationsElement endOfLine endOfLine referenced by: progam moduleDeclarationsElement: COMMENT variableStmt moduleOption
         ::= 'COMMENT'
           | variableStmt
           | moduleOption
referenced by: moduleDeclarations moduleOption: OPTION_BASE INTEGERLITERAL OPTION_COMPARE IDENTIFIER OPTION_EXPLICIT OPTION_PRIVATE_MODULE
         ::= 'OPTION_BASE' 'INTEGERLITERAL'
           | 'OPTION_COMPARE' 'IDENTIFIER'
           | 'OPTION_EXPLICIT'
           | 'OPTION_PRIVATE_MODULE'
referenced by: moduleDeclarationsElement moduleBody: moduleBodyElement endOfLine endOfLine referenced by: progam moduleBodyElement: functionStmt propertyGetStmt propertySetStmt propertyLetStmt subStmt
         ::= functionStmt
           | propertyGetStmt
           | propertySetStmt
           | propertyLetStmt
           | subStmt
referenced by: moduleBody visibility: PRIVATE PUBLIC FRIEND GLOBAL
         ::= 'PRIVATE'
           | 'PUBLIC'
           | 'FRIEND'
           | 'GLOBAL'
referenced by: functionStmt propertyGetStmt propertyLetStmt propertySetStmt subStmt variableStmt subStmt: visibility STATIC SUB IDENTIFIER argList endOfStatement block END_SUB
subStmt  ::= visibility? 'STATIC'? 'SUB' 'IDENTIFIER' argList? endOfStatement block? 'END_SUB'
referenced by: moduleBodyElement propertyGetStmt: visibility STATIC PROPERTY_GET IDENTIFIER typeHint argList asTypeClause endOfStatement block END_PROPERTY
         ::= visibility? 'STATIC'? 'PROPERTY_GET' 'IDENTIFIER' typeHint? argList? asTypeClause? endOfStatement block? 'END_PROPERTY'
referenced by: moduleBodyElement propertySetStmt: visibility STATIC PROPERTY_SET IDENTIFIER argList endOfStatement block END_PROPERTY
         ::= visibility? 'STATIC'? 'PROPERTY_SET' 'IDENTIFIER' argList? endOfStatement block? 'END_PROPERTY'
referenced by: moduleBodyElement propertyLetStmt: visibility STATIC PROPERTY_LET IDENTIFIER argList endOfStatement block END_PROPERTY
         ::= visibility? 'STATIC'? 'PROPERTY_LET' 'IDENTIFIER' argList? endOfStatement block? 'END_PROPERTY'
referenced by: moduleBodyElement functionStmt: visibility STATIC FUNCTION IDENTIFIER typeHint argList asTypeClause endOfStatement block END_FUNCTION
         ::= visibility? 'STATIC'? 'FUNCTION' 'IDENTIFIER' typeHint? argList? asTypeClause? endOfStatement block? 'END_FUNCTION'
referenced by: moduleBodyElement block: blockStmt endOfStatement referenced by: doLoopStmt forEachStmt forNextStmt functionStmt ifBlockStmt ifElseBlockStmt ifElseIfBlockStmt propertyGetStmt propertyLetStmt propertySetStmt sC_Case subStmt whileWendStmt withStmt blockStmt: lineLabel lineLabel attributeStmt goToStmt resumeStmt ifThenElseStmt selectCaseStmt forNextStmt forEachStmt doLoopStmt whileWendStmt onErrorStmt withStmt eraseStmt exitStmt explicitCallStmt setStmt redimStmt letStmt variableStmt implicitCallStmt_InBlock referenced by: block ifThenElseStmt resumeStmt: RESUME ambiguousIdentifier
         ::= 'RESUME' ambiguousIdentifier
referenced by: blockStmt whileWendStmt: WHILE valueStmt endOfStatement block WEND
         ::= 'WHILE' valueStmt endOfStatement block 'WEND'
referenced by: blockStmt doLoopStmt: DO endOfStatement block LOOP WHILE UNTIL valueStmt WHILE UNTIL valueStmt endOfStatement block LOOP
         ::= 'DO' ( endOfStatement block 'LOOP' ( ( 'WHILE' | 'UNTIL' ) valueStmt )? | ( 'WHILE' | 'UNTIL' ) valueStmt endOfStatement block 'LOOP' )
referenced by: blockStmt forNextStmt: FOR IDENTIFIER typeHint asTypeClause EQ valueStmt TO valueStmt STEP valueStmt endOfStatement block NEXT ambiguousIdentifier
         ::= 'FOR' 'IDENTIFIER' typeHint? asTypeClause? 'EQ' valueStmt 'TO' valueStmt ( 'STEP' valueStmt )? endOfStatement block? 'NEXT' ambiguousIdentifier?
referenced by: blockStmt forEachStmt: FOR EACH IDENTIFIER typeHint IN valueStmt endOfStatement block NEXT ambiguousIdentifier
         ::= 'FOR' 'EACH' 'IDENTIFIER' typeHint? 'IN' valueStmt endOfStatement block? 'NEXT' ambiguousIdentifier?
referenced by: blockStmt selectCaseStmt: SELECT CASE valueStmt endOfStatement sC_Case END_SELECT
         ::= 'SELECT' 'CASE' valueStmt endOfStatement sC_Case* 'END_SELECT'
referenced by: blockStmt sC_Selection: IS comparisonOperator valueStmt TO valueStmt
         ::= ( 'IS' comparisonOperator | valueStmt 'TO' )? valueStmt
referenced by: sC_Cond sC_Case: CASE sC_Cond endOfStatement block referenced by: selectCaseStmt sC_Cond: ELSE sC_Selection ,
sC_Cond  ::= 'ELSE'
           | sC_Selection ( ',' sC_Selection )*
referenced by: sC_Case comparisonOperator: LT LEQ GT GEQ EQ NEQ IS
         ::= 'LT'
           | 'LEQ'
           | 'GT'
           | 'GEQ'
           | 'EQ'
           | 'NEQ'
           | 'IS'
referenced by: sC_Selection ifThenElseStmt: ifBlockStmt ifElseIfBlockStmt ifElseBlockStmt END_IF IF valueStmt THEN blockStmt ELSE blockStmt
         ::= 'IF' valueStmt 'THEN' blockStmt ( 'ELSE' blockStmt )?
           | ifBlockStmt ifElseIfBlockStmt* ifElseBlockStmt? 'END_IF'
referenced by: blockStmt ifBlockStmt: IF valueStmt THEN endOfStatement block
         ::= 'IF' valueStmt 'THEN' endOfStatement block?
referenced by: ifThenElseStmt ifElseIfBlockStmt: ELSEIF valueStmt THEN endOfStatement block
         ::= 'ELSEIF' valueStmt 'THEN' endOfStatement block?
referenced by: ifThenElseStmt ifElseBlockStmt: ELSE endOfStatement block
         ::= 'ELSE' endOfStatement block?
referenced by: ifThenElseStmt onErrorStmt: ON_ERROR GOTO IDENTIFIER MINUS INTEGERLITERAL RESUME NEXT
         ::= 'ON_ERROR' ( 'GOTO' ( 'IDENTIFIER' | 'MINUS' 'INTEGERLITERAL' ) | 'RESUME' 'NEXT' )
referenced by: blockStmt lineLabel: IDENTIFIER COLON
         ::= 'IDENTIFIER' 'COLON'
referenced by: blockStmt goToStmt: GOTO ambiguousIdentifier referenced by: blockStmt eraseStmt: ERASE valueStmt ,
         ::= 'ERASE' valueStmt ( ',' valueStmt )*
referenced by: blockStmt redimStmt: REDIM PRESERVE redimSubStmt ,
         ::= 'REDIM' 'PRESERVE'? redimSubStmt ( ',' redimSubStmt )*
referenced by: blockStmt redimSubStmt: implicitCallStmt_InStmt LPAREN subscripts RPAREN asTypeClause
         ::= implicitCallStmt_InStmt 'LPAREN' subscripts 'RPAREN' asTypeClause?
referenced by: redimStmt exitStmt: EXIT_DO EXIT_FOR EXIT_FUNCTION EXIT_PROPERTY EXIT_SUB END
exitStmt ::= 'EXIT_DO'
           | 'EXIT_FOR'
           | 'EXIT_FUNCTION'
           | 'EXIT_PROPERTY'
           | 'EXIT_SUB'
           | 'END'
referenced by: blockStmt letStmt: LET implicitCallStmt_InStmt EQ PLUS_EQ MINUS_EQ valueStmt
letStmt  ::= 'LET'? implicitCallStmt_InStmt ( 'EQ' | 'PLUS_EQ' | 'MINUS_EQ' ) valueStmt
referenced by: blockStmt setStmt: SET implicitCallStmt_InStmt EQ valueStmt referenced by: blockStmt explicitCallStmt: eCS_MemberProcedureCall eCS_ProcedureCall
         ::= eCS_MemberProcedureCall
           | eCS_ProcedureCall
referenced by: blockStmt eCS_MemberProcedureCall: CALL implicitCallStmt_InStmt . SPACE_DOT ambiguousIdentifier typeHint LPAREN argsCall RPAREN LPAREN indexes RPAREN
         ::= 'CALL' ( implicitCallStmt_InStmt? '.' | 'SPACE_DOT' ) ambiguousIdentifier typeHint? ( 'LPAREN' argsCall 'RPAREN' )? ( 'LPAREN' indexes 'RPAREN' )*
referenced by: explicitCallStmt eCS_ProcedureCall: CALL IDENTIFIER typeHint LPAREN argsCall RPAREN LPAREN indexes RPAREN
         ::= 'CALL' 'IDENTIFIER' typeHint? ( 'LPAREN' argsCall 'RPAREN' )? ( 'LPAREN' indexes 'RPAREN' )*
referenced by: explicitCallStmt implicitCallStmt_InBlock: iCS_B_MemberProcedureCall iCS_B_ProcedureCall
         ::= iCS_B_MemberProcedureCall
           | iCS_B_ProcedureCall
referenced by: blockStmt iCS_B_MemberProcedureCall: SPACE_DOT implicitCallStmt_InStmt . ambiguousIdentifier typeHint argsCall LPAREN indexes RPAREN
         ::= ( 'SPACE_DOT' | implicitCallStmt_InStmt? '.' ) ambiguousIdentifier typeHint? argsCall? ( 'LPAREN' indexes 'RPAREN' )*
referenced by: implicitCallStmt_InBlock iCS_B_ProcedureCall: IDENTIFIER argsCall LPAREN indexes RPAREN
         ::= 'IDENTIFIER' argsCall? ( 'LPAREN' indexes 'RPAREN' )?
referenced by: implicitCallStmt_InBlock argsCall: , argCall , argCall
argsCall ::= ','* argCall ( ',' argCall? )*
referenced by: eCS_MemberProcedureCall eCS_ProcedureCall iCS_B_MemberProcedureCall iCS_B_ProcedureCall iCS_S_ProcedureOrArrayCall mCS_S_ProcedureOrArrayCall argCall: valueStmt referenced by: argsCall variableStmt: DIM STATIC visibility WITHEVENTS variableListStmt
         ::= ( 'DIM' | 'STATIC' | visibility ) 'WITHEVENTS'? variableListStmt
referenced by: blockStmt moduleDeclarationsElement withStmt: WITH implicitCallStmt_InStmt NEW type_ endOfStatement block END_WITH
withStmt ::= 'WITH' ( implicitCallStmt_InStmt | 'NEW' type_ ) endOfStatement block? 'END_WITH'
referenced by: blockStmt variableListStmt: variableSubStmt ,
         ::= variableSubStmt ( ',' variableSubStmt )*
referenced by: variableStmt variableSubStmt: IDENTIFIER LPAREN subscripts RPAREN typeHint asTypeClause
         ::= 'IDENTIFIER' ( 'LPAREN' subscripts? 'RPAREN' )? typeHint? asTypeClause?
referenced by: variableListStmt indexes: valueStmt ,
indexes  ::= valueStmt ( ',' valueStmt )*
referenced by: eCS_MemberProcedureCall eCS_ProcedureCall iCS_B_MemberProcedureCall iCS_B_ProcedureCall iCS_S_MembersCall iCS_S_ProcedureOrArrayCall iCS_S_VariableOrProcedureCall mCS_S_ProcedureOrArrayCall mCS_S_VariableOrProcedureCall subscript_: valueStmt TO valueStmt
         ::= valueStmt ( 'TO' valueStmt )?
referenced by: subscripts subscripts: subscript_ ,
         ::= subscript_ ( ',' subscript_ )*
referenced by: redimSubStmt variableSubStmt argList: LPAREN arg , RPAREN
argList  ::= 'LPAREN' ( arg ( ',' arg )* )? 'RPAREN'
referenced by: functionStmt propertyGetStmt propertyLetStmt propertySetStmt subStmt valueStmt: literal implicitCallStmt_InStmt IDENTIFIER ASSIGN NEW MINUS PLUS NOT valueStmt IS ISNOT GEQ LEQ GT LT NEQ EQ XOR OR AND PLUS MINUS AMPERSAND MULT DIV IDIV MOD POW valueStmt LPAREN valueStmt RPAREN
         ::= literal
           | implicitCallStmt_InStmt
           | ( 'IDENTIFIER' 'ASSIGN' | 'NEW' | 'MINUS' | 'PLUS' | 'NOT' | valueStmt ( 'IS' | 'ISNOT' | 'GEQ' | 'LEQ' | 'GT' | 'LT' | 'NEQ' | 'EQ' | 'XOR' | 'OR' | 'AND' | 'PLUS' | 'MINUS' | 'AMPERSAND' | 'MULT' | 'DIV' | 'IDIV' | 'MOD' | 'POW' ) ) valueStmt
           | 'LPAREN' valueStmt 'RPAREN'
referenced by: argCall argDefaultValue doLoopStmt eraseStmt forEachStmt forNextStmt ifBlockStmt ifElseIfBlockStmt ifThenElseStmt indexes letStmt sC_Selection selectCaseStmt setStmt subscript_ valueStmt whileWendStmt implicitCallStmt_InStmt: iCS_S_MembersCall iCS_S_VariableOrProcedureCall iCS_S_ProcedureOrArrayCall
         ::= iCS_S_MembersCall
           | iCS_S_VariableOrProcedureCall
           | iCS_S_ProcedureOrArrayCall
referenced by: attributeStmt eCS_MemberProcedureCall iCS_B_MemberProcedureCall letStmt redimSubStmt setStmt valueStmt withStmt iCS_S_MembersCall: iCS_S_VariableOrProcedureCall iCS_S_ProcedureOrArrayCall iCS_S_MemberCall iCS_S_SpaceMemberCall iCS_S_MemberCall LPAREN indexes RPAREN referenced by: implicitCallStmt_InStmt iCS_S_MemberCall: . mCS_S_VariableOrProcedureCall mCS_S_ProcedureOrArrayCall referenced by: iCS_S_MembersCall iCS_S_SpaceMemberCall: SPACE_DOT mCS_S_VariableOrProcedureCall mCS_S_ProcedureOrArrayCall
         ::= 'SPACE_DOT' ( mCS_S_VariableOrProcedureCall | mCS_S_ProcedureOrArrayCall )
referenced by: iCS_S_MembersCall mCS_S_ProcedureOrArrayCall: ambiguousIdentifier typeHint LPAREN argsCall RPAREN indexes LPAREN
         ::= ambiguousIdentifier typeHint? 'LPAREN' argsCall? 'RPAREN' ( 'LPAREN' indexes 'RPAREN' )*
referenced by: iCS_S_MemberCall iCS_S_SpaceMemberCall iCS_S_ProcedureOrArrayCall: IDENTIFIER typeHint LPAREN argsCall RPAREN indexes LPAREN
         ::= 'IDENTIFIER' typeHint? 'LPAREN' argsCall? 'RPAREN' ( 'LPAREN' indexes 'RPAREN' )*
referenced by: iCS_S_MembersCall implicitCallStmt_InStmt iCS_S_VariableOrProcedureCall: IDENTIFIER typeHint LPAREN indexes RPAREN
         ::= 'IDENTIFIER' typeHint? ( 'LPAREN' indexes 'RPAREN' )*
referenced by: iCS_S_MembersCall implicitCallStmt_InStmt mCS_S_VariableOrProcedureCall: ambiguousIdentifier typeHint LPAREN indexes RPAREN
         ::= ambiguousIdentifier typeHint? ( 'LPAREN' indexes 'RPAREN' )*
referenced by: iCS_S_MemberCall iCS_S_SpaceMemberCall literal: DOUBLELITERAL INTEGERLITERAL STRINGLITERAL NOTHING NULL TRUE FALSE DATELITERAL
literal  ::= 'DOUBLELITERAL'
           | 'INTEGERLITERAL'
           | 'STRINGLITERAL'
           | 'NOTHING'
           | 'NULL'
           | 'TRUE'
           | 'FALSE'
           | 'DATELITERAL'
referenced by: attributeStmt valueStmt typeHint: & % # ! @ $
typeHint ::= '&'
           | '%'
           | '#'
           | '!'
           | '@'
           | '$'
referenced by: arg eCS_MemberProcedureCall eCS_ProcedureCall forEachStmt forNextStmt functionStmt iCS_B_MemberProcedureCall iCS_S_ProcedureOrArrayCall iCS_S_VariableOrProcedureCall mCS_S_ProcedureOrArrayCall mCS_S_VariableOrProcedureCall propertyGetStmt variableSubStmt arg: OPTIONAL BYVAL BYREF PARAMARRAY IDENTIFIER typeHint LPAREN RPAREN asTypeClause argDefaultValue
arg      ::= 'OPTIONAL'? ( 'BYVAL' | 'BYREF' )? 'PARAMARRAY'? 'IDENTIFIER' typeHint? ( 'LPAREN' 'RPAREN' )? asTypeClause? argDefaultValue?
referenced by: argList argDefaultValue: EQ valueStmt
         ::= 'EQ' valueStmt
referenced by: arg asTypeClause: AS NEW type_
         ::= 'AS' 'NEW'? type_
referenced by: arg forNextStmt functionStmt propertyGetStmt redimSubStmt variableSubStmt type_: baseType complexType LPAREN RPAREN
type_    ::= ( baseType | complexType ) ( 'LPAREN' 'RPAREN' )?
referenced by: asTypeClause withStmt complexType: IDENTIFIER . ambiguousIdentifier
         ::= 'IDENTIFIER' ( '.' ambiguousIdentifier )*
referenced by: type_ baseType: BOOLEAN BYTE DOUBLE INTEGER LONG SINGLE VARIANT STRING DATE
baseType ::= 'BOOLEAN'
           | 'BYTE'
           | 'DOUBLE'
           | 'INTEGER'
           | 'LONG'
           | 'SINGLE'
           | 'VARIANT'
           | 'STRING'
           | 'DATE'
referenced by: type_ ambiguousIdentifier: ALIAS AND ATTRIBUTE AS BEGIN BOOLEAN BYVAL BYREF BYTE CALL CASE CONST DATE DECLARE DEFBOOL DEFBYTE DEFDATE DEFDBL DEFDEC DEFCUR DEFINT DEFLNG DEFOBJ DEFSNG DEFSTR DEFVAR DIM DO DOUBLE EACH ELSE ELSEIF END ENUM EQV ERASE EVENT FALSE FRIEND FOR FUNCTION GET GLOBAL GOSUB GOTO IF IMPLEMENTS IN ISNOT IS INTEGER LONG LOOP LEN LET LIB LIKE LSET MOD NEXT NEW NOT NOTHING NULL ON OPTIONAL OR PARAMARRAY PRESERVE PRIVATE PTRSAFE PUBLIC RAISEEVENT REDIM RESET RESUME RETURN SELECT SET SINGLE STATIC STEP STOP STRING SUB THEN TO TRUE TYPEOF UNTIL VARIANT WEND WHILE WITH WITHEVENTS XOR IMP IDENTIFIER
         ::= 'ALIAS'
           | 'AND'
           | 'ATTRIBUTE'
           | 'AS'
           | 'BEGIN'
           | 'BOOLEAN'
           | 'BYVAL'
           | 'BYREF'
           | 'BYTE'
           | 'CALL'
           | 'CASE'
           | 'CONST'
           | 'DATE'
           | 'DECLARE'
           | 'DEFBOOL'
           | 'DEFBYTE'
           | 'DEFDATE'
           | 'DEFDBL'
           | 'DEFDEC'
           | 'DEFCUR'
           | 'DEFINT'
           | 'DEFLNG'
           | 'DEFOBJ'
           | 'DEFSNG'
           | 'DEFSTR'
           | 'DEFVAR'
           | 'DIM'
           | 'DO'
           | 'DOUBLE'
           | 'EACH'
           | 'ELSE'
           | 'ELSEIF'
           | 'END'
           | 'ENUM'
           | 'EQV'
           | 'ERASE'
           | 'EVENT'
           | 'FALSE'
           | 'FRIEND'
           | 'FOR'
           | 'FUNCTION'
           | 'GET'
           | 'GLOBAL'
           | 'GOSUB'
           | 'GOTO'
           | 'IF'
           | 'IMPLEMENTS'
           | 'IN'
           | 'ISNOT'
           | 'IS'
           | 'INTEGER'
           | 'LONG'
           | 'LOOP'
           | 'LEN'
           | 'LET'
           | 'LIB'
           | 'LIKE'
           | 'LSET'
           | 'MOD'
           | 'NEXT'
           | 'NEW'
           | 'NOT'
           | 'NOTHING'
           | 'NULL'
           | 'ON'
           | 'OPTIONAL'
           | 'OR'
           | 'PARAMARRAY'
           | 'PRESERVE'
           | 'PRIVATE'
           | 'PTRSAFE'
           | 'PUBLIC'
           | 'RAISEEVENT'
           | 'REDIM'
           | 'RESET'
           | 'RESUME'
           | 'RETURN'
           | 'SELECT'
           | 'SET'
           | 'SINGLE'
           | 'STATIC'
           | 'STEP'
           | 'STOP'
           | 'STRING'
           | 'SUB'
           | 'THEN'
           | 'TO'
           | 'TRUE'
           | 'TYPEOF'
           | 'UNTIL'
           | 'VARIANT'
           | 'WEND'
           | 'WHILE'
           | 'WITH'
           | 'WITHEVENTS'
           | 'XOR'
           | 'IMP'
           | 'IDENTIFIER'
referenced by: complexType eCS_MemberProcedureCall forEachStmt forNextStmt goToStmt iCS_B_MemberProcedureCall mCS_S_ProcedureOrArrayCall mCS_S_VariableOrProcedureCall resumeStmt   ... generated by RR - Railroad Diagram Generator R R