module IBAF-Statements
            
imports 
  IBAF-Expressions
  Funcons

// Language "IBAFlang"
    
lexical syntax // Language
  
syntax // Language
  
context-free syntax // Language
  L-stmt.L-stmt--L-type-L-id-EQUALS-L-exp-SEMI =
    L-type L-id "=" L-exp ";"
  L-stmt.L-stmt--R-print-LPAREN-L-exp-RPAREN-SEMI =
    "print" "(" L-exp ")" ";"
  L-stmt.L-stmt--L-stmt-L-stmt =
    L-stmt L-stmt
  
  L-type.L-type--R-int =
    "int"
  L-type.L-type--R-bool =
    "bool"
  L-type.L-type--L-id =
    L-id
  
  
context-free syntax // Semantics
  FCT.T-execute =
    "execute" "[:" L-stmt ":]"
  
context-free syntax // Desugaring
  
variables // Meta-variables
  L-stmt = "(:Stmt" [1-9]? ":)" {prefer}
  L-stmt? = "(:Stmt" [1-9]? "?:)" {prefer}
  L-stmt* = "(:Stmt" [1-9]? "*:)" {prefer}
  L-stmt+ = "(:Stmt" [1-9]? "+:)" {prefer}
  L-type = "(:Typ" [1-9]? ":)" {prefer}
  L-type? = "(:Typ" [1-9]? "?:)" {prefer}
  L-type* = "(:Typ" [1-9]? "*:)" {prefer}
  L-type+ = "(:Typ" [1-9]? "+:)" {prefer}
  
// SDF comments
  
sorts // ASTs
  T-start
