Blame camlp4/unmaintained/etc/pa_ru.ml

Packit 1f8b6b
(* camlp4r pa_extend.cmo q_MLast.cmo *)
Packit 1f8b6b
(***********************************************************************)
Packit 1f8b6b
(*                                                                     *)
Packit 1f8b6b
(*                             Camlp4                                  *)
Packit 1f8b6b
(*                                                                     *)
Packit 1f8b6b
(*        Daniel de Rauglaudre, projet Cristal, INRIA Rocquencourt     *)
Packit 1f8b6b
(*                                                                     *)
Packit 1f8b6b
(*  Copyright 1998 Institut National de Recherche en Informatique et   *)
Packit 1f8b6b
(*  Automatique.  Distributed only by permission.                      *)
Packit 1f8b6b
(*                                                                     *)
Packit 1f8b6b
(***********************************************************************)
Packit 1f8b6b
Packit 1f8b6b
Packit 1f8b6b
Packit 1f8b6b
open Pcaml;
Packit 1f8b6b
Packit 1f8b6b
value o2b =
Packit 1f8b6b
  fun
Packit 1f8b6b
  [ Some _ -> True
Packit 1f8b6b
  | None -> False ]
Packit 1f8b6b
;
Packit 1f8b6b
Packit 1f8b6b
EXTEND
Packit 1f8b6b
  GLOBAL: expr;
Packit 1f8b6b
  expr: LEVEL "top"
Packit 1f8b6b
    [ [ "do"; "{"; seq = sequence; "}" ->
Packit 1f8b6b
          match seq with
Packit 1f8b6b
          [ [e] -> e
Packit 1f8b6b
          | _ -> <:expr< do { $list:seq$ } >> ] ] ]
Packit 1f8b6b
  ;
Packit 1f8b6b
  sequence:
Packit 1f8b6b
    [ [ "let"; o = OPT "rec"; l = LIST1 let_binding SEP "and"; [ "in" | ";" ];
Packit 1f8b6b
        el = SELF ->
Packit 1f8b6b
          let e =
Packit 1f8b6b
            match el with
Packit 1f8b6b
            [ [e] -> e
Packit 1f8b6b
            | _ -> <:expr< do { $list:el$ } >> ]
Packit 1f8b6b
          in
Packit 1f8b6b
          [ <:expr< let $opt:o2b o$ $list:l$ in $e$ >> ]
Packit 1f8b6b
      | e = expr; ";"; el = SELF ->
Packit 1f8b6b
          let e = let _loc = MLast.loc_of_expr e in <:expr< ($e$ : unit) >> in
Packit 1f8b6b
          [e :: el]
Packit 1f8b6b
      | e = expr; ";" -> [e]
Packit 1f8b6b
      | e = expr -> [e] ] ]
Packit 1f8b6b
  ;
Packit 1f8b6b
END;