BNF Syntax |
Top Previous |
<Unit> ::= [<BR>] {<Decl>} END_OF_FILE
<Decl> ::= {<StmtList> | <FuncDecl> | <SubDecl>}
<FuncDecl> ::= Function <Identifier> ["(" <ParamList> ")"] <BR> <StmtList> End Function <BR>
<SubDecl> ::= Sub <Identifier> ["(" <ParamList> ")"] <BR> <StmtList> End Sub <BR>
<ParamList> ::= [<ParamModifier> <Identifier> {"," <ParamModifier> <Identifier>}]
<ParamModifier> ::= [ByRef | ByVal]
<Statement> ::= <ExprStmt> | <SetStmt> | <EraseStmt> | <CallStmt> | <ExitStmt> | <DimStmt> | <RedimStmt> | <ForStmt> | <IfStmt> | <DoLoopStmt> | <SelectStmt> | <TryStmt> | <ThrowStmt> | <ReturnStmt>
<StmtList> ::= {<Statement> <BR>}
<ReturnStmt> ::= Return [<Expression>]
<TryStmt> ::= Try <BR> <StmtList> {Catch [<Identifier> As <Expression>] <BR> <StmtList>} [Finally <BR> <StmtList>] End Try
<ThrowStmt> ::= Throw [<Expression>]
<DoLoopStmt> ::= Do ((<WUExpr> [<BR>] <StmtList> Loop) | (<BR> <StmtList> Loop [<WUExpr>]))
<WUExpr> ::= (While | Until) <Expression>
<IfStmt> ::= If <Expression> Then ((<StmtList> [Else <StmtList>]) | (<BR> <StmtList> {ElseIf <Expression> Then <BR> <StmtList>} [Else <BR> <StmtList>] End If))
<ForStmt> ::= For <Identifier> "=" <Expression> To <Expression> [Step <Expression>] <BR> <StmtList> Next
<ExitStmt> ::= Exit (For | Do | Function | Sub)
<SelectStmt> ::= Select Case <Expression> <BR> {Case ((<Expression> {"," <Expression>}) | Else) [<BR>] <StmtList>} End Select
<CallStmt> ::= Call <Designator>
<EraseStmt> ::= Erase <Designator>
<SetStmt> ::= Set <Designator> "=" <Expression>
<DimStmt> ::= Dim <VarDec> {"," <VarDec>}
<RedimStmt> ::= Redim [Preserve] <VarDec> {"," <VarDec>}
<VarDecl> ::= <Identifier> ["(" [<ArrayDim>] ")" [As <Identifier>] | "=" <Expression>] // '='... only for dim.
<ArrayDim> ::= <Expression> {"," <Expression>}
<ExprStmt> ::= <Designator> ["=" <Expression> | [","] <Expression> {"," <Expression>}]
<Expression> ::= <EqvExpr> {Imp <EqvExpr>}
<EqvExpr> ::= <XorExpr> {Eqv <XorExpr>}
<XorExpr> ::= <OrExpr> {Xor <OrExpr>}
<OrExpr> ::= <AndExpr> {Or <AndExpr>}
<AndExpr> ::= <CompareExpr> {And <CompareExpr>}
<CompareExpr> ::= <TypeOfExpr> {<CompareOp> <TypeOfExpr>}
<CompareOp> ::= Is [Not] | ">=" | "=<" | ">" | "<" | "<>" | "="
<TypeOfExpr> ::= <ConcatExpr> | TypeOf <TypeOfExpr> [Is <ConcatExpr>]
<ConcatExpr> ::= <AddExpr> {"&" <AddExpr>}
<AddExpr> ::= <ModExpr> {<AddOp> <ModExpr>}
<AddOp> ::= "+" | "-"
<ModExpr> ::= <MultIntExpr> {Mod <MultIntExpr>}
<MultIntExpr> ::= <MultExpr> {"\" <MultExpr>}
<MultExpr> ::= <ExpExpr> {<MultOp> <ExpExpr>}
<MultOp> ::= "*" | "/"
<ExpExpr> ::= <ValueExpr> {"^" <ValueExpr>}
<ValueExpr> ::= <Designator> | <NewExpr> | True | False | INT_LITERAL | FLOAT_LITERAL | STRING_LITERAL | DATE_LITERAL | Nothing | Null | Empty | "+" <ValueExpr> | "-" <ValueExpr> | Not <ValueExpr> | "(" <Expression> ")"
<NewExpr> ::= <Identifier> {"." <Identifier>} [<Arguments>] <DesignatorTail>
<Designator> ::= <Identifier> <DesignatorTail>
<DesignatorTail> ::= {"." <Identifier> | <Arguments>}
<Arguments> ::= "(" [<Expression> {"," <Expression>}] ")"
<BR> ::= (BR | ":") {BR | ":"}
<Identifier> ::= IDENTIFIER |