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