C++Script syntax

Program -> [UsesClause]
           [DeclSection]...
           CompoundStmt

UsesClause -> '#' INCLUDE (String/,)...

DeclSection -> ConstSection
            -> ProcedureDeclSection
            -> VarStmt ';'

ConstSection -> '#' DEFINE ConstantDecl

ConstantDecl -> Ident Expression

VarStmt -> Ident Ident [Array] [InitValue] /','...

ArrayDef -> '[' ArrayDim/','... ']'

ArrayDim -> Expression

InitValue -> '=' Expression

Expression -> SimpleExpression [RelOp SimpleExpression]...

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

Term -> Factor [MulOp Factor]...

Factor -> Designator
       -> UnsignedNumber                 
       -> String
       -> '(' Expression ')'             
       -> '!' Factor
       -> '[' SetConstructor ']'         
       -> NewOperator

SetConstructor -> SetNode/','...  

SetNode -> Expression ['..' Expression]  

NewOperator -> NEW Designator

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

AddOp -> '+'
      -> '-'  
      -> '||'
      -> '^'

MulOp -> '*'    
      -> '/'
      -> '%'
      -> '&&'
      -> '<<'   
      -> '>>'

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

ExprList -> Expression/','...

Statement -> [SimpleStatement ';' | StructStmt | EmptyStmt]

EmptyStmt -> ';'

StmtList -> (Statement...)

SimpleStatement -> DeleteStmt
                -> AssignStmt
                -> VarStmt                    
                -> CallStmt                    
                -> ReturnStmt
                -> (BREAK | CONTINUE | EXIT)   

DeleteStmt -> DELETE Designator

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

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

ReturnStmt -> RETURN [Expression]  

StructStmt -> CompoundStmt        
           -> ConditionalStmt
           -> LoopStmt            
           -> TryStmt

CompoundStmt -> '{' [StmtList] '}'

ConditionalStmt -> IfStmt
                -> CaseStmt   

IfStmt -> IF '(' Expression ')' Statement [ELSE Statement]  

CaseStmt -> SWITCH '(' Expression ')' '{' (CaseSelector)... [DEFAULT ':' Statement] '}'  

CaseSelector -> CASE SetConstructor ':' Statement 

LoopStmt -> RepeatStmt  
         -> WhileStmt
         -> ForStmt     

RepeatStmt -> DO Statement [';'] WHILE '(' Expression ')' ';'  

WhileStmt -> WHILE '(' Expression ')' Statement  

ForStmt -> FOR '(' ForStmtItem ';' Expression ';' ForStmtItem ')' Statement  

ForStmtItem -> AssignStmt  
            -> VarStmt
            -> CallStmt
            -> Empty       

TryStmt -> TRY CompoundStmt (FINALLY | EXCEPT) CompoundStmt  

FunctionDecl -> FunctionHeading CompoundStmt

FunctionHeading -> Ident Ident [FormalParameters]

FormalParameters -> '(' [FormalParam/';'...] ')'

FormalParam -> TypeIdent (['&'] Ident [InitValue]/',')...