anchor.diff:                  else
                       []
               natom<-natom+1
  -            op' @ [c'] @ (re2post' paren {s with natom=natom} t)
  +            op' @ [ c ] @ (re2post' paren {s with natom=natom} tail)
   
   let re2post(re:string)=
  -    let result = re2post' [] {natom=0;nalt=0} ( re.ToCharArray() |> Array.toList )
  +    let result = re2post' [] { natom=0; nalt=0 } ( re.ToCharArray() |> Array.toList )
       new String(result |> List.toArray)
  
positive.code:             failwith "unmatched!"
          else
              (List.replicate (s.natom-1) '.' ) @ (List.replicate s.nalt '|')
      | c:: t ->
          match c with
          | '('->
              if(s.natom > 1) then
                  '.' :: (re2post' paren {s with natom=s.natom-1} t)
              else
                  (re2post' (s:: paren) {natom=0; nalt=0} t)
          | '|'->
              if(s.natom = 0) then
                  failwith "unmatched!";
              else
                  let dots = List.replicate (s.natom-1) '.' 
                  dots @ (re2post' paren {nalt=s.nalt+1; natom=0} t)
          | ')'->
              if(s.natom = 0) then
                  failwith "unmatched!";
  
negative.code:             if(s.natom = 0) then
                  failwith "unmatched!"
              else
                  c::(re2post' paren s tail)
          | _ ->
              let mutable natom = s.natom
              let op' =
                  if(natom > 1) then
  