LMD ScriptPack Guide


BNF Syntax


<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