| False | True
| Or of 'hcons * 'hcons
| And of 'hcons * 'hcons
- | Atom of ([ `Left | `Right ] * bool * State.t)
+ | Atom of ([ `Left | `Right | `Epsilon ] * bool * State.t)
| Pred of Tree.Predicate.t
type 'hcons node = {
match dir with
| `Left -> Pretty.down_arrow, Pretty.subscript 1
| `Right -> Pretty.down_arrow, Pretty.subscript 2
+ | `Epsilon -> Pretty.epsilon, ""
in
fprintf fmt "%s%s" a_str d_str;
State.print fmt s;
let ss = match d with
| `Left -> (si,StateSet.empty,si),empty_triple
| `Right -> empty_triple,(si,StateSet.empty,si)
+ | `Epsilon -> empty_triple, empty_triple
in fst (cons (Atom(d,p,s)) (Atom(d,not p,s)) ss ss 1 1)
let pred_ p =
| True
| Or of 'a * 'a
| And of 'a * 'a
- | Atom of ([ `Left |`Right ] * bool * State.t)
+ | Atom of ([ `Left |`Right | `Epsilon ] * bool * State.t)
| Pred of Tree.Predicate.t
type t
val true_ : t
val false_ : t
val atom_ :
- [ `Left | `Right ] -> bool -> StateSet.elt -> t
+ [ `Left | `Right | `Epsilon ] -> bool -> StateSet.elt -> t
val pred_ : Tree.Predicate.t -> t
val not_ : t -> t
val or_ : t -> t -> t
val ( +| ) : t -> t -> t
val ( *& ) : t -> t -> t
val ( *+ ) :
- [ `Left | `Right ] -> StateSet.elt -> t
+ [ `Left | `Right | `Epsilon ] -> StateSet.elt -> t
val ( *- ) :
- [ `Left | `Right ] -> StateSet.elt -> t
+ [ `Left | `Right | `Epsilon ] -> StateSet.elt -> t
end
| Formula.Atom (`Right, b, q) ->
Formula.of_bool(b == (StateSet.mem q s2)),
if b && StateSet.mem q auto.topdown_marking_states then [ResJIT.RIGHT q] else []
+ | Formula.Atom (`Epsilon, _, _) -> assert false
| Formula.Or(f1, f2) ->
let b1, i1 = loop f1 in