module IBAF-Statements imports IBAF-Expressions Funcons // Language "IBAFlang" lexical syntax // Language // # Statements // # Handling parameter declarations // # Handling variable declarations syntax // Language // # Statements // # Handling parameter declarations // # Handling variable declarations context-free syntax // Language // # Statements L-block.L-block--LBRACE-L-statement-S-RBRACE = "{" L-statement* "}" L-statement.L-statement--L-block = L-block L-statement.L-statement--R-print-L-exp-SEMI = "print" L-exp ";" L-statement.L-statement--R-int-L-id-SEMI = "int" L-id ";" L-statement.L-statement--L-id-EQUALS-L-exp-SEMI = L-id "=" L-exp ";" L-statement.L-statement--R-int-L-id-EQUALS-L-exp-SEMI = "int" L-id "=" L-exp ";" L-statement.L-statement--R-return-L-exp-Q-SEMI = "return" L-exp? ";" L-statement.L-statement--R-fun-L-id-LPAREN-L-params-RPAREN-L-block = "fun" L-id "(" L-params ")" L-block L-statement.L-statement--R-if-LPAREN-L-exp-RPAREN-L-block-C-R-else-L-block-D-Q = "if" "(" L-exp ")" L-block L-R-else-L-block? L-statement.L-statement--R-while-LPAREN-L-exp-RPAREN-L-block = "while" "(" L-exp ")" L-block L-R-else-L-block.L-R-else-L-block--R-else-L-block = "else" L-block L-params.L-params--L-id-C-COMMA-L-params-D-Q = L-id L-COMMA-L-params? L-COMMA-L-params.L-COMMA-L-params--COMMA-L-params = "," L-params // # Handling parameter declarations // # Handling variable declarations context-free syntax // Semantics // # Statements FCT.T-execute = "execute" "[:" L-statement* ":]" FCT.T-execute-block = "execute-block" "[:" L-block ":]" // # Handling parameter declarations FCT-SEQ.T-collect-params = "collect-params" "[:" L-params ":]" // # Handling variable declarations FCT-SEQ.T-collect-declared-vars = "collect-declared-vars" "[:" L-statement* ":]" context-free syntax // Desugaring // # Statements // # Handling parameter declarations // # Handling variable declarations variables // Meta-variables // # Statements L-block = "(:Block" [1-9]? ":)" {prefer} L-block? = "(:Block" [1-9]? "?:)" {prefer} L-block* = "(:Block" [1-9]? "*:)" {prefer} L-block+ = "(:Block" [1-9]? "+:)" {prefer} L-statement* = "..." [1-9]? {prefer} L-statement = "(:Stmt" [1-9]? ":)" {prefer} L-statement? = "(:Stmt" [1-9]? "?:)" {prefer} L-statement* = "(:Stmt" [1-9]? "*:)" {prefer} L-statement+ = "(:Stmt" [1-9]? "+:)" {prefer} L-params = "(:Params" [1-9]? ":)" {prefer} L-params? = "(:Params" [1-9]? "?:)" {prefer} L-params* = "(:Params" [1-9]? "*:)" {prefer} L-params+ = "(:Params" [1-9]? "+:)" {prefer} // # Handling parameter declarations // # Handling variable declarations // SDF comments // # Statements // # Handling parameter declarations // # Handling variable declarations sorts // ASTs T-start