- (FOREACHleft, RBRACEright)))
- | CASE pexp matches
- (BITEM (Case_i (pexp, #1 matches), (CASEleft, matchesright)))
- | TRY LBRACE block RBRACE catches
- (BITEM (TryCatch_i (block, catches), (TRYleft, catchesright)))
-
-ifte : ELSE LBRACE block RBRACE (([], SOME block), (ELSEleft, RBRACEright))
- | ELSE IF LPAREN exp RPAREN LBRACE block RBRACE ifte (let val ((L, O), _) = ifte in
- (((exp, block) :: L, O), (ELSEleft, ifteright))
- end)
- | (([], NONE), (0, 0))
+ (FOREACHleft, ENDright)))
+ | SWITCH exp OF matches END
+ (BITEM (Case_i (exp, List.rev (#1 matches)), (SWITCHleft, ENDright)))
+ | TRY block WITH catches END
+ (BITEM (TryCatch_i (block, List.rev catches), (TRYleft, ENDright)))
+
+elseOpt : (NONE)
+ | ELSE block (SOME block)