module IBAF-Start imports IBAF-Expressions IBAF-Statements Funcons // Language "IBAFlang" lexical syntax // Language LEX-keyword = "else" LEX-keyword = "false" LEX-keyword = "if" LEX-keyword = "true" LEX-keyword = "while" LEX-keyword = "int" syntax // Language context-free syntax // Language L-start.L-start--L-pgm = L-pgm L-pgm.L-pgm--R-int-L-idlist-SEMI-L-stmt = "int" L-idlist ";" L-stmt L-idlist.L-idlist--L-id-C-COMMA-L-idlist-D-Q = L-id L-COMMA-L-idlist? L-COMMA-L-idlist.L-COMMA-L-idlist--COMMA-L-idlist = "," L-idlist L-keyword.LEX-keyword = LEX-keyword context-free syntax // Semantics FCT.T-start = "start" "[:" L-start ":]" FCT.T-run = "run" "[:" L-pgm ":]" FCT-SEQ.T-declare-int-vars = "declare-int-vars" "[:" L-idlist ":]" FCT-Quoted.LEX-keyword = LEX-keyword context-free syntax // Desugaring variables // Meta-variables L-start = "(:START" [1-9]? ":)" {prefer} L-start? = "(:START" [1-9]? "?:)" {prefer} L-start* = "(:START" [1-9]? "*:)" {prefer} L-start+ = "(:START" [1-9]? "+:)" {prefer} L-pgm = "(:Pgm" [1-9]? ":)" {prefer} L-pgm? = "(:Pgm" [1-9]? "?:)" {prefer} L-pgm* = "(:Pgm" [1-9]? "*:)" {prefer} L-pgm+ = "(:Pgm" [1-9]? "+:)" {prefer} L-idlist = "(:IL" [1-9]? ":)" {prefer} L-idlist? = "(:IL" [1-9]? "?:)" {prefer} L-idlist* = "(:IL" [1-9]? "*:)" {prefer} L-idlist+ = "(:IL" [1-9]? "+:)" {prefer} // SDF comments lexical syntax LEX-id = LEX-keyword {reject} lexical restrictions LEX-id -/- [A-Za-z0-9] context-free syntax L-exp.L-exp--L-exp-PLUS-L-exp = L-exp "+" L-exp {assoc} L-exp.L-exp--L-exp-AMPERSAND-AMPERSAND-L-exp = L-exp "&&" L-exp {assoc} L-stmt.L-stmt--L-stmt-L-stmt = L-stmt L-stmt {right} sorts // ASTs T-start