    [NAME]
    ALL.dao.grammar.statement

    [TITLE]
    Statements

    [DESCRIPTION]

    Drafting in progress.

     0.1   Declaration Statements

       1  ConstSpecifier ::= 'const' | 'global' 'const' | 'const' 'global'
       2  VarSpecifier   ::= 'var' | 'global' | 'static'
       3
       4  ConstDeclItem ::= Identifier [ ( '=' | ':' Type '=' ) ConstExpression ]
       5  VarDeclItem   ::= Identifier [ ( '=' | ':' Type '=' ) Expression ]
       6
       7  ConstDeclaration    ::= ConstSpecifier ConstDeclItem { ',' ConstDeclItem }
       8  VarDeclaration      ::= VarSpecifier   VarDeclItem   { ',' VarDeclItem }
       9
      10  LocalVarDeclaration ::= [ 'var' ] VarDeclItem { ',' VarDeclItem }
      11
      12  DeclarationStmt ::= ConstDeclaration | VarDeclaration

     0.2   Basic Statement

       1  BasicStatement ::= DeclarationStmt | Expression | 'break' | 'skip'

     0.3   If-else Statement

       1  ControlBlock ::= Statement | '{' [ StatementBlock ] '}'
       2
       3  IfElseStmt ::= 'if' '(' [ LocalVarDeclaration ';' ] Expression ')' ControlBlock
       4                 { 'else' 'if' '(' [ LocalVarDeclaration ';' ] Expression  ')' ControlBlock }
       5                 [ 'else' ControlBlock ]

     0.4   For Loop Statement

       1  CFor  ::= 'for' '(' [ LocalVarDeclaration ] ';' [ Expression ] ';' [ ExpressionList ] ')'
       2                ControlBlock
       3
       4  APFor ::= 'for' '(' [ 'var' ] Identifier '=' Expression ':' [ Expression ':' ] Expression ')'
       5                ControlBlock
       6
       7  ForIn ::= 'for' '(' [ 'var' ] Identifier 'in' Expression {';' Identifier 'in' Expression} ')'
       8                ControlBlock
       9
      10  ForStmt ::= APFor | CFor | ForIn

     0.5   While Loop Statement

       1  WhileStmt ::= 'while' '(' [ LocalVarDeclaration ';' ] Expression ')' ControlBlock

     0.6   Do-while Looping Statement

       1  DoWhileStmt ::= 'do' ControlBlock 'while' '(' Expression ')'

     0.7   Switch-case Statement

       1  SwitchCaseStmt ::= 'switch' '(' Expression ')' '{'
       2                     { 'case' Expression [ ( ',' | '...' ) Expression ] ':' ControlBlock }
       3                     [ 'default' ':' ControlBlock ]
       4                     '}'

     0.8   Defer Statement

       1  DeferStmt ::= 'defer' '{' StatementBlock '}'

     0.9   Framed Block Statement

       1  FramedBlock ::= 'frame' [ '(' Expression ')' ] '{' StatementBlock '}'

     0.10   Type Aliasing Statement

       1  TypeAlias ::= 'type' Identifier '=' Type

     0.11   Use Enum Statement

       1  UseEnum ::= 'use' 'enum' Identifier

    Expose the symbols of the enum symbol type to the current namespace.

     0.12   Use Syntax Statement

       1  UseSyntax ::= 'use' 'syntax' Identifier

    Use the syntax in the current file.

     0.13   Use Namespace Statement

       1  UseNamespace ::= 'use' Identifier

    Import the constants and globals from another namespace to the current.

     0.14   Load Statement

       1  LoadStmt ::= 'load' ( String | { Identifier ('.' | '::') } Identifier ) [ 'as' Identifier ]

     0.15   Load Statement

       1  Statement ::= DeclarationStmt
       2              | BasicStatement
       3              | IfElseStmt
       4              | ForStmt
       5              | WhileStmt
       6              | DoWhileStmt
       7              | SwitchCaseStmt
       8              | DeferStmt
       9              | FramedBlock
      10              | TypeAlias
      11              | UseEnum
      12              | UseSyntax
      13              | UseNamespace
      14              | LoadStmt