BasicScript syntax

Program -> Statements             

Statements -> (EOL | StatementList EOL)...   

StatementList -> Statement/':'...   

ImportStmt -> IMPORTS (String/,)...  

DimStmt -> DIM (VarDecl/',')...  

VarDecl -> Ident [Array] [AsClause] [InitValue]   

AsClause -> AS Ident   
  
Array -> '[' ArrayDim/','... ']'   

ArrayDim -> Expression   

InitValue -> '=' Expression   

Expression -> SimpleExpression [RelOp SimpleExpression]...  

SimpleExpression -> ['-'] Term [AddOp Term]...  

Term -> Factor [MulOp Factor]...  

Factor -> Designator                      
       -> UnsignedNumber                  
       -> String                          
       -> '(' Expression ')'              
       -> NOT Factor                      
       -> NewOperator                     
       -> '<' FRString '>'                

SetConstructor -> SetNode/','...   

SetNode -> Expression ['..' Expression]   

NewOperator -> NEW Designator   

RelOp -> '>'    
      -> '<'    
      -> '<='   
      -> '>='   
      -> '<>'   
      -> '='    
      -> IN     
      -> IS     

AddOp -> '+'   
      -> '-'   
      -> '&'   
      -> OR    
      -> XOR   

MulOp -> '*'     
      -> '/'     
      -> '\'     
      -> MOD     
      -> AND     

Designator -> [ADDRESSOF] Ident ['.' Ident | '[' ExprList ']' | '(' [ExprList] ')']...   

ExprList -> Expression/','...   

Statement -> BreakStmt
          -> CaseStmt
          -> ContinueStmt
          -> DeleteStmt
          -> DimStmt 
          -> DoStmt
          -> ExitStmt
          -> ForStmt
          -> FuncStmt
          -> IfStmt
          -> ImportStmt 
          -> ProcStmt
          -> ReturnStmt
          -> SetStmt
          -> TryStmt
          -> WhileStmt
          -> WithStmt
          -> AssignStmt
          -> CallStmt   

BreakStmt -> BREAK   

ContinueStmt -> CONTINUE   
  
ExitStmt -> EXIT   
  
DeleteStmt -> DELETE Designator   

SetStmt -> SET AssignStmt   

AssignStmt -> Designator ['+'|'-'|'*'|'/']'=' Expression   

CallStmt -> Designator ['+''+'|'-''-']   

ReturnStmt -> RETURN [Expression]   

IfStmt -> IF Expression THEN ThenStmt   

ThenStmt -> EOL [Statements] [ElseIfStmt | ElseStmt] END IF   
         -> StatementList                                     

ElseIfStmt -> ELSEIF Expression THEN 
              (EOL [Statements] [ElseIfStmt | ElseStmt] | Statement)   
    
ElseStmt -> ELSE (EOL [Statements] | Statement)   
    
CaseStmt -> SELECT CASE Expression EOL 
            (CaseSelector...) [CASE ELSE ':' Statements] END SELECT   

CaseSelector -> CASE SetConstructor ':' Statements  

DoStmt -> DO [Statements] LOOP (UNTIL | WHILE) Expression   

WhileStmt -> WHILE Expression [Statements] WEND   

ForStmt -> FOR Ident '=' Expression TO Expression [STEP Expression] EOL 
           [Statements] NEXT   

TryStmt -> TRY Statements (FINALLY | CATCH) [Statements] END TRY  

WithStmt -> WITH Designator EOL Statements END WITH   

ProcStmt -> SUB Ident [FormalParameters] EOL [Statements] END SUB  

FuncStmt -> FUNCTION Ident [FormalParameters] [AsClause] EOL 
            [Statements] END FUNCTION   

FormalParameters -> '(' (FormalParam/',')... ')'   

FormalParm -> [BYREF | BYVAL] VarList