diff --git a/Driver.ml b/Driver.ml
index d1b904d4..8d902f03 100644
--- a/Driver.ml
+++ b/Driver.ml
@@ -1,35 +1,60 @@
-open Language
-open Expr
-open Stmt
-
-let inc x = x+1
-
-let ( ! ) x = Var x
-let const n = Const n
-let ( + ) x y = Add (x, y)
-let ( * ) x y = Mul (x, y)
-
-let read x = Read x
-let write e = Write e
-let (:=) x e = Assign (x, e)
-let skip = Skip
-let (|>) l r = Seq (l, r)
-
-let parse filename =
- read "x" |>
- read "y" |>
- read "z" |>
- ("z" := !"z" * (!"x" * !"y" + const 1)) |>
- write !"z"
-
-let _ =
- match Sys.argv with
- | [|_; filename|] ->
- let basename = Filename.chop_suffix filename ".expr" in
- let text = X86.compile (parse filename) in
- let asm = basename ^ ".s" in
- let ouch = open_out asm in
- Printf.fprintf ouch "%s\n" text;
- close_out ouch;
- let runtime = try Sys.getenv "RUNTIME" with _ -> "../runtime" in
- Sys.command (Printf.sprintf "gcc -m32 -o %s %s/runtime.o %s.s" basename runtime basename)
+open Language
+open Expr
+open Stmt
+open Ostap
+open GT
+
+ostap (
+ expr : expr "+" expr
+)
+
+let rec parse s =
+ expr id
+ [|
+ left , [ostap ("+"), (fun x y -> `Add (x, y)); ostap ("-"), (fun x y -> `Sub (x, y))];
+ left , [ostap ("*"), (fun x y -> `Mul (x, y)); ostap ("/"), (fun x y -> `Div (x, y))]
+ |]
+ primary
+ s
+ and ostap (primary: n: DECIMAL {Const n}
+ | e:IDENT {Var e}
+ | -"(" parse -")")
+
+ostap (
+ simp: x:IDENT ":=" e:expr {Assign (x, e)}
+ | %"read" "(" x:IDENT ")" {Read x}
+ | %"write" "(" e:expr ")" {Write e}
+ | %"skip" {Skip};
+
+ stmt: s:simp ";" d:stmt {Seq (s,d)}
+ | simp
+)
+
+let parse filename =
+ let s = Util.read filename in
+ Util.parse
+ (object
+ inherit Matcher.t s
+ inherit Util.Lexers.ident ["read"; "write"; "skip"] s
+ inherit Util.Lexers.decimal s
+ inherit Util.Lexers.skip [
+ Matcher.Skip.whitespaces " \t\n"
+ ] s
+ end)
+ (ostap (stmt -EOF))
+
+let _ =
+ match Sys.argv with
+ | [|_; filename|] ->
+ match parse filename with
+ | `Ok stmt ->
+ let basename = Filename.chop_suffix filename ".expr" in
+ let text = X86.compile stmt in
+ Printf.printf "%s\n" (show (Stmt.t) stmt);
+ let asm = basename ^ ".s" in
+ let ouch = open_out asm in
+ Printf.fprintf ouch "%s\n" text;
+ close_out ouch;
+ let runtime = try Sys.getenv "RUNTIME" with _ -> "../runtime" in
+ ignore @@ Sys.command (Printf.sprintf "gcc -m32 -o %s %s/runtime.o %s.s" basename runtime basename)
+ | `Fail e -> Printf.eprintf "Parsing error: %s\n" e
diff --git a/Driver.ml~ b/Driver.ml~
new file mode 100644
index 00000000..b517c2ad
--- /dev/null
+++ b/Driver.ml~
@@ -0,0 +1,59 @@
+open Language
+open Expr
+open Stmt
+open Ostap
+open GT
+
+ostap (
+ expr : expr "+" expr
+)
+
+ostap (
+ expr: x:mull "+" y:expr {Add (x,y)}
+ | mull;
+ mull: x:prim "*" y:mull {Mul (x,y)}
+ | prim;
+ prim: n:DECIMAL {Const n}
+ | e:IDENT {Var e}
+ | -"(" expr -")"
+(* | "(" e:expr ")" {e} *)
+)
+
+ostap (
+ simp: x:IDENT ":=" e:expr {Assign (x, e)}
+ | %"read" "(" x:IDENT ")" {Read x}
+ | %"write" "(" e:expr ")" {Write e}
+ | %"skip" {Skip};
+
+ stmt: s:simp ";" d:stmt {Seq (s,d)}
+ | simp
+)
+
+let parse filename =
+ let s = Util.read filename in
+ Util.parse
+ (object
+ inherit Matcher.t s
+ inherit Util.Lexers.ident ["read"; "write"; "skip"] s
+ inherit Util.Lexers.decimal s
+ inherit Util.Lexers.skip [
+ Matcher.Skip.whitespaces " \t\n"
+ ] s
+ end)
+ (ostap (stmt -EOF))
+
+let _ =
+ match Sys.argv with
+ | [|_; filename|] ->
+ match parse filename with
+ | `Ok stmt ->
+ let basename = Filename.chop_suffix filename ".expr" in
+ let text = X86.compile stmt in
+ Printf.printf "%s\n" (show (Stmt.t) stmt);
+ let asm = basename ^ ".s" in
+ let ouch = open_out asm in
+ Printf.fprintf ouch "%s\n" text;
+ close_out ouch;
+ let runtime = try Sys.getenv "RUNTIME" with _ -> "../runtime" in
+ ignore @@ Sys.command (Printf.sprintf "gcc -m32 -o %s %s/runtime.o %s.s" basename runtime basename)
+ | `Fail e -> Printf.eprintf "Parsing error: %s\n" e
diff --git a/Interpret.ml b/Interpret.ml
deleted file mode 100644
index 12c5dddb..00000000
--- a/Interpret.ml
+++ /dev/null
@@ -1,49 +0,0 @@
-open Language
-
-(* Interpreter for expressions *)
-module Expr =
- struct
-
- open Expr
-
- let rec eval expr st =
- let eval' e = eval e st in
- match expr with
- | Var x -> st x
- | Const z -> z
- | Add (x, y) -> eval' x + eval' y
- | Mul (x, y) -> eval' x * eval' y
-
- end
-
-(* Interpreter for statements *)
-module Stmt =
- struct
-
- open Stmt
-
- (* State update primitive *)
- let update st x v = fun y -> if y = x then v else st y
-
- let rec eval stmt ((st, input, output) as conf) =
- match stmt with
- | Skip -> conf
- | Assign (x, e) -> (update st x (Expr.eval e st), input, output)
- | Read x ->
- let z :: input' = input in
- (update st x z, input', output)
- | Write e -> (st, input, output @ [Expr.eval e st])
- | Seq (s1, s2) -> eval s1 conf |> eval s2
-
- end
-
-module Program =
- struct
-
- let eval p input =
- let (_, _, output) =
- Stmt.eval p ((fun _ -> failwith "undefined variable"), input, [])
- in
- output
-
- end
diff --git a/Language.ml b/Language.ml
deleted file mode 100644
index 891f782b..00000000
--- a/Language.ml
+++ /dev/null
@@ -1,34 +0,0 @@
-open GT
-
-(* AST for expressions *)
-module Expr =
- struct
-
- @type t =
- | Var of string
- | Const of int
- | Add of t * t
- | Mul of t * t with show
-
- end
-
-(* AST statements/commands *)
-module Stmt =
- struct
-
- @type t =
- | Skip
- | Assign of string * Expr.t
- | Read of string
- | Write of Expr.t
- | Seq of t * t with show
-
- end
-
-module Program =
- struct
-
- type t = Stmt.t
-
- end
-
diff --git a/Makefile b/Makefile
index f9ca8c5c..2cdeea41 100644
--- a/Makefile
+++ b/Makefile
@@ -1,20 +1,25 @@
-all: Driver.cmo
- ocamlc -rectypes -o compiler -I `ocamlfind -query GT` -I `ocamlfind -query ostap` -I `ocamlfind -query re.str` re.cma re_emacs.cma re_str.cma GT.cma ostap.cmo Language.cmo Interpret.cmo StackMachine.cmo X86.cmo Driver.cmo
+MKDIR ?= mkdir -vp
+CP ?= cp
-Language.cmo: Language.ml
- ocamlc -rectypes -c -pp "camlp5o -I `ocamlfind -query GT.syntax.all` pa_gt.cmo -I `ocamlfind -query ostap` pa_ostap.cmo -L `ocamlfind -query GT.syntax.all`" -I `ocamlfind -query GT` -I `ocamlfind -query ostap` GT.cma $<
+OB=ocamlbuild -cflag -g -no-hygiene -use-ocamlfind -plugin-tag "package(str)" -classic-display
+ifdef OBV
+OB += -verbose 6
+endif
-Interpret.cmo: Interpret.ml Language.cmo
- ocamlc -rectypes -c -pp "camlp5o -I `ocamlfind -query GT.syntax.all` pa_gt.cmo -I `ocamlfind -query ostap` pa_ostap.cmo -L `ocamlfind -query GT.syntax.all`" -I `ocamlfind -query GT` -I `ocamlfind -query ostap` GT.cma $<
+BYTE_TARGETS=src/rc.byte
+NATIVE_TARGETS=src/rc.native
-StackMachine.cmo: StackMachine.ml Language.cmo Interpret.cmo
- ocamlc -rectypes -c -pp "camlp5o -I `ocamlfind -query GT.syntax.all` pa_gt.cmo -I `ocamlfind -query ostap` pa_ostap.cmo -L `ocamlfind -query GT.syntax.all`" -I `ocamlfind -query GT` -I `ocamlfind -query ostap` GT.cma $<
+.PHONY: all clean runtime
-X86.cmo: X86.ml StackMachine.cmo
- ocamlc -rectypes -c -pp "camlp5o -I `ocamlfind -query GT.syntax.all` pa_gt.cmo -I `ocamlfind -query ostap` pa_ostap.cmo -L `ocamlfind -query GT.syntax.all`" -I `ocamlfind -query GT` -I `ocamlfind -query ostap` GT.cma $<
+.DEFAULT_GOAL: all
-Driver.cmo: Driver.ml StackMachine.cmo X86.cmo Interpret.cmo
- ocamlc -rectypes -c -pp "camlp5o -I `ocamlfind -query GT.syntax.all` pa_gt.cmo -I `ocamlfind -query ostap` pa_ostap.cmo -L `ocamlfind -query GT.syntax.all`" -I `ocamlfind -query GT` -I `ocamlfind -query ostap` GT.cma Driver.ml
+all: main runtime
-clean:
- rm -Rf *~ *.cmo compiler
+runtime:
+ cd runtime && make all && cd ..
+
+main:
+ $(OB) -Is src $(BYTE_TARGETS) $(NATIVE_TARGETS)
+
+clean:
+ cd runtime && make clean && cd .. && $(RM) -r _build *.log *.native *.byte
diff --git a/Makefile~ b/Makefile~
new file mode 100644
index 00000000..40650142
--- /dev/null
+++ b/Makefile~
@@ -0,0 +1,25 @@
+MKDIR ?= mkdir -vp
+CP ?= cp
+
+OB=ocamlbuild -cflag -g -no-hygiene -use-ocmalfind -plugin-tag "package(str)" -classic-display
+ifdef OBV
+OB += -verbose 6
+endif
+
+BYTE_TARGETS=src/rc.byte
+NATIVE_TARGETS=src/rc.native
+
+.PHONY: all clean runtime
+
+.DEFAULT_GOAL: all
+
+all: main runtime
+
+runtime:
+ cd runtime && make all && cd ..
+
+main:
+ $(OB) -Is src $(BYTE_TARGETS) $(NATIVE_TARGETS)
+
+clean:
+ cd runtime && make clean && cd .. && $(RM) -r _build *.log *.native *.byte
diff --git a/README.md b/README.md
index 53911ac2..533f946f 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,29 @@
Dependencies:
-$ opam pin add GT https://github.com/Kakadu/GT.git -n -y
+`$ opam pin add GT https://github.com/Kakadu/GT.git -n -y`
-$ opam install camlp5 -y
+`$ opam install camlp5 -y`
-$ opam install GT ocamlfind -y
+`$ opam install GT ocamlfind -y`
Build & use:
-$ make
+`$ make`
-$ gcc -m32 -c runtime.c
+`$ gcc -m32 -c runtime.c`
-$ RUNTIME=. ./compiler file.expr
+`$ RUNTIME=. ./compiler file.expr`
-$ ./file
+`$ ./file`
If make fails with an error which states that GT.Syntax.All cannot be found, make sure you initialized and configured opam:
-$ opam init
+`$ opam init`
-$ eval \`opam config env\`
+``$ eval `opam config env` ``
+Ostap library:
+
+`$ opam pin add ostap https://github.com/dboulytchev/ostap.git -n -y`
+
+`$ opam install ostap -y`
diff --git a/StackMachine.ml b/StackMachine.ml
deleted file mode 100644
index 870537a4..00000000
--- a/StackMachine.ml
+++ /dev/null
@@ -1,102 +0,0 @@
-(* Stack Machine *)
-module Instr =
- struct
-
- type t =
- | READ
- | WRITE
- | PUSH of int
- | LD of string
- | ST of string
- | ADD
- | MUL
-
- end
-
-module Program =
- struct
-
- type t = Instr.t list
-
- end
-
-module Interpret =
- struct
-
- open Instr
- open Interpret.Stmt
-
- let run prg input =
- let rec run' prg ((stack, st, input, output) as conf) =
- match prg with
- | [] -> conf
- | i :: prg' ->
- run' prg' (
- match i with
- | READ -> let z :: input' = input in
- (z :: stack, st, input', output)
- | WRITE -> let z :: stack' = stack in
- (stack', st, input, output @ [z])
- | PUSH n -> (n :: stack, st, input, output)
- | LD x -> (st x :: stack, st, input, output)
- | ST x -> let z :: stack' = stack in
- (stack', update st x z, input, output)
- | _ -> let y :: x :: stack' = stack in
- ((match i with ADD -> (+) | _ -> ( * )) x y :: stack',
- st,
- input,
- output
- )
- )
- in
- let (_, _, _, output) =
- run' prg ([],
- (fun _ -> failwith "undefined variable"),
- input,
- []
- )
- in
- output
- end
-
-module Compile =
- struct
-
- open Instr
-
- module Expr =
- struct
-
- open Language.Expr
-
- let rec compile = function
- | Var x -> [LD x]
- | Const n -> [PUSH n]
- | Add (x, y) -> (compile x) @ (compile y) @ [ADD]
- | Mul (x, y) -> (compile x) @ (compile y) @ [MUL]
-
- end
-
- module Stmt =
- struct
-
- open Language.Stmt
-
- let rec compile = function
- | Skip -> []
- | Assign (x, e) -> Expr.compile e @ [ST x]
- | Read x -> [READ; ST x]
- | Write e -> Expr.compile e @ [WRITE]
- | Seq (l, r) -> compile l @ compile r
-
- end
-
- module Program =
- struct
-
- let compile = Stmt.compile
-
- end
-
- end
-
diff --git a/X86.ml b/X86.ml
deleted file mode 100644
index 6ff88b06..00000000
--- a/X86.ml
+++ /dev/null
@@ -1,116 +0,0 @@
-open StackMachine
-open Instr
-
-type opnd = R of int | S of int | L of int | M of string
-
-let regs = [|"%eax"; "%ebx"; "%ecx"; "%esi"; "%edi"; "%edx"; "%esp"; "%ebp"|]
-let nregs = Array.length regs - 3
-
-let [|eax; ebx; ecx; esi; edi; edx; esp; ebp|] = Array.mapi (fun i _ -> R i) regs
-
-type instr =
-| Add of opnd * opnd
-| Mul of opnd * opnd
-| Mov of opnd * opnd
-| Push of opnd
-| Pop of opnd
-| Call of string
-| Ret
-
-let to_string buf code =
- let instr =
- let opnd = function
- | R i -> regs.(i)
- | S i -> Printf.sprintf "%d(%%ebp)" (-i * 4)
- | L i -> Printf.sprintf "$%d" i
- | M s -> s
- in
- function
- | Add (x, y) -> Printf.sprintf "addl\t%s,%s" (opnd x) (opnd y)
- | Mul (x, y) -> Printf.sprintf "imull\t%s,%s" (opnd x) (opnd y)
- | Mov (x, y) -> Printf.sprintf "movl\t%s,%s" (opnd x) (opnd y)
- | Push x -> Printf.sprintf "pushl\t%s" (opnd x)
- | Pop x -> Printf.sprintf "popl\t%s" (opnd x)
- | Call x -> Printf.sprintf "call\t%s" x
- | Ret -> "ret"
- in
- let out s =
- Buffer.add_string buf "\t";
- Buffer.add_string buf s;
- Buffer.add_string buf "\n"
- in
- List.iter (fun i -> out @@ instr i) code
-
-module S = Set.Make (String)
-
-class env =
- object (this)
- val locals = S.empty
- val depth = 0
-
- method allocate = function
- | [] -> this, R 0
- | R i :: _ when i < nregs - 1 -> this, R (i+1)
- | S i :: _ -> {< depth = max depth (i+1) >}, S (i+1)
- | _ -> {< depth = max depth 1 >}, S 1
-
- method local x = {< locals = S.add x locals >}
- method get_locals = S.elements locals
- method get_depth = depth
- end
-
-let rec sint env prg sstack =
- match prg with
- | [] -> env, [], []
- | i :: prg' ->
- let env, code, sstack' =
- match i with
- | PUSH n ->
- let env', s = env#allocate sstack in
- env', [Mov (L n, s)], s :: sstack
- | LD x ->
- let env' = env#local x in
- let env'', s = env'#allocate sstack in
- env'', [Mov (M x, s)], s :: sstack
- | ST x ->
- let env' = env#local x in
- let s :: sstack' = sstack in
- env', [Mov (s, M x)], sstack'
- | READ ->
- env, [Call "lread"], [eax]
- | WRITE ->
- env, [Push eax; Call "lwrite"; Pop edx], []
- | _ ->
- let x::(y::_ as sstack') = sstack in
- (fun op ->
- match x, y with
- | S _, S _ -> env, [Mov (y, edx); op x edx; Mov (edx, y)], sstack'
- | _ -> env, [op x y], sstack'
- )
- (match i with
- | MUL -> fun x y -> Mul (x, y)
- | ADD -> fun x y -> Add (x, y)
- )
- in
- let env, code', sstack'' = sint env prg' sstack' in
- env, code @ code', sstack''
-
-let compile p =
- let env, code, [] = sint (new env) (Compile.Program.compile p) [] in
- let buf = Buffer.create 1024 in
- let out s = Buffer.add_string buf s in
- out "\t.data\n";
- List.iter (fun x -> out (Printf.sprintf "%s:\t.int 0\n" x))
- env#get_locals;
- out "\t.text\n";
- out "\t.globl\tmain\n";
- out "main:\n";
- out "\tpushl\t%ebp\n";
- out "\tmovl\t%esp,%ebp\n";
- out (Printf.sprintf "\tsubl\t$%d,%%esp\n" (env#get_depth * 4));
- to_string buf code;
- out "\tmovl\t%ebp,%esp\n";
- out "\tpopl\t%ebp\n";
- out "\tret\n";
- Buffer.contents buf
-
diff --git a/_build/_digests b/_build/_digests
new file mode 100644
index 00000000..39af2d0f
--- /dev/null
+++ b/_build/_digests
@@ -0,0 +1,9 @@
+"Resource: /home/roma/\208\151\208\176\208\179\209\128\209\131\208\183\208\186\208\184/eltech_compilers/src/StackMachine.ml": "i17\002hfm$\158 \221\186\130\181\134\127"
+"Rule: ocaml dependencies ml (%=src/rc )": "\000\2340\188\135\185\204\229\241XR\186\165\222\bT"
+"Rule: ocaml dependencies ml (%=src/Driver )": "\190\250\150\140r90\029&ee\136g\004\147U"
+"Rule: ocaml dependencies ml (%=src/Interpret )": "\163*\147\246C\144}\246R2\206\"\132\236~z"
+"Resource: /home/roma/\208\151\208\176\208\179\209\128\209\131\208\183\208\186\208\184/eltech_compilers/src/Language.ml": "e?R\221\234\1277\156\020eR\215\nE\254\233"
+"Resource: /home/roma/\208\151\208\176\208\179\209\128\209\131\208\183\208\186\208\184/eltech_compilers/src/Interpret.ml": "\20969\195\2154\202\150M\143v\185\\\245\236Y"
+"Resource: /home/roma/\208\151\208\176\208\179\209\128\209\131\208\183\208\186\208\184/eltech_compilers/src/rc.ml": "\1925m\003\2304M\252\t\212\022\151\002\167\151\245"
+"Resource: /home/roma/\208\151\208\176\208\179\209\128\209\131\208\183\208\186\208\184/eltech_compilers/src/Driver.ml": "F95\195\227\028A^\151:\225F\186\153vL"
+"Rule: ocaml dependencies ml (%=src/StackMachine )": "T\205\210?\214\132\232\240\216\0074\196p\153\228v"
diff --git a/_build/_log b/_build/_log
new file mode 100644
index 00000000..ff83643e
--- /dev/null
+++ b/_build/_log
@@ -0,0 +1,2 @@
+### Starting build.
+# Compilation unsuccessful.
diff --git a/_build/ocamlc.where b/_build/ocamlc.where
new file mode 100644
index 00000000..dd25148a
--- /dev/null
+++ b/_build/ocamlc.where
@@ -0,0 +1 @@
+/usr/lib/ocaml
diff --git a/_build/src/Driver.ml b/_build/src/Driver.ml
new file mode 100644
index 00000000..1cd1b475
--- /dev/null
+++ b/_build/src/Driver.ml
@@ -0,0 +1,53 @@
+open Language
+open Expr
+open Stmt
+open Ostap
+
+let parse filename =
+ let s = Util.read filename in
+ Util.parse
+ (object
+ inherit Matcher.t s
+ inherit Util.Lexers.ident ["read"; "write"; "skip";
+ "if"; "then"; "else"; "elif"; "fi";
+ "for"; "while"; "do"; "od"; "repeat"; "until"] s
+ inherit Util.Lexers.decimal s
+ inherit Util.Lexers.skip [
+ Matcher.Skip.whitespaces " \t\n";
+ Matcher.Skip.lineComment "--";
+ Matcher.Skip.nestedComment "(*" "*)"
+ ] s
+ end)
+ (ostap (!(Stmt.parse) -EOF))
+
+let main =
+ try
+ let interpret = Sys.argv.(1) = "-i" in
+ let stack = Sys.argv.(1) = "-s" in
+ let to_compile = not (interpret || stack) in
+ let infile = Sys.argv.(if not to_compile then 2 else 1) in
+ match parse infile with
+ | `Ok prog ->
+ if to_compile
+ then
+ let basename = Filename.chop_suffix infile ".expr" in
+ ignore @@ X86.build prog basename
+ else
+ let rec read acc =
+ try
+ let r = read_int () in
+ Printf.printf "> ";
+ read (acc @ [r])
+ with End_of_file -> acc
+ in
+ let input = read [] in
+ let output =
+ if interpret
+ then Interpret.Program.eval prog input
+ else StackMachine.Interpret.run (StackMachine.Compile.Program.compile prog) input
+ in
+ List.iter (fun i -> Printf.printf "%d\n" i) output
+ | `Fail er -> Printf.eprintf "Syntax error: %s\n" er
+ with Invalid_argument _ ->
+ Printf.printf "Usage: rc [-i] \n"
+
diff --git a/_build/src/Driver.ml.depends b/_build/src/Driver.ml.depends
new file mode 100644
index 00000000..507a709b
--- /dev/null
+++ b/_build/src/Driver.ml.depends
@@ -0,0 +1 @@
+src/Driver.ml: Array Expr Filename Interpret Language List Matcher Ostap Printf StackMachine Stmt Sys Util X86
diff --git a/_build/src/Interpret.ml b/_build/src/Interpret.ml
new file mode 100644
index 00000000..e7797803
--- /dev/null
+++ b/_build/src/Interpret.ml
@@ -0,0 +1,95 @@
+open Language
+
+(* Interpreter for expressions *)
+module Expr =
+ struct
+
+ open Expr
+
+ let rec eval expr st =
+ let eval' e = eval e st in
+ match expr with
+ | Var x -> st x
+ | Const z -> z
+ | Add (x, y) -> eval' x + eval' y
+ | Mul (x, y) -> eval' x * eval' y
+ | Sub (x, y) -> eval' x - eval' y
+ | Div (x, y) -> eval' x / eval' y
+ | Mod (x, y) -> eval' mod eval' y
+ | And (x, y) -> if( (eval' x) == 1 && (eval' y) == 1)
+ then 1
+ else 0
+ | Or (x, y) -> if( (eval' x) == 0 && (eval' y) == 0)
+ then 0
+ else 1
+ | Equals (x, y) -> if( (eval' x) == (eval' y))
+ then 1
+ else 0
+ | NotEquals (x, y) -> if( (eval' x) == (eval' y))
+ then 0
+ else 1
+ | Greater (x, y) -> if( (eval' x) > (eval' y))
+ then 1
+ else 0
+ | Less (x, y) -> if( (eval' x) < (eval' y))
+ then 1
+ else 0
+ | GreaterEquals (x, y) -> if( (eval' x) < (eval' y))
+ then 0
+ else 1
+ | LessEquals (x, y) -> if( (eval' x) > (eval' y))
+ then 0
+ else 1
+
+
+ end
+
+(* Interpreter for statements *)
+module Stmt =
+ struct
+
+ open Stmt
+
+ (* State update primitive *)
+ let update st x v = fun y -> if y = x then v else st y
+
+ let rec eval stmt ((st, input, output) as conf) =
+ match stmt with
+ | Skip -> conf
+ | Assign (x, e) -> (update st x (Expr.eval e st), input, output)
+ | Read x ->
+ let z :: input' = input in
+ (update st x z, input', output)
+ | Write e -> (st, input, output @ [Expr.eval e st])
+ | Seq (s1, s2) -> eval s1 conf |> eval s2
+ | If (expr, then_part, else_part) ->
+ if (Expr.eval expr st) != 0
+ then eval then_part conf
+ else eval else_part conf
+ | While (expr, value) ->
+ let rec loop expr' value' ( (st', _, _) as conf') =
+ if (Expr.eval expr' st') != 0
+ then loop expr' value' (eval value' conf')
+ else conf'
+ in
+ loop expr value conf
+ | Until (value, expr) ->
+ let rec loop expr' value' conf' =
+ let (st_new, _, _) as conf_new = eval value' conf' in
+ if (Expr.eval expr' st_new) == 0
+ then loop expr' value' conf_new
+ else conf_new
+ in
+ loop expr value c
+ end
+
+module Program =
+ struct
+
+ let eval p input =
+ let (_, _, output) =
+ Stmt.eval p ((fun _ -> failwith "undefined variable"), input, [])
+ in
+ output
+
+ end
diff --git a/_build/src/Interpret.ml.depends b/_build/src/Interpret.ml.depends
new file mode 100644
index 00000000..39526c5a
--- /dev/null
+++ b/_build/src/Interpret.ml.depends
@@ -0,0 +1 @@
+src/Interpret.ml: Expr Language Stmt
diff --git a/_build/src/Language.ml b/_build/src/Language.ml
new file mode 100644
index 00000000..34286838
--- /dev/null
+++ b/_build/src/Language.ml
@@ -0,0 +1,97 @@
+open Ostap.Util
+
+module Expr =
+ struct
+
+ type t =
+ | Var of string
+ | Const of int
+ | Add of t * t
+ | Mul of t * t
+ | Sub of t * t
+ | Div of t * t
+ | Mod of t * t
+ | And of t * t
+ | Or of t * t
+ | Equals of t * t
+ | NotEquals of t * t
+ | Greater of t * t
+ | Less of t * t
+ | GreaterEquals of t * t
+ | LessEquals of t * t
+
+ let rec parse s =
+ expr id
+ [|
+ `Nona , [ostap ("||"), (fun x y -> Or (x, y)); ];
+ `Nona , [ostap ("&&"), (fun x y -> And (x, y))];
+ `Nona , [ostap ("=="), (fun x y -> Equals (x, y));
+ ostap ("!="), (fun x y -> NotEquals (x, y));
+ ostap (">"), (fun x y -> Greater (x, y));
+ ostap ("<"), (fun x y -> Less (x, y))
+ ostap (">="), (fun x y -> GreaterEquals (x, y));
+ ostap ("<="), (fun x y -> LessEquals (x, y));];
+
+ `Lefta , [ostap ("+"), (fun x y -> Add (x, y));
+ ostap ("-"), (fun x y -> Sub (x, y))];
+
+ `Lefta , [ostap ("*"), (fun x y -> Mul (x, y));
+ ostap ("/"), (fun x y -> Div (x, y));
+ ostap ("%"), (fun x y -> Mod (x, y))]
+ |]
+ expr' s
+ and
+ ostap (
+ expr':
+ n:DECIMAL {Const n}
+ | e:IDENT {Var e}
+ | -"(" parse -")")
+ end
+
+(* AST statements/commands *)
+module Stmt =
+ struct
+
+ type t =
+ | Skip
+ | Assign of string * Expr.t
+ | Read of string
+ | Write of Expr.t
+ | Seq of t * t
+ | If of Expr.t * t * t
+ | While of Expr.t * t
+ | Until of t * Expr.t
+
+ let expr = Expr.parse
+
+ ostap (
+ simp: x:IDENT ":=" e:expr {Assign (x, e)}
+ | %"read" "(" x:IDENT ")" {Read x}
+ | %"write" "(" e:expr ")" {Write e}
+ | %"skip" {Skip};
+ | %"if" e:expr %"then" then_part:parse else_part:else_part_def?
+ %"fi" {If (exp, then_part, match else_part with None -> Skip | Some else_part -> else_part)}
+ | %"for" s1:parse "," e:expr "," s2:parse
+ %"do" s:parse %"od" {Seq (s1, While (e, Seq (s, s2)))}
+ | %"while" exp:expr
+ "do" value:parse %"od" {While (expr, value)}
+ | %"repeat" value:parse
+ "until" expr:expr {Until (value, expr)};
+ else_part_def :
+ %"else" parse
+ | %"elif" expr:expr %"then" then_part:parse else_part:else_part_def?
+ {If (expr, then_part, match else_part with None -> Skip | Some else_part -> else_part)};
+ parse: s:simp ";" d:parse {Seq (s,d)} | simp
+ )
+
+ end
+
+module Program =
+ struct
+
+ type t = Stmt.t
+
+ let parse = Stmt.parse
+
+ end
+
diff --git a/_build/src/Language.ml.depends b/_build/src/Language.ml.depends
new file mode 100644
index 00000000..4530096d
--- /dev/null
+++ b/_build/src/Language.ml.depends
@@ -0,0 +1 @@
+src/Language.ml:
diff --git a/_build/src/StackMachine.ml b/_build/src/StackMachine.ml
new file mode 100644
index 00000000..6f852215
--- /dev/null
+++ b/_build/src/StackMachine.ml
@@ -0,0 +1,208 @@
+(* Stack Machine *)
+module Instr =
+ struct
+
+ type t =
+ | READ
+ | WRITE
+ | PUSH of int
+ | LD of string
+ | ST of string
+ | ADD
+ | MUL
+ | SUB
+ | DIV
+ | MOD
+ | AND
+ | OR
+ | EQUALS
+ | NOT_EQUALS
+ | GREATER
+ | LESS
+ | GREATER_EQUALS
+ | LESS_EQUALS
+ | LBL of int
+ | CJMP of int * string
+ | JMP of int
+ end
+
+module Program =
+ struct
+
+ type t = Instr.t list
+
+ end
+
+module Interpret =
+ struct
+
+ open Instr
+ open Interpret.Stmt
+
+ let rec findlb prg lb =
+ let nom::prg' = prg in
+ if nom = lb then prg'
+ else findlb prg' lb
+
+ let run prg input =
+ let prg_full = prg in
+
+ let rec run' prg ((stack, st, input, output) as conf) =
+ match prg with
+ | [] -> conf
+ | i :: prg' ->
+ run' prg' (
+ match i with
+ | READ -> let z :: input' = input in
+ (z :: stack, st, input', output)
+ | WRITE -> let z :: stack' = stack in
+ (stack', st, input, output @ [z])
+ | PUSH n -> (n :: stack, st, input, output)
+ | LD x -> (st x :: stack, st, input, output)
+ | ST x -> let z :: stack' = stack in
+ (stack', update st x z, input, output)
+ | LBL _ -> (prg', stack, st, input, output)
+ | JMP l -> (findlb prg_full (LBL l), stack, st, input, output)
+ | CJMP (m, c) -> let nom::stack' = stack in
+ if (match c with
+ | "z" -> (nom = 0)
+ | "nz" -> (nom != 0))
+ then (findlb prg_full (LBL m), stack', st, input, output)
+ else (prg', stack', st, input, output)
+ | _ -> let y :: x :: stack' = stack in
+ ((match i with
+ | ADD -> ( + )
+ | MUL -> ( * )
+ | SUB -> ( - )
+ | DIV -> ( / )
+ | MOD -> ( mod )
+ | AND -> ( fun a b -> if (a == 1) && (b == 1)
+ then 1
+ else 0)
+ | OR -> ( fun a b -> if (a == 0) && (b == 0)
+ then 0
+ else 1)
+ | EQUALS -> ( fun a b -> if (a == b)
+ then 1
+ else 0)
+ | NOT_EQUALS -> ( fun a b -> if (a == b)
+ then 0
+ else 1)
+ | GREATER -> ( fun a b -> if (a > b)
+ then 1
+ else 0)
+ | LESS -> ( fun a b -> if (a < b)
+ then 1
+ else 0)
+ | GREATER_EQUALS -> ( fun a b -> if (a < b)
+ then 0
+ else 1)
+ | LESS_EQUALS -> ( fun a b -> if (a > b)
+ then 0
+ else 1)
+ ) x y :: stack',
+ st,
+ input,
+ output
+ )
+ )
+ in
+ let (_, _, _,_, output) =
+ run' (prg, [],
+ (fun _ -> failwith "undefined variable"),
+ input,
+ []
+ )
+ in
+ output
+ end
+
+module Compile =
+ struct
+
+ open Instr
+ let lblCounter = ref 0
+
+ module Expr =
+ struct
+
+ open Language.Expr
+
+ let rec compile = function
+ | Var x -> [LD x]
+ | Const n -> [PUSH n]
+ | Add (x, y) -> (compile x) @ (compile y) @ [ADD]
+ | Mul (x, y) -> (compile x) @ (compile y) @ [MUL]
+ | Sub (x, y) -> (compile x) @ (compile y) @ [SUB]
+ | Div (x, y) -> (compile x) @ (compile y) @ [DIV]
+ | Mod (x, y) -> (compile x) @ (compile y) @ [MOD]
+ | And (x, y) -> (compile x) @ (compile y) @ [AND]
+ | Or (x, y) -> (compile x) @ (compile y) @ [OR]
+ | Equals (x, y) -> (compile x) @ (compile y) @ [EQUALS]
+ | NotEquals (x, y) -> (compile x) @ (compile y) @ [NOT_EQUALS]
+ | Greater (x, y) -> (compile x) @ (compile y) @ [GREATER]
+ | Less (x, y) -> (compile x) @ (compile y) @ [LESS]
+ | GreaterEquals (x, y) -> (compile x) @ (compile y) @ [GREATER_EQUALS]
+ | LessEquals (x, y) -> (compile x) @ (compile y) @ [LESS_EQUALS]
+ end
+
+class lbcounter =
+ object (this)
+ val mutable count = 0
+ method add_lbs n = count <- (count + n)
+ method get_count = count
+ end
+
+ module Stmt =
+ struct
+
+ open Language.Stmt
+
+ let get_next_label() =
+ incr lblCounter;
+ ".lbl"^string_of_int !lblCounter
+
+ let rec compile lb = function
+ | Skip -> []
+ | Assign (x, e) -> Expr.compile e @ [ST x]
+ | Read x -> [READ; ST x]
+ | Write e -> Expr.compile e @ [WRITE]
+ | Seq (l, r) -> compile lb l @ compile lb r
+ | op ->
+ lb#add_lbs 2;
+ let l1 = lb#get_count-1 in
+ let l2 = lb#get_count in
+ match op with
+ | If (exp, pt1, pt2) ->
+ Expr.compile exp @
+ [CJMP (l1,"z")] @
+ compile lb pt1 @
+ [JMP l2] @
+ [LBL l1] @
+ compile lb pt2 @
+ [LBL l2]
+
+ | While (exp, pt) ->
+ [JMP l1] @
+ [LBL l2] @
+ compile lb pt @
+ [LBL l1] @
+ Expr.compile exp @
+ [CJMP (l2, "nz")]
+
+ | Until (pt, exp) ->
+ [LBL l1] @
+ compile lb pt @
+ Expr.compile exp @
+ [CJMP (l1, "z")]
+ end
+
+ module Program =
+ struct
+
+ let compile = Stmt.compile (new lbcounter)
+
+ end
+
+ end
+
diff --git a/_build/src/StackMachine.ml.depends b/_build/src/StackMachine.ml.depends
new file mode 100644
index 00000000..24a07def
--- /dev/null
+++ b/_build/src/StackMachine.ml.depends
@@ -0,0 +1 @@
+src/StackMachine.ml: Interpret Language
diff --git a/_build/src/rc.ml b/_build/src/rc.ml
new file mode 100644
index 00000000..50265d80
--- /dev/null
+++ b/_build/src/rc.ml
@@ -0,0 +1 @@
+include Driver
diff --git a/_build/src/rc.ml.depends b/_build/src/rc.ml.depends
new file mode 100644
index 00000000..e867c951
--- /dev/null
+++ b/_build/src/rc.ml.depends
@@ -0,0 +1 @@
+src/rc.ml: Driver
diff --git a/_tags b/_tags
new file mode 100644
index 00000000..e21aeff9
--- /dev/null
+++ b/_tags
@@ -0,0 +1,4 @@
+true: debug, rectypes
+
+: syntax(camlp5o), package(ostap.syntax)
+ or : package(re,ostap,GT)
\ No newline at end of file
diff --git a/regression/Makefile b/regression/Makefile
new file mode 100644
index 00000000..72dbc45f
--- /dev/null
+++ b/regression/Makefile
@@ -0,0 +1,21 @@
+TESTS=test001 test002 test012 test013
+
+# More expressions:
+# test003 test004 test005 test006 test007 test008
+
+# Later:
+# test009 test010 test 11
+# test014 test015 test016 test017 test018 test019 test020 test021 test022 test023 test024 test025 test026
+# test027 test028 test029 test030
+
+.PHONY: check $(TESTS)
+
+check: $(TESTS)
+
+$(TESTS): %: %.expr
+ ../rc.native $< && cat $@.input | ./$@ > $@.log && diff $@.log orig/$@.log
+ cat $@.input | ../rc.native -i $< > $@.log && diff $@.log orig/$@.log
+ cat $@.input | ../rc.native -s $< > $@.log && diff $@.log orig/$@.log
+
+clean:
+ rm -f test*.log *.s *~ $(TESTS)
diff --git a/regression/deep-expressions/Makefile b/regression/deep-expressions/Makefile
new file mode 100644
index 00000000..bca2a1c5
--- /dev/null
+++ b/regression/deep-expressions/Makefile
@@ -0,0 +1,13 @@
+TESTS=$(basename $(wildcard generated*.expr))
+
+.PHONY: check $(TESTS)
+
+check: $(TESTS)
+
+$(TESTS): %: %.expr
+ RC_RUNTIME=../../runtime ../../rc.native $< && cat $@.input | ./$@ > $@.log && diff $@.log orig/$@.log
+ cat $@.input | RC_RUNTIME=../../runtime ../../rc.native -i $< > $@.log && diff $@.log orig/$@.log
+ cat $@.input | RC_RUNTIME=../../runtime ../../rc.native -s $< > $@.log && diff $@.log orig/$@.log
+
+clean:
+ rm -f *.log *.s *~ $(TESTS)
diff --git a/regression/deep-expressions/file.tmp b/regression/deep-expressions/file.tmp
new file mode 100644
index 00000000..d90c1600
--- /dev/null
+++ b/regression/deep-expressions/file.tmp
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((470<438)==(x2!=x3)!!(x0=(540==849)*(x1==x3)))+((x0>x3!!975==202)!!(273=x3))*((x2>=x1)-(x3!=x0)))>=((((x3>=922)>(x1>484))<(x2*x0==(x2!=x1)))+((x1>382)<=727+x2!!(923!=241)>(439<=x2))&&(775+15>(x0&&466))*(x3*x3!!x3>558)>=(((739(16<=x2))>(517*655==(x1!!x2)))))>=((((555-x3<(116==845))==((935==x2)<=482*x2))+((431+x0!=619+x2)==(798<=x1)*(x1*63))>((464<=557!!956&&x3)-(x3+648==x2-x3))-((602==x0)>(x1!=x3)!!(x0&&x0)*(74*x3)))<((((496-638&&x2<873)==(x1*238!=(225>271)))>(((x3<=880)=(x1&&x0))))!=((560==999)>(x2&&557))*((x3>=x3)<(820!!775))-(((572>248)==(x0!=133))==((x2<387)==(x2==859))))))>=((((((x2!!x0)!=(417==894))!=(x3>x3!!55*x0))+((835>=x0&&x0*x3)<(869-714>=455*x1))!=(((x0+947!!x0==x0)>=(762>=x1!!x0>=x0))>=((230!=x2)==x0+290)-(879&&92)*(x3&&x2)))<=(((36==x1)*(x2!!999)!=(x1!=735)-(191==768))-((709==x2)>=(286=((((639-x3!=(788!!x1))>((x3>=375)==(834<=x1)))==((920+x1!=(33<=74))>((499!=535)<(44<=x2))))-(((x0*x2&&801>=683)<=((x2<636)==(x2!=132)))-((407*x1<(692&&317))>((x1&&279)&&479=(((43&&339)+(24&&981)<=((x2!=44)>=(x2!!699)))*((259-x0==860-390)-((385!=575)>(731!=631)))>((720*464+(x2!=x0)!=(202>=702)+x3*368)>(200*x0+(819>497))+((x1!=x1)-(151>502))))));
+write (y)
diff --git a/regression/deep-expressions/generated00000.expr b/regression/deep-expressions/generated00000.expr
new file mode 100644
index 00000000..08f0c06f
--- /dev/null
+++ b/regression/deep-expressions/generated00000.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((((x0<=x0)<=x2-362)>=((454!=x2)!=(x2>4))&&(444+724!=(x3!=x0))==(83-x2<=784+635))>(((x1>=x2)==(370>720))*((x3>x2)-(x1<=869))!=((x2==x3)!=(346&&243)!!x0-x0<=154*430)))!=(((499&&143)-(x0>489))-((162!=252)==(x3<129))>=((405+x2)*(x0<=568)!=(414*x1!=(x1>613))))*(((x1>129)<=(561275)==(813==557))<=((604!!x1)==(x1<475))+((x1==x0)<(554!=x1)))!!(((602!!x2)==(270>x3))*((x2<608)-x2*x1)!=((223!!65)=(x2>856))-(107*x2-(458&&x2))&&(x1+x3>=531-x0)<((230(x2!!617)))<((((402!=72)==x0-x3!!(585!!329)<(x3&&x1))<=((527&&426)>x3+x1)-((x1<=x2)<=(x0==105)))>=(((173!=843)*(117<=x0)<((734>x3)!=849-x2))==(((596<=870)<(x2(401x0)>=(409&&x2))>(x1<=13)+(299-x0))==(((366!=x3)<=(633!!x1))<((367==135)>=x0+334)))>(((x2&&x1)>=(154>721))*((569!!x1)>(x2<=47))>=(((x2=573*x2)!=(465-x2<(85>=x3)))))<=((((837>=77)-(100<=886)>=(231==x3)+x1*x3)!=((705*x0&&334-x0)>=(x3==x2&&x2<444)))<((x0*68<=(x3==933))*((290&&890)==338-594)>((455==x1)+(523>=x3)>=(x2(x2(x2==748)-x3*557)-((x1-x1)*(585*x0)>(x0<493!!x0==x3))*(((778!!516)==(x2!=268))*(980-6&&478!=x1))<=(((137>=x3)==(449==x3))+((720>598)>x2+x2)>=((122!=x0)<(x3&&335))-(614>x2&&(852&&174)))*((931<=453&&950=676))!!((x0!=917)<=(4!=x1))>(x3*924>(x2(614-x1!!463<=x3))>=(586-x2<=(22!=273))*((62&&789)+584*851))<=((88-79)*(561<=341)<=((913<731)<=529+413))+(((x0=((x0&&292)<=(575<720))))+((((x2&&485)&&(25&&387))+(386>=x0&&x3x0))>(x3==x2)*(x0<531))<(((x2!=57)!=997+113!!(135*x3!!356&&x0))<(((258==x3)<(x1!!x1))>((x3>=x1)==(725>x1)))))!!((((625>x2)-(924>x3)&&x3+943>(x1>=233))!=(x2>x2)*(x1*x0)-((x3<=x2)!=(9!!x2)))<=((((135!!652)>=(218&&x3))!=((150&&411)<(405!!101)))!=((264<=x0)*(x3&&982)<=(x2-107)*(27&&x0)))!!((((471<=335)<=(473!!1))==(799>635)+(363&&x3))!=((x3-x1!!x1==x1)<=(307==428)*(x2*563)))==((x3-x3!!x1<=17)!=((x3!!313)>=(634>107)))-((x2x2)&&(x1*409&&(590&&x2)))))!!((((x2!!x1)+(739+x2)!=((x3>499)>(x3==x2)))>=((216<=x0)<=(x3!=x0))-((x0==x2)<(x2!!572)))>=(((761+x3==x2+307)<((446&&377)!=(823<677)))>(((455&&434)==(712!=x1))==x0*x2+x2*639))!!(((774-x2&&x1+x2)<(179*341<(500!=371)))>=(x0<=164!!x2>x2)-(x3*798==657+x0))-(((188!=108)+(x0!=x3)!=(166>=35!!277+373))>(((x3<=688)>=(x0>=201))!=(257&&262)+(x0+861))))==((((995<382)==(x2>x0))+((x0&&957)!=x1+654)>=(((565==490)>=(x3>=210))>=((x0!!x0)<(x1(x0>=x2))<=((x0x3)))==(588+x0>=(123!!x1)&&x0-x0!=(898!=x2)))&&(((x1>=x2)==(588!=556))>(x1==x3!!117<=625)&&(x3*x0<=(x3!=x3))*((314!=x2)+(280x1-263)-((46-x3)+(944-678)))));
+write (y)
diff --git a/regression/deep-expressions/generated00001.input b/regression/deep-expressions/generated00001.input
new file mode 100644
index 00000000..c2152f57
--- /dev/null
+++ b/regression/deep-expressions/generated00001.input
@@ -0,0 +1,4 @@
+32
+78
+22
+20
diff --git a/regression/deep-expressions/generated00002.expr b/regression/deep-expressions/generated00002.expr
new file mode 100644
index 00000000..e1c16ca2
--- /dev/null
+++ b/regression/deep-expressions/generated00002.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((((169&&568)-x3*675)*((x1+x3)+x3*750)!!((851>156)==x2*741)<=((x2<838)<=(x0!=6)))!=((748-463==(482!!x1))<=(635+104)+(x0==x3)&&(x0*739>=(x1!!x0))>(248>x3&&x1+x1)))<(((777!=59!!x3+685)-((x3!=235)==293*849)>=(89!=x1!!509>=386)*((65!!704)<(563==564)))>=(x1!=913&&(x3!!x2)!!(102>x0)*(x1>=596))*(x0+572<=(336>=x1)&&(x3&&x1!!x2<509)))!!((x2>x3&&615>x3)-(914+x3)*(x0<=x3)>(((x2>61)<(x0!!x3))>(x0+303&&x2+845))&&(((980<=293)<=(x1<=x3))<542*408-(649!!477))<(((x3==x1)==x3*x0)>=((x3>=x0)>=(x0=(((370*x3>(17>=x2))*((120>x1)-(67&&356))!=((x1-237<=x2-413)==(x2>x2)+(520-x1)))>=((174>=x0)*(470&&x2)==(505!!22)*(669!!x2)!!((x1>=721)=x2))-(209*x1==(516<376)))+(52*x2>=(535!!811))*((854!=601)-(468+x0)))-(((451<=x1)>(x1!!576))<=(x1!=x0&&x2==x1))*((x3<=161)<(x0<527)&&(x2==947&&x1*x1))>((x2*x2!=947*x2)-((x0!!383)-(64!!97))!=(920+957!=(x1&&60))+((587<198)+(877(304<=602))!!558*x3+(x2<=x1)!=(42+x3&&(934&&x3))))<(((991-392==(x1&&x2))<=(690+772!!x2<=614))+((x2!=884)!=(970!!460)&&(247>=656)-(x3(x2&&x0)*(949!=x0)))-((((x3+x0)-(x0>=372)<=((939!!902)!=(492>=769)))>((287*229<853-105)<=(x0!!x3)*(x0<=x3)))+((((x2=(x1>=578))<=((x1!!x1)>=152-186))>=((488>=x1)*(859<=x1)<=(721!!x0)-(157>x1)))));
+write (y)
diff --git a/regression/deep-expressions/generated00002.input b/regression/deep-expressions/generated00002.input
new file mode 100644
index 00000000..02cb98b1
--- /dev/null
+++ b/regression/deep-expressions/generated00002.input
@@ -0,0 +1,4 @@
+5
+87
+26
+94
diff --git a/regression/deep-expressions/generated00003.expr b/regression/deep-expressions/generated00003.expr
new file mode 100644
index 00000000..d85ff2f5
--- /dev/null
+++ b/regression/deep-expressions/generated00003.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((426+230>138+179)>((515!!x1)==712*x1))*(x3*745-(x0!!147)>((710&&x2)!=(x2!!x2)))==(((38+320&&(602!!136))!=(x2-349)-(x2+437))!=(((166<=369)<(x0==677))<(x0>=x0)-(292<=x3))))>((((902<591)*(263+x0)>=((105==381)>=(525>=928)))==((339<=x0)>(602>=519))+((x2>x1)>=(128<=770)))<=((x0+65<=(x3>=388))<((590<=95)<=(x2!=x3))&&((x2&&311)==(x0>=881))*((807==175)*(x1+72))))!!((((320!=x1)==(x3!=913))-((934>=474)<=(x2&&330))&&((167>=816)<=(197&&354))-((x1==926)<=451*x2))&&((x1-x1<=(189!=378))<((x0>297)==(x0!=x1)))*(((x1==x2)==(675!!466))==((x0!!x2)>=(x3<=x2))))<((((864&&x2)-(x3<978))*(737*x2<(154137))>=((x1!=x2)<499*x1))!!((x1*761!!256+x3)>=((550&&875)&&942<904))+((x0<=278&&814==446)<(x0-x0&&919>x0))))!!(((((975!=x2)<(349==962))>=(x1-670)-(x2-x3))<=(((534>=913)<=765-x3)==((837!!736)==(489<231)))!!((6&&596)>=(x3=x1)))<(((366-101)*(692+x2))*((366<59)<=(517!!x2))>=(x2x2))!!((89+476>(17!!263))<=((50327)))!=((424!=412)>=(915!=x0))-(806*x1!=(982>=x3))))<=(((((x2&&x2)==(x2&&x1))*((705>=x3)-(x3+x3))!!((201&&x0)>=(x2>504)!!(x3*510)*(905+196)))&&(((x3>x0)!=(x1>=x0))!=(649>=x0&&902<=x1))<((524==x0)-(x1==x2))-((566==826)==(930<=x2)))>(((x2!=x1)<=(x2==x2))-((898!!x0)<411*324)<((x1>876!!x2<=x3)<(996-x0)*(x0&&x2)))+((x2((x2<=715)>=(x0&&780)))*((x2==65&&(782!!592))!=((x1!!x3)!!x3>x1))));
+write (y)
diff --git a/regression/deep-expressions/generated00003.input b/regression/deep-expressions/generated00003.input
new file mode 100644
index 00000000..005ef320
--- /dev/null
+++ b/regression/deep-expressions/generated00003.input
@@ -0,0 +1,4 @@
+80
+59
+0
+34
diff --git a/regression/deep-expressions/generated00004.expr b/regression/deep-expressions/generated00004.expr
new file mode 100644
index 00000000..54e68b2b
--- /dev/null
+++ b/regression/deep-expressions/generated00004.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((((579!=628)==(140>288))<((x1>x0)==x2-997))+((810&&x1)+(x3>=567)<((x2&&x2)!=(459!!x2)))>=(((x1&&245)==427*x1)*(837+x1>=x1-289)!!x3*x1-(831!=x2)!=((x1==92)!=(x3!=x0))))>(((599*794)*(434-672)+((x1<=651)>357-x0)!!((432>=514)<468*710)*((x0>x1)>=295*x3))!!((x1>=428)-(x0>x3)>=(428>36)*(886>55))*((x1!=x2)-(460!!x0)!=((35>=x0)==39*x1)))!!(((x2+216!!772<=752)*((x1!!x3)*(63>=x3))<((636&&664)&&215*371)-(997*x3)*(x2==x2))>=((((x3>=823)!=(796<=459))<((x3<=x2)<(562==x2)))>((673-x1&&x1*769)>=((x2==481)((x3<=386)!=x3+524))>((x3==x1&&863==x0)+(664!=374&&(x1&&710))!!(x0+x2)+(440!=723)==260*x1+(243<=x0))))!!((((609==x1!!x1!=831)!=((x1>426)!=(166!=x2)))<=((274>=507)-152*x1!!((x3!!x3)!!806+x1)))+((((47<=411)!=(x3>=x0))==(767!=225)-x3*745)!=((x3!!x1)<(258>=x3))-((x2==x0)==(83<3)))!=((((x1>=x2)=617))>=((606+x1==(x1==508))==(733*766<(395>=86))))<(((x1+x1>(x3>x2))>((509!=x0)!=(593<252)))<(((381!=x3)!=(806&&239))==(558<223)-(x2<193)))))<=((((514==925)>=(x3>738))==(x1&&818)*(x1>=x0)&&(x3>=239)+(85>526)!=((873>x2)<=(x2<=989)))-(((x0>=x2!!x0&&x1)&&(x2<=132&&(x0&&x2)))-((x1<=886)<214*447)*((348=x2!!250&&x2)>(13==x3&&58>=412))+(((x2>x0)=((454+x2&&(x2&&566))+(765*x2-(151!!646))<=(x2-x3>=(902!=x3))+((x0<=x2)+(117>=494)))));
+write (y)
diff --git a/regression/deep-expressions/generated00004.input b/regression/deep-expressions/generated00004.input
new file mode 100644
index 00000000..e2bf726a
--- /dev/null
+++ b/regression/deep-expressions/generated00004.input
@@ -0,0 +1,4 @@
+37
+53
+52
+23
diff --git a/regression/deep-expressions/generated00005.expr b/regression/deep-expressions/generated00005.expr
new file mode 100644
index 00000000..4ab81ad1
--- /dev/null
+++ b/regression/deep-expressions/generated00005.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((x1-576&&x0-x0!!6+244<=(838!=617))-((x2-x3!!x3!=296)>=((x3<628)>=609*281))>=((729!!619)<=(446!!x1))*((x2!!460)&&x0>609)-((7*x1<(x1&&490))<((821>x2)<=(x2!=979))))>((((274(x1!!160)!!(x3>x3)*(x0!!758)))*(((x2+5!!x3+x2)<(x1>109!!978==784))>=((943-x3!!x3-x1)>=((232&&x3)&&(x3&&x1))))!!(((((323>255)!=(x0==x3))>((984=397)==(x2>588)))==(((711>=670)>=(x1&&669))>(x3-84)+(732=x1)==(250&&x0)&&(399!!x0)>=955*694)!!(((x3+444>x2+752)<(x3!!212)+(510!=x1))<=(((x2>=x1)<=(x3>=x3))>((x3>=44)!=416*x2)))==(((x0!=261)!=(238>=x1))<=(x1<=784&&x3-x1))+((x3-x3)-(x3==742)<=(x3>619)*(x0&&x2))))!!(((((187!=x3)<(x3<=x1))-((x3<=362)!=(480&&x0)))*((797!=x1)-(745>=x1)!!(95!!x2)>=(99>=x1))==((((x2&&x1)!=719*x0)>=((84=x0*109))<(((x2!!x3)&&x0!=x3)>(x2!!x0)-(x0+288))))<((x1-x2>(753==79))+(x2-x2>(x2>708))>((422&&657)>906-301)+(x3!!x1)*(61>=x0)&&((230>=176&&433*458)!=((596!=571)<(x3!!180)))==((906<=383!!x1*642)!=(x1+x3)-(x1!=982))))<(((653!!799)-(x3+x2)>=((x2<=x1)>(x0&&x1)))-(((x0<=156)>=(720>x2))>((x3!!547)<=(553!=x2)))==(x0=x3)==(x1>70)+(544+509)))*((((335&&x0)<(86!=322))==(x0+x2<(565==259)))+((537==x2!!549<=x1)==(x3-461)+(x1>876))<((774690)<(x2!!545))>=((x3&&85)>x3-497)&&(837-x1>=(x1!=x0))+((791!!575)-(864<231)))>(((478!=954)-(x3=((x1>=x2)<(865>=544)))!=((693>=830)*(x3-493)!!(x1<=963)<=(x3&&690))))>=((x2*981!!x0(742==810))+((x1-x0)+(x3-x0)!=(45<=x0)*(201<=599))>=(x0*x1+(x3&&138)<=(x1>=725)*(x0>x3)&&(678>=x3&&x3>x3)>=925*x0-(x1<468)))!!(((x0<=984)<(775&&x1))-(908+x0)*(x1>=x1)==(102-68>=709+546)*((x3==x3)<=(722<=x3)))*(((x1!!x2)>(22!!492))*((x2==357)>=(701>x0))<((924+x2!!x1+x3)<=(937-x2)+(x0>=x2)))-(((((x0<=x0)<=(158==474))>(552*414<(x3!!x3)))<((x1!=x3)!=x3*921&&522-704>=(361!!952)))<((326+x0>(860!!539))==(173+x3>353+225))-(((x3&&x3)>=875-444)+(x2*506+(899!!x1)))))!!(((((x0<=x2)>=x2-x2)>=(577+270!!x1>x1))>=((x3!!440)&&(x3&&x2))-((x0&&673)-(878<394)))+(((679!!437)&&(x3!!594))<((x1>=x3)>=(x3!=377)))*(((x2>=63)==749-x3)-((806!=882)-(367+x1))))*(((((x1>=54)<=(x0>x3))<(x3+628)+(995<=x1))==((x2==879)<=(111&&x1))-(711>=x1!!x0!=123))==(((953<=x3)>=(373>=x2))>=(848!=679)+(496&&x3)&&((660&&x0)*(179==x2)!!455*x3-(x1>=53))))&&((x0*258&&x2<=918!!(644!=x0!!939<=788))-(((x0<=x1)>=(889!=108))>((x3!!x1)==(x1!=704)))<((x2>x0)+(507==x2)>(x3!=x2!!856*x3))*((275==x0)+(715>=x3)>=(814-x1<(274&&x2))))>=((((x3<=304)>=x3-x3)<=((x0!!278)!=(x3!!x3)))==((x1!!x3)==(x0<=618)&&(55!=612)!=(195<602)))*((((430<22)<=(x1&&477))>=(x2>x1)*(16>653))==((x3-570<(x1>423))!=(613!!756)+(672>542))));
+write (y)
diff --git a/regression/deep-expressions/generated00006.input b/regression/deep-expressions/generated00006.input
new file mode 100644
index 00000000..40d1029b
--- /dev/null
+++ b/regression/deep-expressions/generated00006.input
@@ -0,0 +1,4 @@
+80
+71
+96
+49
diff --git a/regression/deep-expressions/generated00007.expr b/regression/deep-expressions/generated00007.expr
new file mode 100644
index 00000000..834bda99
--- /dev/null
+++ b/regression/deep-expressions/generated00007.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((x0-x1<(909<=548))<(x1!!212)-x1*252&&(193-x1)*(475!=456)==((66!!82)>(x2!!x2))!!((x1+215>401*960)-((x1>=861)-(321<=x0)))-(x1<540!!565>642)*(x2*x3<=(x2!=x3)))!!((x0!=x3)!=(336>69)!!(x3<625!!286>=248))*((x0-707>=x1*650)>=(449-415>=(x0>x1)))<(((334>=x0)+(594>=x0))*((x0<=805)!=(x2<=54))<((x1!=x3)+(584&&x3)==(x1>=95)-(533&&x1))))!=((((x1<=53)+(x1>=965))+(767!=824&&453<950)>=((544*x3>=(x2!=x0))>=((x3!=23)=(x1=((x1==x3)!=(x3>945)))*(((x2!!x0)<(310==x0))>((x2<=258)!=x1*x0))==((x2x0)!=((x1==x3)>=(265>x3)))+((299>=475&&735==206)>=((x1>=813)!=x0*x1)))!!(323*486-x3*630>(x0>=312)-x2*x3!!(370>=374!!937>=956)*(x1*x1!=870*x3))*(((x1=x1))!=((428*5)*(760==x3)<((x0==862)<(912==x0))))+(((908>x3)*(x0==x0)&&(121==841)372!!x0<=x2)!!(337<=71)=x0)==(x0<765))<(x3+x3>=x1+x0))>=(x0*437+(644>x1)!!(x0==x3)+(x2>=379))))<((((521!!x0)*(878*x2)!=((x0<=x0)!=x3-x1))-((x2-574)*(x1!!586)>=((x0>x3)>=(12<=x2))))+(((x2>=x0)-(x1==317))-((x2>x3)-(621>x0))>(((295=375))<=(x0+x1)-(326!=844)))<=((((733!!183)<=(x0!!x3))!=((166==x0)>=(680==869)))-((x2!!539)*(968!!x2)<((x0!=x3)==(x0!!x1)))!=((680-407>=(x0>=x3)!!x3*148==(x3<960))!!((556!!515)>(736<=x1))==(337+x2!!405-x1)))));
+write (y)
diff --git a/regression/deep-expressions/generated00007.input b/regression/deep-expressions/generated00007.input
new file mode 100644
index 00000000..b81c15ab
--- /dev/null
+++ b/regression/deep-expressions/generated00007.input
@@ -0,0 +1,4 @@
+16
+97
+3
+97
diff --git a/regression/deep-expressions/generated00008.expr b/regression/deep-expressions/generated00008.expr
new file mode 100644
index 00000000..5da7cb74
--- /dev/null
+++ b/regression/deep-expressions/generated00008.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((86<=x3)+(535&&x3)==(x3+x2)+(x1+173)&&((x3=(x3>=403)))*(((x0!=175)+(x3=x2)<=(x3>770&&(453&&97)))!=((948>730)*(859+x3)<=(657>367!!x0!=22)))-((x1+x3==399+x2)>((x3<180)!=258-75))*((127+x2<(x1==141))<((620!=33)==(x3>264))))!=(((x2*x1+(316!!780)&&631-x2<=(x3<=287))<=((x3<=740)+(931>579)!!x1!=x2&&331<=74))<=(((x3-x1>(407>159))>x3*x1+(589==x0))<(((x3!!360)&&x0+x3)&&(699==781&&594*x0))))-((x2-182>(x2!=208))-(x1+647<=x0+x3)!!((x1>=x1)!=112-528)<((x2!!637)>=(344<=616)))*(((x1+789&&953=(271957)+(x2>=131)))!!(((x3<701)<=x1-x2)*(x2>=320&&x1-x3)<=(((401<=275)>=(x0>635))!=(702!!x2)+(x3>508))!!(((291<=x1)>=(x0!=x1))==((69!!462)>=(166>x3))!!(171<=508&&109*765!!(982*778!!591<795))))+((((399<31)>x2-x3)*((x3!=x2)-(x1!!x2))==(((x2!!367)!!411!=x0)>(x1-428!=(503==187))))>=((809*x0)*(x1<351)-(482&&x2!!711<962)>(x0>149)*(x2!!x0)-(868((x1<=x1)-(x1!!x1)==(122+585>(x1!!x1))))<=((x2-537)-(874==x1)!=((992&&462)&&x1260)<=(496>x1))*((x2!!x1)>=(658<=498))))<=(((211-927)*(x0-341)>=(547-x1<=(55==x2)))<((x1=766)!!(161==x3!!x2>=583))>=(x2*249!=x3+x1!!x0*139>(x3x0*276)>((x0>=192)==(x0>=876))))-((x3>675!!x0<772)-((x2==444)>=(715x3)*((x3=x2))!!(987*159&&x0>=300)>((628!!x1)!!x3*574))&&((383!=x0)+(923<231)==(x1+x1)*(x2*548))<(x2*744!=x0-x0)+((x1>=x1)<=(x2<=657))))!=(((x1&&197!!948(x0-x1<=(32!=x0))))==((773!=x0&&507>944!!(x0!=x2)==(255&&228))>((x2>=x0)==(x2!!904))+((x2>x2)!=(x1<=x0))))-((((x3!=364)<=(x2<=x3)!!(972>x1)!=(754!!x3))+((x1>x1)+x3*x0)*((x2&&x2)-(x1=x3)-(x1&&955)>=(x0!=x0)+(x1!!x2))!=(((789==x1)>926-553)!=((484>x2)<744*x2))))!!((((x2>=315)*(x3&&x0)==(549<307)*(x1<=421)&&(x1-733==x0-142)<(65!=324)+(x2==x0))>((((0!=x3)>=(x2!!x1))>=x1*529+(x0>=382))!=((293+64==x2-189)>((37((x2&&505)>(523==725)&&(317==x2!!412-229)))>=(((x1&&899)>(497==323)&&((522!!x0)!!696-80))==(x0-941!=(529!=498)!!(x3<55)+(207!=x3))))!!(((626>x1)+(469>=787)<=((x2&&529)!=(666!=x0))&&(43*5==(x0!!655))!=(x3-593<=951-x3))<=((((x2>x3)==(875>=x0))<(x0&&360)*(590!!x0))>=(((x3>x0)>=880*425)<=((x0(((964&&215)-(138!!202)>=((370=x2)))>=((x0<748)-(242!=x1))-((704-880)-(855&&160))!!(((696=((x2>=515)==x0+x0)+((x2>=x3)<=(237<339)))));
+write (y)
diff --git a/regression/deep-expressions/generated00009.input b/regression/deep-expressions/generated00009.input
new file mode 100644
index 00000000..d9b27348
--- /dev/null
+++ b/regression/deep-expressions/generated00009.input
@@ -0,0 +1,4 @@
+53
+82
+73
+20
diff --git a/regression/deep-expressions/generated00010.expr b/regression/deep-expressions/generated00010.expr
new file mode 100644
index 00000000..2640f3fd
--- /dev/null
+++ b/regression/deep-expressions/generated00010.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((833*158!!x0>=656)+(866+x3>(743==x0)))*(((744==x1)>=x3*x1)<=((x1>123)==(348>185))))*((607>=x1!!x2&&x2)>=((6==729)==(x2!!151))&&(x3+x2)-(x3+770)>=(x1*237!!x0&&326)))*(((x1!=x1!!(x3!!933))!=(x0<=x1)+(528!!165)!!(323*x3==(517>=x1))*((x2>=x1)<=(425=(x0==x0))-((x0!!860)!=x0-x0))!=(((((68!=x0)>(598>x2))+((553&&x3)<=x1*x3)<=(x0+114>(979<565)&&(996!=800)>=x0-56))<=((387*818-(541((x2-446&&x2!=x2)>(623<98&&819>x2))))<(((716-244)*(x1=x3)>=(152<=7))*((x2<56)-(x3+461)&&(663>=x2)-(x2&&683)))*((x1+502<=(x3>x1)!!x0-215<=985+x1)>=(x1>210&&(446&&903)!!(x2==x2)*(x3<=x2))))!!(((((997-x3==(x1>x0))<((x2==189)==(x3<=744)))==((29<=296)>x3+x2)+((687+x1)-(x1+x1)))>(((534!!167)&&246*884!!(x2<=675!!x3*241))!!(335=x3)&&(125>400)*(x2+750)))>=(((610<=681)+(x2!=215)!=((890!!177)<(211!=x3)))==((782&&575)==(x3==832)!!(x3&&184)<=(x2>834)))*(((x3>x3)+(84>x2)<((982&&x3)>=(702<=134)))+(((x2<=x3)!=(775!!117))>=((422<=x1)>(998==972)))))-(((((x2>x2&&x1+x2)==((168>=x3)>x2*x1))!=(((558=(342=572)))>((x1-x2<(x3>=356))*((x0=561)*(35>=912)<=((x2!=x2)<=(x0=((((695<58)*(837>=x2)<(x0!=184)*(400-149))==(132=(895>162)))<=((163==x3)>=(360<=x0)!!(x3!!x0)!=(623>=x3))*((278!!x2)==(x0>=317)!!(x3!!x0)&&443>x0))));
+write (y)
diff --git a/regression/deep-expressions/generated00010.input b/regression/deep-expressions/generated00010.input
new file mode 100644
index 00000000..d0dc0df3
--- /dev/null
+++ b/regression/deep-expressions/generated00010.input
@@ -0,0 +1,4 @@
+22
+8
+31
+66
diff --git a/regression/deep-expressions/generated00011.expr b/regression/deep-expressions/generated00011.expr
new file mode 100644
index 00000000..2448ab58
--- /dev/null
+++ b/regression/deep-expressions/generated00011.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((x1!=x1)>=74*65!!(338*380)*(x2>27))<=((x2>389)-(x2!!537)>=(x2-x0<(x0>x1)))!!(((x2!=x3)>=(69<=x2))<((x1&&x0)>(x0==927)))*((682*590&&486>285)>=(416*797>=x0+x3)))-((((x2>767)<(x0!=x3)&&((981!!626)!!(89!!x1)))>((x2188)!=(x1!=x3)))>=((427<155!!x2-26)>=(x2+x3)+(57>=x0))))!=(((((678+x2)-(77!=x0)<=(641!!507)+x0*x3)==((944!!x3)>=x2-x1)-(x1+260<=(500!=931)))!=((x0==x3)+(x1<=x1)!=(x0*348!=(32>=513))&&((466!=x1)!=(x0>=x0))>=(x0-x3&&(789!!x0))))<((((x1!!x0)<=468-259)==(732=x0))+((x0==x2)!=(x2!!780)))&&(x3==x0&&x2>=916)*((580<38)>=(845>86))+(x2*x3&&x3>=x3)*((x2>=x0)+(x3<=375))))!!(((187*x2<=(x2<=608)&&(x1!=x0)>=617-674)&&(x2+x1!!501!=467)>(x1>=257)*(x1<921))&&((x0+608!!382>=287)+((350&&677)>(x3!!555)))+((x1<=x3&&x3!=x0)-(331+x3!=475-888)))-((((x3&&x1)>=(619=x0)*(290!=x3))&&((766>=516)*(x0*725)&&x0-x2!=(x0&&969)))>(((x1!=110)!=(521==x1))<=((x0!=x2)<(x1&&x3)))*(((x2!!216)<(223>664))>=((409==x1)==(x1==x0))))<(((x2<=x0!!(973!!1))*((x0==170)<=(x1!!x2))>(((510>=x0)>=(x3<=68))==((271==x2)<(113<469)))!!((x3>x1)==(938>x0)!!(x2&&58)&&x1*357)==((x0!!x3)>=(x2==x2)!!(x1!!888)<=(76&&x1)))&&(((13!=x2)!=805*497)-((833==x2)>(x2>328))>=(((310==x2)>=(x3!!998))<(101*9==825*x2)))+((((586>=x1)>(731(x2>534)*(x2&&x0))<=(x1*x0-(875-x1)<(693<=331)+(x1+644)))));
+write (y)
diff --git a/regression/deep-expressions/generated00011.input b/regression/deep-expressions/generated00011.input
new file mode 100644
index 00000000..01286ae7
--- /dev/null
+++ b/regression/deep-expressions/generated00011.input
@@ -0,0 +1,4 @@
+69
+98
+70
+38
diff --git a/regression/deep-expressions/generated00012.expr b/regression/deep-expressions/generated00012.expr
new file mode 100644
index 00000000..10bd40af
--- /dev/null
+++ b/regression/deep-expressions/generated00012.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((x0+x1x2&&x3==x3!!(231<=352)<(248>x2)))+(((537!=x2)+(163<=x1)!!x1*733<(195((933-851)+(x3<=219)==(33-40<=789-115))))-(((869x1)!!(x1!=x2)>=(x2>=x3))&&((279!=523)<=x2-604)<=(911+949<=(x1>=x1))!!(((x1239))>x0*x1-(x1!!270))-(871*x1==(x3!=x2)!!(x2!=x2)>=x1*x2))!=(((x3<=x3)>(903<=581)!!(138!!x2)&&(x2&&44))*((x2<800!!964*595)+((x2!=x3)>160-x2))-(((364==520)>(563!!597)&&(787>=974)!=(153!=x2))-(85-x0==(x3&&174)&&(619*x3)*(930==23)))!=(((920-x2)-(193>x2)==((x1<=775)>=(x1==320)))<((113>=771!!822>=676)>((x1>126)<(309>=x1)))!!(845&&x1)+(x3>x0)!=(113*x1!!450>=x1)&&(x1<=x3)*(x1==x1)-((243>=x1)!=(x2!!727))))!!(((((412!!732)!!x2*543)-((213&&437)>(923&&x0))>((719<=991)+(x2!=x0))+(516>=777&&x2-x2))>((408==x1)!=(x0>x1))*((833>x3)+(x2!!762))-((x0>=x2&&(x0!!968))&&(74&&x3!!595<=291)))!=(((123+872>=(x3<421))>(x3+x0<(981!!282)))<=((414==x3)*(x3*191)>=((x0>x0)!=(292>x0)))!!(x3==428&&772<=778!!(808=(530!=x3))>((334==x3)*(737-x1)<(x3>x3&&x1-x3))))<=(((913>=687&&x1<712)-((x0==753)-438*735)!!((729<=x3)==(x0<=x2))-(x0&&x0)*(832+x2))+((((847>=x0)!=(971&&526))==(13+x0==(641<=561)))!=((x0!=x3)!=(x3=x3)*(301-x1)))+(((x1!=x2&&473==x2)>=(x2&&x0)+(x0<=x2))==((808<259)-(x2>=x1)!=(x1+1)-(779+x2))&&(x3&&x2!!x0==x3)-((102<883)>(x1!!x3))<=(((x1!!668)==(434!=x0))>(769*x0<(310<=526)))));
+write (y)
diff --git a/regression/deep-expressions/generated00012.input b/regression/deep-expressions/generated00012.input
new file mode 100644
index 00000000..01483ebe
--- /dev/null
+++ b/regression/deep-expressions/generated00012.input
@@ -0,0 +1,4 @@
+35
+69
+68
+9
diff --git a/regression/deep-expressions/generated00013.expr b/regression/deep-expressions/generated00013.expr
new file mode 100644
index 00000000..c8ae9ccf
--- /dev/null
+++ b/regression/deep-expressions/generated00013.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((((x0>=222)==(730<=x3))>((x1&&599)=((744>=752)==(742<=x1))))-((((x0!!x0)==(x3<=686))==((x2==x0)>=(x3<743)))==((26=x3)<=x2*685))))-((538*371<(x3&&x2)!!(x3!!x1)+(x3!!x2))+(((x3!!56)&&734-483)&&((x0&&572)&&(106!!x3)))<=((x2+x2==(x0&&690))<(43<=97)-(x3-x1))*((900<=x1)>=(600==622)!!x0-582<(x3&&114)))!=(((914>=665&&603==356)-((x1==x1)-(296(((x2(329>664))==((x2!=x3)>(294&&x2))))!=(((x2!=595)<(77>=783))>((x0>251)<=(x3&&x0))&&((435!!x3)<(833&&x2))>((686!!x2)>=(x2<420))))-((((x0&&x3)!=(x0==543))<=((x3&&657)<=(x0>=x2)))==((x0>x2)>=x3+138&&(x1!!20)<(771==x1))&&(((860=x0)!=(266>284)))<(((x3!!779)<(70<=682))>=(x2+x1>(357388)<407+598&&(686!=x3)+(x3+x1))==(((x0>=282)<=(568&&127))<(773*x2>(154<=x1))))>=(((583-162&&(917&&98))&&(176<370)+(x0<104))&&((410>476)>=(27==584))!=((x0==434)==(x3>x3))))!=(((564==576&&74>=x2)>=(x3==x1&&488<=955))!=(x3-521)*(x0&&827)-((517!=x0)>(166==714)))+(((x1*416<=(659=(104!=901!!166+272)+((x1&&x2)>=(x3!=909))))>=((((576<786)*(x3<=944)>(x3==x2)+(607<514))!=((790>=x0)==(x0==609))-(x2>=x2)*(104==829))-((((x2>77)<=(694>x1))<((x3!!539)==(x3!!167)))+(((x2&&x2)!=(641==x0))<=(797>=x3)-686*x1))<(((871<=88&&(x1!!712))+(x3-98!=(x2>=856))!!(505>x0)-(536=(681<=x2!!x3==720))>((328!=222&&x2978)-(x0-x1)>((x1==490)==(133!=x3)))<=(((303&&x1)<=(395==x2))<((618&&82)!=(805!=720))))<(((x3>485)-(x3+x1))*((x2>x2)+(582<=695))==((x3==x0&&x0>=433)>=((711<607)==(599==64)))))-((((666<=x1)!=(x2==676))*((x2<=269)!=(609!=x3))<=((249!=977)+(x1<712)!!(920==x0)!=x2+979))>(((390*x0>623-x0)>=x2*x0-(x1!=645))<=((394-x3&&261+408)>=(x3+x3!=x0*x2))))!=(((x3-x0!=(x2>x1))>((x1!!855)&&(x3!!870))!!(x2>=x0&&x1>=x1)&&(126!!530)<(969==787))!!((127>=x3&&(416&&327))&&(x0&&608)<(x3==x3))<(((543==x3)!=678*256)==((982<=223)>(972!!x2))))-(((598-x2<=(764!=x1)&&((x3!!x1)!!632<=x2))<=((142-283==(474==x3))!=(x3+282==(895>=528))))<(((976!=813)*(208>x2)<(115-502)+(x3==424))>=(x1==x2)*(19*250)+((177!=x0)>=(x3=x1&&904=((698>=x1)>=(x0<804)))+((244*x3==(x0<=185))!=((x0>=266)!=197*x2))&&(((600*x3<=x2-x0)<=(x0-x2<(x0<=x3)))+((x2>=x2)<=x2*879)*((x2>=x1)<=(x2>=x2))!!(((x1!!771)<(285<=988))>(159!=976)-(333-x0))>=((x3>=x2)+(506&&35))-(x3*122>=(x0==754))))-(((((937!=806)==(914==576)&&x3+586!=875*634)&&(937=x3)==((877=637)))>((((x2==862)!=(952>x0))!=(178&&43!!148+x1))>=((x2>=793!!x2==x0)<(x1+x0&&723-x2))))==((((948==x3)>(505>=x0))-(462-x2<=(x3<=x2)))*(((x3>176)>=x3-x0)>=x1*725-(891==217)))*((((x1&&x3)>=(669>=103))==(543&&x1)+(516!!117))-((x1==813!!x2>755)<=((x0==x1)>(x3>=913))))));
+write (y)
diff --git a/regression/deep-expressions/generated00014.input b/regression/deep-expressions/generated00014.input
new file mode 100644
index 00000000..97c10cf6
--- /dev/null
+++ b/regression/deep-expressions/generated00014.input
@@ -0,0 +1,4 @@
+25
+0
+27
+91
diff --git a/regression/deep-expressions/generated00015.expr b/regression/deep-expressions/generated00015.expr
new file mode 100644
index 00000000..d4e3b33d
--- /dev/null
+++ b/regression/deep-expressions/generated00015.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((((x2!=392)<(x1==x0))<=(x0-924)-(x0<216))!=((227+x0&&(x2&&452))<((752=229))))==(931+240>(382==165)!!(465<980)<(x2!=95))-(((x2<=807)<(x2!!614))==((706!=952)<=(781>=x3))))<((((x2>=773)!=x1*x0)*((x1<339)+(615-84))!!(x0+920<=x2-x1)!=((469&&x2)<=(x0<477)))<=((x2>x2)<=(844<21))*(x3*x1-(x1&&x2))-((943>x1)>=x3+534&&x0*158-(907>=x0))))!=(((((x1=((258!!171)==(x0&&539)))<((907-x1x1))))*((((x2+x0&&513<=934)>=(788!!763)*(x2*x3))==((x3==x2)<=903*346!!(264!!x3)+(x0!!x3)))*(((459>=473)+x0*x0==((x2>=x0)>=(x1>26)))==(((225!!523)<(113>=743))<=(x3==475)-(x3!=720))))!!((((((361<=x2)=((x1<=138)+(x0<=653)>(749-x1>=(843!!x3))))>=(((588>=x2!!x0<=649)>=((x2==863)!=(721!=261)))>=(((x2==843)!=(x0!=264))>=(x1>=x1&&(x1!!x2)))))>=(((107!=736)*(x0*x3)>((747==x3)<=442*252))<((x3<816)*(859!!524))*(x2*x3&&x1-x2))*((((x0&&x1)==(x0!=269))==(967*793>=(x0>x3)))!=((368!!x2)!!556&&411)*(x0-122&&663==x1)))-(((((x3>x2!!621-x0)!!(234!!485)<(837!!179))!!(x0==x2!!786+539)<=x1*170-(298<=224))==((921*786==(116<314))*((x1!!216)!!412<=x0)!=((603*x0==x3-x3)<=(243<=x0&&219<=x2))))>(((317-x1)-(181!=7)<(x1==633)+(218+x2))!=((x3!=x3)+71*836>((x2==x2)<(x1>=378))))+((((x1!=x2)<(569<413))==((164<352)==(x3>x0)))<=((x1>=17)>=(351!=x3))+((x1!=887)>299+x3))));
+write (y)
diff --git a/regression/deep-expressions/generated00015.input b/regression/deep-expressions/generated00015.input
new file mode 100644
index 00000000..657154ae
--- /dev/null
+++ b/regression/deep-expressions/generated00015.input
@@ -0,0 +1,4 @@
+94
+20
+64
+44
diff --git a/regression/deep-expressions/generated00016.expr b/regression/deep-expressions/generated00016.expr
new file mode 100644
index 00000000..3168b589
--- /dev/null
+++ b/regression/deep-expressions/generated00016.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((807+x2&&271==x1)!=((x0==62)<=(x1685)-(35>x2))-((x3(x3&&x0)!!((599>=x3)<(31980))<=((x0<=x2)*(x0*x2)!=(x2*x2)*(888!!x1)!!(x0-x1)+(228x3)*(282!!x2)==((131==x3)>=(697<=279)))-((38!=640)*(598-x0)+((253<=x2)<=(202>=515)))))!=(((((695!!69)<172+164)==((x0=(785=((744>=x1)<(x0<217))))!=(((x3!!331)x3)!!((850>874)>=22+571)>=(380-773)*(363>=824))!!(((932-x0!=(x0<=x3))==((x0795))&&((x0==x2)==(467!=329))-((x3>=x0)!=233-x0)))!!(((((784<=x3)*(x0<467)>=(898-x0==x3-675))>=((x1&&230)>=(51!=641)&&104*x1<=(929<=x1)))>=((x0-131!!(x0!!232))+(x1-x0<=(x3!=x1)))-(((x0&&x1)<(965!=x2))!=((x3>780)!=(82>344))))<=(((x2-509>=(578<165))<(382-x1>x0*x2)&&(x1>743)+(743<=909)!=(183*591!=(x3&&227)))&&((x2!!x1)<=(27!!x3))-((x0<877)-(x0!!178))>((x3==x3)>(647>379))+((821!!809)-(784+269))))>=(((((x1>=x0)*(x1!!x0)!=(743*535>(758&&x2)))>(((x1>123)<(x0&&971))>=(515+821<=(438<=590))))<(((851<=459)+(x1&&x0)!!(318<709)<=(297!!x1))&&((842&&391)298)!!(((x1>=128)<=(706<=192))<(728*x1!=(306!!x2)))-((993<=x2)-(478>x2)<=((246!=511)<=x2*x2)))));
+write (y)
diff --git a/regression/deep-expressions/generated00016.input b/regression/deep-expressions/generated00016.input
new file mode 100644
index 00000000..415efb1b
--- /dev/null
+++ b/regression/deep-expressions/generated00016.input
@@ -0,0 +1,4 @@
+15
+10
+74
+26
diff --git a/regression/deep-expressions/generated00017.expr b/regression/deep-expressions/generated00017.expr
new file mode 100644
index 00000000..c78260b7
--- /dev/null
+++ b/regression/deep-expressions/generated00017.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((x3==944!!x1!=374)+((x1>=752)+(231==x3))<=((477>872!!x1==57)!=(794&&x2)+(x3!=634))!!(243*198!=586+323)*((349!=x3)<(61!!732))!=(((892&&x2)=((x3&&24)&&35<=x2)&&((x1<785)<543-578)-((x0<=x1)!=355+x2))>=((x1=545*x1!!(x0<668)==(96<=x1))*(((x1>44)!=(277!=394))==((x3<=644)==(x3>916)))))!=((((x0!=970!!685>=419)*((282==x1)<(957!!374))<=((x1!!325)*(x0<=x0)<((x1!!674)<=(x1!!x0))))>=((x1-x1!=(x1>518))<(263*888<=(x2!!x2)))*((x1<=918)-(x2>x3)<=((x0==x1)<=(277>24))))!=(((469-x2)+(x1!=382)&&(267=((728+x2!=(x2<440))<=(x3+78&&93!=x3)))-((309+718!=(x3>=386))!=(186*93>(946>x3))&&((324==x1)*(306=168))))!!(((x0>53)*(x2!!936)-((518&&657)!=(x1!=224))<((623!!x1)!!x0-660)-((x1&&x2)-(662<=x3))!!((x3<178&&x3==x1)&&x2*x3>=(331>=178))*((612>=626!!694>=460)==((x0<=x0)<=x0-581)))>((622*618==(x2!!x1)!!(x0==x1)<=(x0==814))!=(((320>x0)<=(x1==x0))<((504=(372>=576)))&&(((600=993*235)!=(x2-134!!x1>326)&&(x2!=x3)+(x1-x3)<=((x0!=961)!=(798>80)))))*(((((751>x2)>(x1!!x2))<=((252<195)==(x0==226)))+((752&&x0)!=(997>=x1))*((x0<=x3)>x0*213)!=(((x2!!x0)!!934-x0)==(556<=580)+(x2-x1))+((783-x3<(x3!=x1))<(x0*862!=(1!=x3))))<(((x0*555>(962&&x2))<((539<62)==(x1<824)))+((x0!!926)-(886+x3))*((895<=70)*(x3!!x3)))-(((506>507)+x2*807)+((549&&x2)>x1-x1)<=((466>x0)==(x0==519)!!(825>162)<(x0<=x0)))));
+write (y)
diff --git a/regression/deep-expressions/generated00017.input b/regression/deep-expressions/generated00017.input
new file mode 100644
index 00000000..dbb62886
--- /dev/null
+++ b/regression/deep-expressions/generated00017.input
@@ -0,0 +1,4 @@
+83
+40
+48
+62
diff --git a/regression/deep-expressions/generated00018.expr b/regression/deep-expressions/generated00018.expr
new file mode 100644
index 00000000..348c6b49
--- /dev/null
+++ b/regression/deep-expressions/generated00018.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((319*x3>=(x3!=682))==((29!=x3)!=(x2>901)))>=((936=x1)>((545<=887)==(x2<281)))&&((x1!=x3&&x2-353)*(x2>=595!!x1>=x0)!!((398!!243)!!x1<=x1)<(x3-322<=x3-645)))==((((x2!!x2)>=(x0!=754))>=((x0=x2)!=839+351)+(x1*x1&&x2<=115))&&((199*738>193*495)<(x1>x2)+(x1<=x3)!!(867==392&&(541!!259))<(748>=101&&x2+847))))!=(((((233==x2)>(x3>x1))*((27>385)>(3!=219))!!((x2<226)-(x3<=x1))+((858&&x3)+(x0-410)))!!(((558!=x3)>(975!=188))!=(x1<=313)-(359>x1))<=((x2>384&&x0!=562)&&(x3+x0)*(x0>=204)))!!((x0&&386!!x2==950)==((x0<=x0)<=(870==767))!!(651+x0<=(837<=690))<(x2==x1)+(43!!x1))>((((225&&x3)&&357-449)>(784925)-(x2!=76)!!(x3=888*552+(15==543))+((x1-x0)+(454>=236)!!(241!!432)<=(549&&x0))!=((75-x2==(449!!x2))>=(x2+184)-(733!=216))-((189!!x0)*(811!!9)&&(x3==795)>(x3!=603)))!=(((x3=(x1*159&&x3=x2!!x1!=x0)))!=(((x2!=x3!!x2&&718)<=((x3<=901)>221-115))<=(x2*x1==x2-325)+((x2&&x1)&&483*863))))*(((((234!=x2)<=747+x0)<(x3+256==(650!!x3)))<=(((x1!!38)!!207*331)<=(12!!x3)+(415!!88)))*(((x0!=803)>=(x3!=148)!!(x1==37!!x2>=736))<((811!=x0)>=x2*678)-((531>=810)+835*141))>((((627==x3)-(x2&&681)>=(x3+180<=(x2>=x3)))<=((x3!=150)*(378-988)!=(x1>=x2!!x0<650)))>(((182&&656!!x0*x2)!!248*755>(616<=x2))!=((325&&x1)-(914<=502)<=(x3<130!!553<=x2))))));
+write (y)
diff --git a/regression/deep-expressions/generated00018.input b/regression/deep-expressions/generated00018.input
new file mode 100644
index 00000000..6aff932a
--- /dev/null
+++ b/regression/deep-expressions/generated00018.input
@@ -0,0 +1,4 @@
+20
+50
+54
+96
diff --git a/regression/deep-expressions/generated00019.expr b/regression/deep-expressions/generated00019.expr
new file mode 100644
index 00000000..82d4b41d
--- /dev/null
+++ b/regression/deep-expressions/generated00019.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((858*x1>(649!=842))==(x2+680<991-x1))*(((x0>=794)-x2*x2)+((x3!=451)==(759!!x3))))*((((x1==234)<=(715>=203))<((35<=970)>x2*x2))<=((x2!!x0)-(194>=x0))+((x2>=x1)>=(x3<358)))>(((309*x2!!x3-x0)==((x3!=x2)>=558+58))>(893*x2<(24&&600))+((x2==x0)==860+x3))*(((31>=x2)+(x0&&x3))*((x3&&x3)<=x0+x0)+((x1>x0)>=(x2&&x2)!!648-786!=(x3!=744))))!=((((200x0))!=((711==x1)>=807-x3)&&((x0+x0)-(x1>485))*((944!!x2)<(977>x1)))!=((137+528)*(x0!=6)<((887532+161))-(139-x0<=(x0>=x1))*((545>97)>=x1-x0))*(((28+788&&x0-762)&&(x2>=649)+(x2=(14!!x2)+x0*x2)-(((44<=x1)!=(655<=161))<((x1!!x2)>=(x2!=x1))))!!(((((269>=x1)>(964>828))*((760!!x1)&&x1*x1)>((x2+x1>(x0!!256))!=(99+472<(340<=712))))>=(((366==x1)>=465+423)*((671==x3)>(801>x1)))*(((642((((349<=159)<(137>=116))-((263!!513)>(x3==335))!=((970==x2)+(x1+315)!!(x0>=x2)!=(x3>=x1)))<((x1>895!!x2=(x0<=x2))!!(x1==780!!(394!!x3))<(x0<=x2)+(x1==975))))!=((((x2((430-x3)+(514==929))+((x2!!327)<=(x0==848))))-(((((x3849+x0)>(x2+895>(842==436)))>((x3<=x1)>x2-x2)-((x0&&x2)!=(x1==149)))==(((x2!=438)<=(57&&x2))-(140==550&&x0>=x0)!!(631*x0==(x2!!519))==((196x0)))));
+write (y)
diff --git a/regression/deep-expressions/generated00019.input b/regression/deep-expressions/generated00019.input
new file mode 100644
index 00000000..055343c6
--- /dev/null
+++ b/regression/deep-expressions/generated00019.input
@@ -0,0 +1,4 @@
+53
+26
+87
+9
diff --git a/regression/deep-expressions/generated00020.expr b/regression/deep-expressions/generated00020.expr
new file mode 100644
index 00000000..a10d4ee3
--- /dev/null
+++ b/regression/deep-expressions/generated00020.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((x3-x2<=(705>=387)!!(872>840)*(x1&&105))+(((754&&x0)<(x3>=x1))==((601<=25)==(154!=78)))>=((572>=835!!282&&815)>(x2-368>=(x2>x1))!!(166-174>(x3>=996))<=((724!=x1)==(122>x1)))!!((((x1<=x1)!=(52<=708))<=(879==835!!654+x3))<((x1<969)>(x0<=467))*(x0-x1!!x0+531))<(x1*663+(x1&&x3)<((x1==x3)<=(x3!=710)))*((x3=(739!!x3))<=(x2*930!=398*939))==((x1==x2)==91*967!!(x1+x3)+(367&&734)))-((x3+x0<(x2!=196)&&(x3-x2!!x3<=308))!=(((518>x2)>299+x0)<=((45>=x2)!=(x1==24)))))*(((((880&&x0)&&114!=796)!=((x0>x1)<223-x3))>=(622*33-(813!=x1)&&(x1==58)<=(257&&871)))<(((x3!=145)-(951!=297)==((868<=387)>=138-320))<((860<=x0)==(863!=657))+((406-815)-231*x1)))!!(((((x0>=771)!=(x0!!x1))<=((x0!!x0)<=(493>752)))!=((x1!!790)==324+x3)*((700<983)+(x3!=599))&&((x3>383)+(99==689)==764*x3+(x3==x3))>=(x2+x0<(696770)<(270>=998))<(x3>=373!!910+939))<(992>932!!375!=400)*((x0!!x2)>=(701<=x0)))<=((((x3==849)==(197&&x3))!=(865!=x3)+(934==x3))<=((x3<33)+(x3!!x0)<=((x0>x3)!=(897>=181)))))&&((((x1>x0)>=x3*931!!(929>x3)*(676>x3))!!(855*x3>(x2!=675))>((488<=389)!=635-x1))>=(279>x3&&x2=(x3!!x1)&&(x0-x2&&x0*720))>=((x3==867)*(836!!x3)<=(801>x2!!749&&711)))<(((x2-x1)-(x3!=100))+((x2>=x1)==(x0!=837))!=(((x3!!x1)==x1+x0)>((x2!=116)!=458+x0)))));
+write (y)
diff --git a/regression/deep-expressions/generated00020.input b/regression/deep-expressions/generated00020.input
new file mode 100644
index 00000000..ee83d5c4
--- /dev/null
+++ b/regression/deep-expressions/generated00020.input
@@ -0,0 +1,4 @@
+24
+28
+35
+25
diff --git a/regression/deep-expressions/generated00021.expr b/regression/deep-expressions/generated00021.expr
new file mode 100644
index 00000000..9496e89b
--- /dev/null
+++ b/regression/deep-expressions/generated00021.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((((x2<=x0)>=(x2==x2))==(x2-x3&&473-x2))<=(((647>422)==(546&&x2))==(x1*762<=(x1&&489))))>(((x3&&x1)<(x1>336))*((969&&x3)<=x2-x3)==((784>=494)>(202>x1))*(818*x0!=790*x2))&&((((x2!!x0)==(x2=(x1==353)+(170=((871&&978)<(x3!=525))*((201&&x1)-(x0+x0)))>=(((x2==x2)-x3*x0)-(663-803<=(126<=555))!=((545!!x1)*(840>=761)<(906!!442)-(967-695))))&&(((x3<640)+(358>=x0)<((x3&&649)>=(x1&&x0)))+((x2<=x3)>=376*675&&(91-x0)*(x3&&x1))!!((444!=x1)>=(x0!!204))>=(969+x0)+(x1!!807)&&(46<=179)-(176+155)>(x3>x1!!430>736))<(((x0&&391)*(637<216)<=(49+x0<(800<=x1)))==((370!!303)+(x2!!895)>(x1-x3&&x0<251))&&((x0<=x2)+(x1!!173)==((x2>20)==(776==552)))>=(((546==597)!=105*409)>((741&&x1)!=47*x1)))!!(((((x2&&824)<(x1==152))-((343>=414)-x0*x2)!=((420>x1)+(x3>=582)&&x1*24==(x0&&x3)))!=(((x2==x1)<=(x3>=x1))!=((x3>60)<(452==555))&&((142&&266)>=x2-x1)<=(x2*x2&&x3(343!=561)&&998*811(((687+x1<58+x3)==((x2<=x3)>(x1==174)))==(((x0!!x3)!=(830==42))!=(x1*707&&x1>=487)))))*(((x1-x1>(x0<=343)&&674*438<=(x0<=x1))-(((227>255)!=(x2<=989))!=((193<=448)<(453<=828)))>=((x1*x0&&x0+818)>(x0!!x3)*(669&&x2))-(((554<=x3)<=(337=(199<801!!x0>=601)))<=(((x3&&x0)<(563>849)!!(x2417-254)*(((260!!x3)>=x1-x3)<((138&&181)&&(728&&88)))==(((x1<410)<=(225!=445))-(x1<=x0!!339==688)==((611+x2<(x3!=x3))!=((611==x1)>(x3!!496)))))));
+write (y)
diff --git a/regression/deep-expressions/generated00021.input b/regression/deep-expressions/generated00021.input
new file mode 100644
index 00000000..239a32ab
--- /dev/null
+++ b/regression/deep-expressions/generated00021.input
@@ -0,0 +1,4 @@
+95
+29
+34
+69
diff --git a/regression/deep-expressions/generated00022.expr b/regression/deep-expressions/generated00022.expr
new file mode 100644
index 00000000..a9bcddcf
--- /dev/null
+++ b/regression/deep-expressions/generated00022.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((x2+x2>=775-x0)+((25>583)>(x3>=x0))>(x2-x2&&x1>x2!!852>x1&&356==x2))!=((723-575!=993-931)*((738<=x1)>=(939!=575))&&(x2*326<(x2<=439))-((427&&x2)>(x0>195))))*((((x0>739&&793+x2)==((x3!!113)>(764>678)))>((786+942!=x1-617)==(996-x1==(226>x2))))+(((x3!=x1!!(x2!!x2))<=(x0>=897!!x2+628))>=(345==724)*(457!!x1)+((x2<=27)>x1+171)))&&((((852!=118)=(618!=x2))!=(626!=276!!x0==x1))>=(((x3!=x3)+(661>=383)!!(860==x2)-(x2>=25))!!((x2!!x3)>=(x2!!x3))>((x3>197)<=x0+57)))<=((101-857&&(x3!!x1))+((x2>=x3)==x3-604)<((634=x2)))*(((x3-x2>(149!=993))<=(x1!=x0)-(x1<=678))+((x1>=226&&54+x2)>=((25!!x3)>(x3==678))))!!((((879<=x2)-x0*435==(x1!=x2&&(808&&x1)))>=((92-x0=((838<=552)!=(498!=737))))==(((x2&&916)>=(808>=768))>(x0+x3==(47>185)))*((x0+726!!713(285<=50&&x2-x0)!!((x3!=257)+(x1331)))*((((x1!=846)+(x1+x2))+(950*586&&687>x3))*((x3==x3)*(289>=x1)!!121*997>(691!=x3))))>(((((511+133==(x2>x3))==(x0-x2)-(x0!=447))>=(98==x0&&(x1&&x1)!!(809>=420)!=(754<972)))>=((((x3!!362)<(x2==654))>(x2!=72)-(x2=x1+145)==(x2<=367)-(663==x0))))<=(((x3<594)!=(x3>=892))*(922+923>793-x1)==(((585!!x1)!!667+605)<((x1=996)))&&((x0&&x3)&&(129&&x1))*((407==815)+(x3<=x2))+((x3>=47&&863!=x0)>=(865+174!=x3*677)))));
+write (y)
diff --git a/regression/deep-expressions/generated00022.input b/regression/deep-expressions/generated00022.input
new file mode 100644
index 00000000..ac3f0e97
--- /dev/null
+++ b/regression/deep-expressions/generated00022.input
@@ -0,0 +1,4 @@
+54
+97
+56
+33
diff --git a/regression/deep-expressions/generated00023.expr b/regression/deep-expressions/generated00023.expr
new file mode 100644
index 00000000..6e74f01c
--- /dev/null
+++ b/regression/deep-expressions/generated00023.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((317>=x3)<(x3!!x1))*(250<=348&&x0*x0)-((x2!!x2)*(985<=644))*((x3==x3)>=(294=(851<=x3)))!=(((554!!94)>(x0!=13))<(738<=x1!!667>x3))))-((((x1-376>(283&&x2))<=(x3>230)*(82-x2))<((400!!x0)-(x1!=x2)!!(644!!x2)&&762>=618))<=((((799!!901)!!x3>x3)&&(x2<=x1)-(x1>=923))<((111(313>x1))))&&((((x2>865)<=(x3==80))-(355>=355&&x0!=x1))-((969!!x3)<=x2+x0&&(79!=x1&&x2-164))!=(((x2&&x3)-(276==325))+(x1!=928)*(34*109)<=((491!=177)==(x0>758))*(765=x0!!(x1!!x2))!=(398!!274)+(x0!=989))<=((((x1!!x1)>=(x2==x3))>=(x0*x3((124!!347)<=(812!=x3)!!x2*684==(690==x2))))!!(((x0>x1&&568+x1)+((x3>=x3)+(141!=x0))!!((x2+x3)+x2*506)-(411>x0)*(709>=x3))+(((x0!!167)==(x1<=883))*((x2+x2)-(688!=551))==(827+594==(x0>653))+((x2!!x3)!=(297!!792)))!!((x0+386&&(898&&103))-((478>=x0)-x2*x1)<((x2<=225)<(196!=x0)!!(259>=x0)*(x2<=x1)))>=(((288==x0)*(46-x3)<=((x0&&x3)==(x2&&x3)))>=(((166>=x0)==(x3==72))<=((170!!x3)>185-492))))+((((381-340>=(x2<=757))*((853!!x0)==(x3&&x2))!!((x1+x3)-(231-x3))-((x0!!x1)!=875-788))==(((x0>x2)!=(694==x1))<(435==271)*(x1!=391)!!((991=346*293)+(844<=x3!!771-634)))>=(((x1-x1&&x2>169)-(479+x0)*(809<463))+((129+819>(290>x2))+(x2+x0!!x3>=x3))&&((154-906)-(377>=x3)==((x0>x1)!=x2*x1))>=((192-806)*(877*x1)<(x2-x1>566-240)))));
+write (y)
diff --git a/regression/deep-expressions/generated00023.input b/regression/deep-expressions/generated00023.input
new file mode 100644
index 00000000..fa8962d1
--- /dev/null
+++ b/regression/deep-expressions/generated00023.input
@@ -0,0 +1,4 @@
+46
+43
+3
+23
diff --git a/regression/deep-expressions/generated00024.expr b/regression/deep-expressions/generated00024.expr
new file mode 100644
index 00000000..c9b991e8
--- /dev/null
+++ b/regression/deep-expressions/generated00024.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((881!!x3)>=(111>x3)&&(507==x3)>(789<298))&&(x2+x0==592+181&&(403(106!=x3))>(16==x3!!x0==x2)&&(x0*547>(x3>=634))-((x2<=x0)+(x1>311))))-((((991-166==(x2!!629))<((x0==x0)!=(x2!!342)))!=((408-x1>(x1!!x2))>=(450>=x1&&(123!!x1))))>(((x0&&x1)<=(x3!!x2))*((x3>700)!=(793>=387))&&((523!!x3)-(x0==x2))+((x2-302)-(942&&615))))&&(((x2<513)*(273<=419)==((772==718)>(x3!!121)))+((600+x3&&820>=818)<=((743>x1)==(x2&&x1)))<=(((708&&198)==x1-x1)>(990+x2)*(x1+x3))-((x2-x3!!499<=x3)&&(737&&x0)==x2+x3))>((((669*941&&x2!=x3)&&(795-648&&(365!!x1)))!=(((x0>=x2)==(x3!!x2))<=((491<=x3)==(x0>=x1))))<((((798=(106=x3)!=(446>x3))<(x0!=437!!x0&&463))))!!(((((x0>=924)>(243>=x2))*((331<=x3)==(x3!=x2)))*((928&&548!!x3<=873)&&(x2>833)-(x1=x0&&51<=x2)==(683*371<=x0-266))<=(((x3==x1)>(600==x0))>=(615!=x2)-(625!!453))!!((x2==x3)==891-x2)>=(x0&&x3)+(x1!!474)&&(970<=726)*(386-x2)<=((436>=x3)>(x0<=x3)))>=((((442&&594)<=(x3!!x2))==((508>=x2)<(x2<=x2)))<(((481>=x2)=630!!38==287)))+(((104+208>=(x0&&412))<(670-x2==617+x3))>(((287>=x1)>=(99&&835))==((x2>301)<411+x2)))));
+write (y)
diff --git a/regression/deep-expressions/generated00024.input b/regression/deep-expressions/generated00024.input
new file mode 100644
index 00000000..4c27d5ef
--- /dev/null
+++ b/regression/deep-expressions/generated00024.input
@@ -0,0 +1,4 @@
+2
+18
+5
+79
diff --git a/regression/deep-expressions/generated00025.expr b/regression/deep-expressions/generated00025.expr
new file mode 100644
index 00000000..41900f46
--- /dev/null
+++ b/regression/deep-expressions/generated00025.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((637==95)<=(490&&273))<=(329+139>=(x2!!x0)))!=(727*x3-(893>x1))-((x0+870)-(x3>x2)))+(((895!=455)==(x0!!x3))!=(x2*409&&350>x0)!!(642+321>=(x1!=x3)!!819*x3+(567!!570)))<(((x0-129&&x2>=275)-((357=215-122))-((x3!!x1)<=(x2==x3)!!832+976!=(542>=406))<(((x0(x1&&589))+((x0>x3)-(x2!!x3)))-(((x1!!813)=x2)!=(x3==x3))!=((x1&&x2)<(x3==893)))-((306<=x3)!=(x1=((x3>786)==(925&&152)!!235-309==(x1&&410))-(((x1!=x1)!=(347>x2))<((x0&&399)==(149<=x3)))!!((((415!!803)!!(637!!453))!!(x0>=530)>(505!!x1))<((22<=x0)!=(x2<=x3))-(788>x3)*(x0&&324))<(((x0<=610)+(x1!!885))+((427>=x3)!=(126!=534))<(((x1875+286)>(353>x1)-(x1+577))))!!((((872!!x2)+(675!!74)!!(x0&&487)==(596&&x2))-((621!=600)*(645-522)>=(x3+48)-(x2>956))&&((807==481)-(81&&285)==(x3*x0<(845<=418)))>(525==123!!(773!!x0))-((675>175)+(x0==152)))&&((((885!!353)>(x3>x3))!=((645<=x2)<=x2*x0))<=((355!=x3)+(x0>953))+(37==258!!347>x3))>=((881<804&&600!=x0)>((144!!942)!=x1-519))-((306<=674!!116-517)!!(x0!!x0)!=(x2!!21)))<=((((338!!622)>=x1+x0)!=((x3(x0!=284)))-((x3*271)*(x2+x0)+(x3+x2>(860!=x3)))!!((x1*589)*(897>x1))*((x1<=595)>(x1&&655))<((x2>883)<=(1<=x3)!!(x3!=x1)>=x2*x1))-(((x3*x1==(580<292)&&(765<937)==(x3==x0))==(((452!!594)&&183-131)>((x2=((935==829)>x0*427))>(((25>x1)<=202*611)==((778>=314)<(652==x0))))));
+write (y)
diff --git a/regression/deep-expressions/generated00025.input b/regression/deep-expressions/generated00025.input
new file mode 100644
index 00000000..ffdb3f05
--- /dev/null
+++ b/regression/deep-expressions/generated00025.input
@@ -0,0 +1,4 @@
+2
+17
+10
+19
diff --git a/regression/deep-expressions/generated00026.expr b/regression/deep-expressions/generated00026.expr
new file mode 100644
index 00000000..4b6f8930
--- /dev/null
+++ b/regression/deep-expressions/generated00026.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((x2*x2)*(119!!x1)!=((x2&&x3)<=(x1&&x3)))>((x1<=x2)<(607<=x3)!!(x2&&x2)<106*x3))>((x0<333)+(30<380)>(x3+x0)*(138<=x2)&&(x3&&768)-(x3+635)<((252&&335)&&x1!=42)))<=((((x0!!476)<=(376!=x3))>=((x1<=x1)==(x0==830)))!=(((359x0)<=(x3!=x0))-(x1+x0!=(159>=x1))==((x3<503&&358-875)!=((173<934)!=(357==306))))&&((((242&&x0)&&501>=x2)>((315((354+x2)-(x0!=x2))+((x3=x3)))*(((x0!=38)>(196&&147))>((200>=x3)<(x3<=862))&&(262<=381&&155<=383)>(964*x1<=(916=x2))<=(x2!!x3)+(x0&&655))!=((x1*x2>(x1!=x2))==(96+848==(228&&683))))==((x2-x1<(x3<=232))-(x1<=302!!961+x1)<=(((x3!!296)&&x3!=882)!=x1*996+(x1+x3))))!!((((766<113)<=(x1==656))<=((x1==74)!=(541==x2)))-((x0!!x0)*(586&&x1))*((x2<=564)>(x3==811))==((76!!666)>=(908=858))*((x0>=x2!!x2>=762)>=((639<=x1)>499*x2))&&((x2<=910&&x3>x1)!=(x0+191755)<(x2==411))<=(653>x0)+(x0<=x3))!=(((766<=719)*(708<823)!!(691!=698)+(870((x1<=x1)<=(935!=126)))))<((((905==x3)-(389!=228)!=(990==459!!391-400))-((x0-747<=(x1!=x3))+((549>x3)-(89!!864)))>=(((602!=x0)+(x0&&249)<=(x0+896!=(31!!152)))<(((951!=267)<=(x1!=x1))!=(x3-656<=(222<=624)))))<(((536*x3<=175-81)<=(x0+x1==(x2>=727)))+((x0==x3)!=(x0!=x0)!!(x2>=304)<(x2==x0))==(((x1!=510)<(675<=x1))!=(720!=218)-(x1>x3))+(((x2==x3)==(843!=839))>=(x1>152)*(43+x0)))));
+write (y)
diff --git a/regression/deep-expressions/generated00026.input b/regression/deep-expressions/generated00026.input
new file mode 100644
index 00000000..f86f8682
--- /dev/null
+++ b/regression/deep-expressions/generated00026.input
@@ -0,0 +1,4 @@
+5
+56
+16
+93
diff --git a/regression/deep-expressions/generated00027.expr b/regression/deep-expressions/generated00027.expr
new file mode 100644
index 00000000..de092e83
--- /dev/null
+++ b/regression/deep-expressions/generated00027.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((x0!!x3)<=(552!!x3))>((597!!x3)!!899>=x3)&&(879*644<=(388<=x0))<=((104<=963)!=(x0<=x2)))+(((749==168)*(x2*x3)!=((688==x3)>(426=((200!=x2!!88+260)!=(502+97<18+425)))==(((((313>=x2)!=990+x0)!=(633-x0<(x3!!x3)))>=(((x2&&45)<(965&&x0))>(x3>x2)*(885!!602)))>(((x2&&475)>x2+x1)!=((160==590)>=x1+x0))-(x0*x0>(429>x1)!!(x1>=x0)==(x1>=500)))&&(((282-x3!=(x3&&828))<(x2-923>=(934>x0)))-((777>x3)*(273+263)!!x0*831>(529<=978)))*((((768!!275)!!x2>=906)==(284!=x0!!889+148))>(((149&&x0)>=(x3&&x0))>((273>983)<=698*x3)))>(((741+440!=(109!=x2))>=(x3>=642)+(x1x1)-(497&&418))!=((((x2>x0)>=(x0>556))!=(969<=838)*(x1<=537))>(((x0==x1)!=(634==x0))==(544-603!=(127==x2)))))!!((((((x0!!390)==72-x0)!=(305<=x2)*(142>257))==((x1*949>x0+421)<((37&&101)!=(178>945))))<=(((820>x3&&x1<=186)>=(42-x3==x0-202))<=((x0&&619)*(x0-x1)==(x3!=x1&&x0-x2))))>(((x1==55&&743+x1)+(111!=60)*(222!=224))+((378<593!!884==934)&&(165>=12!!758<=693))<((73+918==(x2>x1))+(854-x2<=(x3<=454))!!(x1==346)-(x0>=647)>(x1-x3==(x0>x0)))))+(((((x2>x1)!=(x0>=x1))*(x2+x0&&454*x0)!=((x1&&192)-(x2!!14)!=(538!!624)+(x3<419)))>=(((x1>x2)-(600+x1))-((486>x1)>=(884&&320)))-(((x2!!780)<(573x0-x2)))+(((x1!!x0)&&(x1!!735))+((x0<367)<=(x3&&961))&&((x3<=x3)==(x2==978)!!(x2<=695)>=(x2&&485)))*(((x2+x1<=(881==500))!=((x1!=x3)>=(x0==242)))*((x3&&x0)*(x2!=384)==(174!!x0)+(x3-868)))));
+write (y)
diff --git a/regression/deep-expressions/generated00027.input b/regression/deep-expressions/generated00027.input
new file mode 100644
index 00000000..a45d688e
--- /dev/null
+++ b/regression/deep-expressions/generated00027.input
@@ -0,0 +1,4 @@
+31
+31
+32
+15
diff --git a/regression/deep-expressions/generated00028.expr b/regression/deep-expressions/generated00028.expr
new file mode 100644
index 00000000..c5b4361d
--- /dev/null
+++ b/regression/deep-expressions/generated00028.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((x1!=x1&&x3+419)<=(672+70317)+x1*855)-((x2!!775)<(x2!!818))))-(((653&&628)>(743!!x0))<=((253&&x2)!=(x2>=x3)))*(((609<914)==(x0<213))>((x0!!x0)==(868>=x0)))>((((84>x0&&193+x3)<=(895!=x0!!x2==x1))>((x0&&449)+(652&&830)!!(274+x3)+x3*x1))>=((674*105)*(470-308)<((x1!!163)==(379>=971)))*((x2+804)-(315>281)<(x3x3)))&&((((x2&&x2)&&720354*258))*((x2>=460)<=(1!!x3)!!x2-789>=x2-x0)&&((x3!=x1)<=(698=x0))))<((((x3>=846)>(x2!=x2))<=(x3>=x3)*(x0==x1))>=((x3*x1!!x1<=x0)<=x0*9-(x2-565))&&((x0!!x2)<(x1<=662)!!898-150&&601*198)*(((x2<=794)<=(844==467))==(792<947&&x0==x2)))!!((((x2&&690)<(201&&32))-((890!!x0)>(x3==x0))!!(663>=636)-476*x2==((123578)))+(((437==871)>(x1&&x0)&&(964&&x1)<556*133)<((169+892&&331=x3-393)))<(((794+366==(x0!!311))!=((475<800)!=(923>369)))*((x2*35!=(447<=530))+(x3>=x0)*(883&&x3)))*((((x1!=91)!=(x3>=338))-((x1&&11)>=x0*x2))-(866*x2<=(x3==918)&&(x1*x2)*(169<525))))<=((((((x2262)<=157+x2))==((166>37&&x2((((888==78)==(960>=x2))<=(582<=x2)-(x1==792))<(93<=x2!!0-x0)-(224-x2!=(954>=x1))))<=((x2==x3)*(x3=x1*627))>=((x2-442)+(x2!!490))+((688>=289)>=(x3!!848)))));
+write (y)
diff --git a/regression/deep-expressions/generated00028.input b/regression/deep-expressions/generated00028.input
new file mode 100644
index 00000000..55897925
--- /dev/null
+++ b/regression/deep-expressions/generated00028.input
@@ -0,0 +1,4 @@
+14
+32
+28
+45
diff --git a/regression/deep-expressions/generated00029.expr b/regression/deep-expressions/generated00029.expr
new file mode 100644
index 00000000..210033d9
--- /dev/null
+++ b/regression/deep-expressions/generated00029.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((20==x1!!x0-x2)>((18!!757)==(893==816)))-(((x3>601)>(115==x3))>(x3!=x1!!259>=554))<=((637-x0>=(841<=x1))!=((697>x2)!=(830==722)))+(((365>=746)<337*546)-(x1+473!=721-x3)))>(((794<399)-(573!=x0)!!(337=x3-x0)<(x2+x3==(x2<598))*(233>=277&&x0-x0)&&((x1+909&&(x1&&x1))!=((x1>=990)!=(x3&&683)))<=(509+x3!=x0+x0)+(x3+x0!!602==792))&&((x3>157&&613>=x2)+((x2<=885)!=(591!=x2))==((826!!x2)*(x2!=635)<((208<=716)>=x2-x1)))*((((905<=x3)!=529-x3)<=((532&&x2)!=(x3<=527)))<(x3&&177!!x3<=255)+((x1!!x0)-(x1-x0)))==(((985+x2!=(923!=736))>=(736>879!!x1+428))-((x1=(442&&847)))!!((691&&151)+(579&&x3)>=((431<=850)<(864>=691)))>((x2==759!!362&&x1)&&((x2&&x2)&&x2<=345)))!!(((x2!=x1!!x1-x0)+(x2>=440!!157>984))*((575!=x2)<=x1*x3!!(x3==138)<(x3!=x3))!=(((935>=728!!x1&&106)>((349!=965)!=x3*489))>=((32==87)+(x0<=983)!!(811&&526)>=90*271)))+((((187<=759)>(335!=724))<(353&&x0!!x0!=797)&&(234==x0)*(264=(x3>=x3))+((x2+95<=x0*793)!=312*x1+(x1>x1))))<=((((597!!x0)!!x3==97)*((417>753)!=(x3>x1))!=((10!!x3)==x3*222!!(x3x2)==(191&&x0))>=(x3+x3!=(x1(628==x1))+((x1<=x2)>=(x3!!x1)))-(((x3>945)<=(x0==236)!!(x3==x3)>=(866<=x2))!=((215&&x3)*(382-69)==(268*x1&&348*779)))));
+write (y)
diff --git a/regression/deep-expressions/generated00029.input b/regression/deep-expressions/generated00029.input
new file mode 100644
index 00000000..bdf15888
--- /dev/null
+++ b/regression/deep-expressions/generated00029.input
@@ -0,0 +1,4 @@
+65
+97
+51
+64
diff --git a/regression/deep-expressions/generated00030.expr b/regression/deep-expressions/generated00030.expr
new file mode 100644
index 00000000..ccbb0014
--- /dev/null
+++ b/regression/deep-expressions/generated00030.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((126-734>510+938!!(x2!=x1!!x0*x3))&&(x1+986<(x3==669))>=(265+x3)+(x1!!847))*(((x2+x3<(900>=x0))>((x3>=443)==356-x0))>((787>885)*(x3&&190)>((366>523)<=x3+205)))!!(((760!=801)!=(146>=x3))+((x0<826)<=(433!!x3)))*((x1&&11)!=x2*132&&(195>=x0)==x0-511)>((x1+171!!683<643)!!375+917>=508*x3)-(((x2==x0)-(482&&x1))-((x0==x3)==(x1<=704))))*(((((559==x1)<=(461>428))<((234<617)>=(386<500)))-(((x2<=976)!=984-571)<(x0-x1!=(85!=x3)))<=((((x1!!x1)!!746<=493)>(1&&748)*(x3*x2))<=((x1>x1)<=(x0&&x2))+((x2&&x2)==(893>211))))>((588*x0+(x2>834)!!(x0!!x0)*(856&&31))<=((x0>618)-(304+388))+((x1&&430)-(x2>x1)))-(((x0<778)<=x3*x3)+((x2294)>=(x1<=x0))>(x2*x2!!x1+727))))!!(((((x2*233!=(531!=554))<((245==x0)<=(x3>=x0)))==(962*x3+(61-652))-(x1>=936!!128*x0))>(((325<200!!526&&x0)<=((144>=x0)>=(221&&x3)))<=(x1*x2+(x3!=x1)>=((999>1)==(x3==x0)))))!=(((((x2>9)!=(x1&&3))<((467>=x0)>=295*x2))==((x1>=608!!x2&&965)!!x2*550-(x3>938)))>(((x1>=x1)==(856!=x0)!!(x1&&696)+(x2!=x3))<(((297!!618)!!x0*x3)!=(x3!=404)-(460>134))))!!(((x1!!198)>=853-x1)*((x1+x3)-(897&&628))!!(x1*77!=738*307!!(239<=x1)!=x0-872))-(((x0&&835)>(501x0)<(780<305))!=(x2>=x2!!x0==x1)-((x3&&415)&&908==677))>=(((x3!!334)-(x2<877)>=(962-776)+(x0>=x3))+(((x1&&540)<640+293)<((578<=746)<47-827)))-(((552&&44)!=(205&&851))*((893!=x2)>=(x3==497))!!((x2&&x2)<(x1&&590))<=(722>=168!!(93!!652)))));
+write (y)
diff --git a/regression/deep-expressions/generated00030.input b/regression/deep-expressions/generated00030.input
new file mode 100644
index 00000000..f48f0034
--- /dev/null
+++ b/regression/deep-expressions/generated00030.input
@@ -0,0 +1,4 @@
+88
+77
+16
+87
diff --git a/regression/deep-expressions/generated00031.expr b/regression/deep-expressions/generated00031.expr
new file mode 100644
index 00000000..47049120
--- /dev/null
+++ b/regression/deep-expressions/generated00031.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((((x3!!742)!!992!=176)!=(407-x0==(811<=x2)))>=((417<=762)-(x0==x0)<=((x3<=546)!=(x0!=x1))))<(((x2==x3!!199!=x2)&&(136>=160!!x2*x3))!=(245+x1==(x2==407))*((484!!561)!!x1x0)>=(x3<22))+((335!=x0)<666+x2)&&((616>x2)==(813!!x1))-((x0<=684)!=(x2<569)))==((x2((523-x0<=(589&&x3))<((x1!=595)<=(294!!x2)))))*((((x0<=134)+(205!!x3)>=(x0>=x2)*(x3<=854)&&((x0=(x2==577))*(891*547+x1*x0&&(348<=x1)==(x2>x1)))>(((962&&869!!x2==x2)-((x3==x2)<=(202<=x1))<=((24*980&&x1-x3)&&(296<140)<577*x0))>=(((x3<=x2)x2))>((x3<=250)<(x2==x1)!!(x0<=35)<(x2>=275)))))!!(((x3-x3)*(x0*x1)-(x1<=261&&244+x2)&&(x1==681)+(x1!!x1)<(x2*x2&&412>172))-(((x2==430)!=(x0!=x2))-(355<=379&&510>=379)!=((57>858&&(729!!818))<=(48=x1))))-((((x3*x3!=(x0!=658))<(x3>x3)+(366!!x1))<=(603*x2>=(x0>x2)!!(x3-74!!x0-x3)))<=((271*x3==(816==x2))<(x0>x2)*(297&&x3))-(((x0<=x0)>(x2==x1))+((x2==948)-(x3+271))))>=((((281+x2)+(x2+x3)==(80*x3!!x1+x1))>((808&&828)-(426&&x1))+(252-x2&&x3<=x3))-((x2*x1-677*791)*(x0*325+(489<=x1)))*(((x1>770)==(674>822))*((542<=84)<=(x2<=420)))==(((x1!!x0)+(875!=266)==(x0!=x0)-(x3+797)!!((844>=x0)<=723*x0)+((191-x1)+(x2<952)))>((141+x2!=(x3==815)!!(x0-421)-(x2==x1))>(((970!=x0)(576==x0)-(x3>x1))))));
+write (y)
diff --git a/regression/deep-expressions/generated00031.input b/regression/deep-expressions/generated00031.input
new file mode 100644
index 00000000..41f4b639
--- /dev/null
+++ b/regression/deep-expressions/generated00031.input
@@ -0,0 +1,4 @@
+59
+1
+78
+46
diff --git a/regression/deep-expressions/generated00032.expr b/regression/deep-expressions/generated00032.expr
new file mode 100644
index 00000000..8c178c1c
--- /dev/null
+++ b/regression/deep-expressions/generated00032.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((472<=x2)>(902!!990))-(x3!=x2)*(x1&&748))*((132-x2!=x2+995)<((966&&x1)>=(x2<=x3)))-((869*38&&x3*122)-(x1-x2!=(x3<165))!=((x1-567)-(595!!50))*((679==x0)-x2*x1))&&(((x3>515)>(x1!=x0))==(938&&661!!x3>x3)&&(x1*27-(x0==x1)!!(48>=820)<=(x3>257)))!=((((x0!=x1)!=(740==658))<=(876!!641)*(x2*x3))<(((x2!!x1)!!x2<=x0)>((710=x0*x3))))*((((890>=343)*(536>=x2)-(x0*x2!!x2x2+x0)==(619>x3)+(804!!x0)))==((((x2+120)-x0*x1==(x0<=x3&&x1==x0))<((131>=495)+(156>=x2)<=(x3*x1<=x2-x3)))!=(((x2>x0)>=(x2&&958))-((810>824)<=(x1!=693))!=((29*x3!!530<=874)>=((539!=x3)<=687+874)))))!!(((((x3>139)==(830!!x3))<(x2+545>(x1>958)))-(((x2<310)(x2-68<(153>=x0)))>=(((x3==993)!=x2+x2&&(x1<=434)<=(x1>=x1))>((166!!486)&&452>x3)*((x2!=647)-(x3>x1))))>((((x3+x0)-(x2<=897))*(554*x2!=(34=(x2<573))!=((x2<=x2)>453+x0))<(((518>x2)==(x2>x0)&&(289-x0)*(x1<=848))>=((x1<=x2!!x0<=81)==((525&&768)>x1*x0))))!!((((702!!382)>(x0&&x3))<=(629*199)*(x3!!x1))+(((x1!=608)==(332<=273))+(945*x1+(x0!!541)))==((x2-830>=x1*x1)==((370!!718)!=(x1&&395)))-(((x1==x2)==x1-601)-(43&&x1!!x2>=x2)))<((((x1>=x3)*(x1=x0)))>((943&&x2!!(28!!x3))+(x3*x0)*(46&&839))*((780>=378!!310728)>=85*x2)))));
+write (y)
diff --git a/regression/deep-expressions/generated00032.input b/regression/deep-expressions/generated00032.input
new file mode 100644
index 00000000..9c364fda
--- /dev/null
+++ b/regression/deep-expressions/generated00032.input
@@ -0,0 +1,4 @@
+78
+23
+70
+30
diff --git a/regression/deep-expressions/generated00033.expr b/regression/deep-expressions/generated00033.expr
new file mode 100644
index 00000000..2e38c627
--- /dev/null
+++ b/regression/deep-expressions/generated00033.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((x1+612==(x1>=726))+(686>=x2)*(555+x3)==((304>=448&&x3<=x1)>(303&&496)-(x3-x1)))*(((151-220)*(389!=93)!=(140!=408)-(x1-x2))==((x3==x0)+(916>x0)>=((x2!!692)<(x1<=x0))))-(((900-403>=(446<469)!!(x2<710)+(365+x0))&&(756<196!!x0&&x0)-((945<=x2)>=(900!!x3)))<(((542>488)!=(193>=458))*((6!!446)<(900=((x2==x2)+(x2!!x3)&&(148==993)==x1+80))))*(((((x2<=894)*(706<=x1)<=((x2!!x2)!!x1==216))!=(((x0&&383)<=(416>370))<((314!=x1)==(x0>126))))!=(((644!!419)!!x0+196)*((x0<95)*(304<539))==(((x0=(972==x3!!x0!=x2))))+(((971-512&&521*x2)+(468<=x3)*(x1<=x0)&&(600-881>=231+x0&&95-x0>=x3+x0))>=(((x2=(588<=x2)+(903-884))<((x0<745)-(552==x2)<=(x3-271<14*427)))))!!((((x3==x3!!833>=x1)-((101!=x3)>=(751&&994))<=((x1>=42)+(857-x3)<(495!=x0&&(843!!225))))>((((x1>=x2)<(441!!x2))<(59>993)*(x0<876))<((202&&x3)&&(599!!943))-((810=x0+572))<(((x2&&x0)!=(949>314))>((698<220)>=(x1>=x3))))>=(((280>879&&x1-x2)<=((100>=706)<=(782&&992)))<=(957*x3-(98(632<=x3)))))<((((x1+x1!=(349&&x0))<(x3<203)-(x1<=x3))!=((266*x1>(102&&70))!=(x2>139)+(x2>956)))+(((257>914)<=(x3>=69))>(x0*620&&615+317)!!(x0>=x3)>=x2+916&&((x1!!x3)!!153<=x3))&&(((x3<=890&&709!=350)==(x0==x3!!x0-845))<((x2>x1)(x2>=818)))==((((869!!x3)!!706!=x2)!!(x1!=x0)>=839-x2)<=((x2-900)*(920<753)==(401==x1)-(560+433)))));
+write (y)
diff --git a/regression/deep-expressions/generated00033.input b/regression/deep-expressions/generated00033.input
new file mode 100644
index 00000000..ab1f1ffe
--- /dev/null
+++ b/regression/deep-expressions/generated00033.input
@@ -0,0 +1,4 @@
+29
+10
+40
+3
diff --git a/regression/deep-expressions/generated00034.expr b/regression/deep-expressions/generated00034.expr
new file mode 100644
index 00000000..6521442a
--- /dev/null
+++ b/regression/deep-expressions/generated00034.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((977-778>(x2!!42))==(748*596!=x0-937))*((488&&363)+(984(x3!=494)))<=(x3&&x1!!x3(x3&&x0))))<((((x3>=x3)>=x1*x2)>=(x2*475>x1-390))!=((x2>=170)399))<=(x1>770)+(565+x3))!=((x0!!772)!=x0*188!!x2+x0==(554==x0))))*(((((x2&&x1)>(758==x1))>=(x1>=125)-(913!!537)&&((435!=x3)>(110!!170))>(820<=x1&&604<=266))>=((640+950&&x0>=x2!!(x2<=871)!=(x2==x2))==((x1==x2!!510>x1)==(393+524)-(296!!x1))))==((x0*905!=247+507)>=((x1!!11)!!581>94)&&((169-x2&&(x1!!x0))&&205*x3>(x1<=x3)))*((((x3!!x3)-(x1<89))+(x1-x3!!51<881))-(((x0!!x2)=(471>x2)!!(215>=45)*(x0=x2)==(x3!=774))))+(((x1-x1)-(65!!x2))*((x0<=x1)<=(774!=x2))>=((968+260>(379>x2))>=(224263)*(x1*174))<=((111-x3>(x0==x1))>=((x2<443)==(482>82))))+(((x2&&x3)*(390>=x0)>(x0>11!!x0<753))==((410>x3&&x3*178)<(586<=602!!761-148))))<(((282+597==(x3>464)!!(x0==100)==x1*64)>=((66=67)!=((x2!!504)!!866+x0)))<=(((x2==x1)-(235!=x3)>=x3*521+x0*x1)==(((746==x3)<(279&&x1))==((562>639)<=(90639)>=((x0<=x1)+(788!!483)&&(680&&x1)<=(598>=x0))!!((x3!!111)<0-x3)-(196<=x0&&x3==534)&&(692-838>(x1>x3))!=((350==x2)!=(682<=231))));
+write (y)
diff --git a/regression/deep-expressions/generated00034.input b/regression/deep-expressions/generated00034.input
new file mode 100644
index 00000000..93c8517b
--- /dev/null
+++ b/regression/deep-expressions/generated00034.input
@@ -0,0 +1,4 @@
+8
+22
+80
+47
diff --git a/regression/deep-expressions/generated00035.expr b/regression/deep-expressions/generated00035.expr
new file mode 100644
index 00000000..4de16b93
--- /dev/null
+++ b/regression/deep-expressions/generated00035.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((717==x1)*(x3>954)!=(635+x1)-(x1==x2))-((x3+x1)*(x2*603)!=(296*x0>(x1<104)))<=((x1!=861)<=(x2<261)&&(936*290!!724==x2))*((793+520>=(370!!260))==(x1&&342)-(28<475)))<(((97==691&&765((x3&&346)<(x0x2))>((835&&x3)>=(734==x2)))!!(((631>=434)!=x0*884)==(x1>=816)*(x1>x2))==(x3-x0)*(x2-384)-((296<=691)>=(x2&&x2))))*(((305+602&&(x3&&x3))+(x0!!21)*(x3*824)!=(((5==x0)=787*988)))+(((206<=488)>(x2&&207))==(x2&&x0!!826&&316)&&(647>440)-(x3+x3)>=(x2+x1<=(x0>=589)))>=((30!!x1)-(x2==x3)!=(251>416&&575>=203))*(((928!=x1)<=(x0<204))>((x1&&464)!=(x2<=780)))+(((679&&x1)==(x0!!798))-(x2-159>(x3!=x1))>((x2(991x0)==(x2+x0!=(98!=x2)))>(((x2&&x3!!456>810)>((x3>=919)>(x2>=x2)))!=((x1+270)-914*572>=(174&&394)*(x1==x1))))*((((x3+714>(784<=829))<=(682>=962)*(x3==x1))!=(584*x1-(x2=x2)!!x1-959!=197+x3)>=((991*x1&&x2==x2)==((688<=654)==(968!=x0)))))<=(((((824>30)-(x1-x1))-((125&&x1)>=(842<269))&&(904+463)*(479<=x1)!=(87+x2==(x2!!x2)))!=(((568<=705!!x0!=379)!=((529==x2)>=x1*x0))>((x2!=503)-(x2+x1)==(537-34<=(352>x2)))))==(((x3*75==(x3&&x1)!!(938=((x0+x0<(x3<=447))==(756<714)+(873<=593)))!=(((817>=931!!180!=632)<=((x0(293>x2)))<((x2<=615)*(338*961)!=(511>=242!!488-975))))));
+write (y)
diff --git a/regression/deep-expressions/generated00035.input b/regression/deep-expressions/generated00035.input
new file mode 100644
index 00000000..6928964b
--- /dev/null
+++ b/regression/deep-expressions/generated00035.input
@@ -0,0 +1,4 @@
+40
+99
+61
+46
diff --git a/regression/deep-expressions/generated00036.expr b/regression/deep-expressions/generated00036.expr
new file mode 100644
index 00000000..fa4de373
--- /dev/null
+++ b/regression/deep-expressions/generated00036.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((x1<=x1)!=(x1&&500))+((200!=131)!=(x2!=x3))>=(((433!!x0)&&554>=437)!=(x3+x3>=(97!=282))))-((x0-x0<=(14<=x3))+(x3+88==(x2&&282))!!((261(x3<905)!!(177<=x1!!(x2!!x2))))<=((((60&&508)==(x3<502))+(x2>=x3&&969<643)!=((963==x2)==(399<=233))-((x0<=625)<5+x3))!=(((x3>706)>=(x3<570))>=(x2!=x1)-(x1>=x0)!!(902+410)+x2*398>(933>=529!!804>=300))))*((((972+627&&x1<440)-((174&&64)&&x0-x1))+(((x0>192)==(x3==144))-((x0>=x3)>128+473))!!((554*x3==(x2!!634))!=((232<=763)<(x3>128)))-((859<810)>=(975!=220))*(x0-225!=(x0<453)))<=((((282!!x2)&&283*408)&&x1*515>(x1==x3))<(x2+924==(734==980))-((x1<=700)<(792!!55))!!((540*x0)*(x0!!x3)!!342-x1<=(x3!=795))*((x3&&702)==(639&&578)&&(361x3)-((x2<=x2)+(x1!!x2)))<=((((x3>x1)==(x2<=x0))!=((71!=x1)>(x3!=730)))>=(((425>738)>=(x2<51))==((x0>=x1)<=(x2<=332)))))*((((212&&715)&&213!=x0)!=((820&&221)<=x2-984))+((x1!!x3)&&352-621)*(x2*10==30+x3)&&((x3<=98)-(x0-x1)!=(x3-x2<(x0<=801)))+((39+x1==(x0>=x3))<(858<=348)+(x3>=66)))==(((x2<93)+(918-608))*((729==x0)>=(347<=865))-(((x3&&x0)<(237==366))>=(715+x1>x0*789))&&((x3!!471)*(15<=569)>(x3!=x1&&x2!=853)&&(x0+616)-575*408!=((x1&&x0)>=641*x3)))+((((980<53)==x0+x3!!(329==717)>=(x3<=x1))!!(x0+235>=328-x1)!=((x0>x1)!=x3-569))-(((218>x1!!x2==280)>=(388!=161&&x2>335))!=((x0+x2)-(885+402))-((x1>=133)<(34(x2!=375)))*((958-x2==422-x1)<((x2!!x3)<=(x0!!670)))&&((x3>278)>(68<81)&&(709==336)-817*8)>=((x3+90!=(277&&x0))>((47==x0)<(x2==x1))))==(((x2!!x2)-(x2&&787)<=(84-693>=(298>131)))*((x2>=x0)*(x0<=x2)>((x0==855)==(x3!!400)))<((x2&&511)*(151x1)==(179<133))!=((x1&&x1)&&x3*x0)-((266!=660)-(x2>x2)))))*((464*x0+(x1!!x0)!=(x1==134)*(412<=117)!!((x1>363)-(279>881))-(x2!!x3)*(13!=x0))-((((823<=298)>x1-x0)>=((x3!=339)<961-638))==(((384!!x1)<=(747&&x0))>(263+873)+(493!!x3)))!=(((243+x1<(x1>x1)&&(x2!!319)!=(x1==423))<((662(x1!!746)&&(26>=342)*(391+799)))!=(((759>=530)==899+x2)-(585*x1)*(x1<260))-(304-345>=204+699&&(x0<=947&&(x0!!x3)))))!!((((x1<698)-(658-912)&&(954!!x1)*(x331)>431-x3!!(x3==284)-(x2-x0)))>(((80>239)>x0-357!!(938-x0)+(325!=x1))<((358!!798)*(x1+x2)<((x0>460)<=(x0==x3))))!!((((85==x3)<(379==x2))>=((x0<0)==(342&&188)))-(((549<=917)>=(136!!179))<=(233+x2!!329<=x0))!!(((526+x3)-(465-x2))*(698+104<=(380<834))!!(283<=986)*(207*x2)>(x0=(x2>=x3))==(595-x2<=(599>x3)))*((x2>=x2)*(625<=766)==((292==x2)==783-632))!!((x1&&x2)&&(x0&&214))*(165*867>=(258>=x2))>=((x1&&421)*(296==509)==((x2!=277)==727-x3)))>((((x3>239)-(x2<=x0))+((x0<671)-(x1=x1)<(386&&x0))!=802*157+(294!!x3)))<((166>x0)-(x2-327)<=978*232-(581&&453)&&((932>405)>=(740>666))<((x1>x2)>(x3&&x3))))));
+write (y)
diff --git a/regression/deep-expressions/generated00037.input b/regression/deep-expressions/generated00037.input
new file mode 100644
index 00000000..3d032543
--- /dev/null
+++ b/regression/deep-expressions/generated00037.input
@@ -0,0 +1,4 @@
+66
+79
+4
+51
diff --git a/regression/deep-expressions/generated00038.expr b/regression/deep-expressions/generated00038.expr
new file mode 100644
index 00000000..5e1e468d
--- /dev/null
+++ b/regression/deep-expressions/generated00038.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((x2-x3)+(249>318)==(x3-220)+(x0>=968))*((x2>=x0)+(488+893)==((x3==x1)!=(x0>=x3)))==(((30&&x1)+(456<=x3))-((810>x3)<(995>x2)))*((50x0)!!(804<=236)>=(x1!!863)))>(((560>403&&x0!=x0)-((x3!!10)>(712==425))==(846-x1&&x0+x3)+((x0&&x2)+(x1+11)))<((568+509<=(x2=991))-(890>606)*(815!=427))))*((((465+410&&307==36)+(x1*73&&x2<=x3))+((684*x3!=(x3&&579))<((x3!!660)!=805-x0)))*(((637>=x1&&x1+415)!=((x2!!x1)!!x2&&419))-(((663==x3)==(567>=866))<((x0==x2)>(x3==692))))<=(((349+x0&&x3>=80)==(797>29&&x2==942))>=((x3&&x3)>=564+12&&(x1<=x3)==(x1<466))!!((263==608!!760>221)<((559&&376)>(287!=x3)))==((745x3)!=(x3>701))))!!((((818*x0&&x0<952)>=(x0-878!!x3<=609))!=((613>583)==(105<=897)!!(x0!!126)==(x1!=x3)))+((x1*672)*(x1<=746)+((x3==x2)<=x3*x0)!!(x3*829<=x3-962)*((x1==540)<(759<=410))))-((((x3+191)*(x1+x0)>(406+x2)*(x2+205))+(((x1&&x0)>376-191)<((x2==x3)>x2*317)))-((x1<950)+(515+x0)>((705==780)>(443!=894))&&((x2>x2)>151-x3)<=(91+621==(999>=x0))))!=((((654>=x1&&x1*x1)*((654=(223=713))==((x0>=x2)>=(x1==x0))))<=((0*x3!!645+677)>=(x0>=714!!789+777))+((x0-782==(x2<=174))<=(426&&x3)+(x1&&885)))<=((((x0<=903)+(287>198)&&(x3>972)<(x0>=x3))!=((x0-x2)-(x1!!x0)<((530&&525)>=(387&&961))))!=((x1>x1)*(814+259)<((204>=678)>=(214<428))!!(98&&158)-(x0>x1)>=(x0*323<=(737677*245+(844<=x3)!!(x1==553&&(x1&&x2))&&x0-729!=(x3>=x2))!!((432&&x0)*(536&&333)&&(x0+868)-(935x1)+((775<603)+(x1&&x2)))>=(((613<=x0)!=(623!!x3)&&(868!=117)!=(957>x0)!!(476*135==(x3==232))!=(738-x1)+(x3+870))!!((532&&x3)==(x2!=x3)!!x2*654<=(842==33))<(((x1<=x2)<=(x0==30))!=(476*x1>=(x0==x0)))))*((((262==6)+(x3>=942)>((491!!39)>(973>=188)))*(((539!!128)<370+x1)==(238!=x0)*(x3<749))==((((x3(x3&&x0!!x3!=x1)*(382+x3>=468+x1)))>(((x0+x3>x0-813)>=((646>377)<=906*355))>=(x2==x2!!411*532)+((x2>=833)!=(179!!x0)))-((((x1==619)>(422>=543))<=(880<=950!!x0+540))-(((520!=x3)<=517-234)==(x2>387!!x3==114))))!!(((((x3!=975)<=(405>330))!=((x1!!x2)==(x0==981)))<((516==57)<(x3>x0)&&(357+x1&&594!=x0)))>((x2>=x2)+(x1!!291)==((x0>568)==(804==334))!!(x3<=780!!x0-x0)<((x0>=x2)<(x2==x2)))&&(((x3&&147)&&169<=698)+((x0!!x1)+x3*x2)<=((85=(((x1&&980!!693&&x3)>((x1!=463)==(106!!534)))==(x3-529=628*493)))+((((((x0!=x2)<=(x1>x2))>(878!!x0)+(518-683))!=((675>=x2)+(x0==x3)==((x3&&x3)==x1*x2)))>=(((x0&&158)-745*x1>=((x2&&512)<=352+x1))<=((x2&&322)>(834>x1))*((x1<=x1)*(570==x2))))-(((x2+638&&(x2&&x2))<=(x3*280>=(x3==725)))+((x0>=x0&&420<=x1)<((352>=x1)>=(x3>=x1)))>=((89-650)+(579==x2)!=(x3-273!=(929!=x0)))*((x2!!x0)*(699!=x3)<(x2!!663)-(833!!x2)))));
+write (y)
diff --git a/regression/deep-expressions/generated00039.input b/regression/deep-expressions/generated00039.input
new file mode 100644
index 00000000..e2474b4d
--- /dev/null
+++ b/regression/deep-expressions/generated00039.input
@@ -0,0 +1,4 @@
+25
+53
+6
+88
diff --git a/regression/deep-expressions/generated00040.expr b/regression/deep-expressions/generated00040.expr
new file mode 100644
index 00000000..91a56dbf
--- /dev/null
+++ b/regression/deep-expressions/generated00040.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := ((((((x3>=226)<=(45>=x2))>(x2!!896)*(654>136))-((537+703!=(x0!=x3))<=(170==437&&788>x2))<(((x2>=x3)+(x2==x1)&&(293!!x1)>=(353!!772))<=((817*x1)*(x2>429)<=(378*x2)*(829+x1))))>=(((((x1!=966)!=887+x0)>=((x0>=x3)==(x0>209)))!=((302*x3<=x1-x2)<(x1>x1)-642*x0))==((((439&&x0)>=(782<=x2))>((472==612)<(484=(((257<=274)>=(x1!!89))>=(x3!=858&&590==369)))))*((((x0==x0!!x3==120)<(x3*447&&468*x0)!!((902&&x0)!=(x2!!x3))>=(x3<=548)+(432!=x3))>=(((780!=x0)!=(138<698)&&(x2!=811)-(947!=205))&&((x0<116)+(467>=218)&&(760<=63)+(552+306))))<(((x3!=x1!!x1==x0)!=(423<=x1!!x0==x3)!!((x1<=112)<=(831<=807))*((920==150)-(x0+232)))>=((x3*831==(498==x1))<=((775!=176)>(174!=622))&&((x1==873)!=(x2!!921))+(x1!=312)*(x1=(x0&&x0))==(180+x3>x0+x2))>((x0<=x3)+(271>=x2))+((x1>=633)+(x0<255)))>=((((x3==x1)>(435>=x3))!=(x2==524!!x3>=822))==((x0>711)+(x2-113)>((431!!521)!!261+232))))>(((195!!x1)!=(222!!700))<(980>x2)-(511!=806)!!(27*x3<=x2-x2)>(x0+370!!(x1!!x2)))-(((x0<=x0)==118+x2)<((x0<=x2)<(492==997))&&(449!=349)-(932==x0)<(544-76>=(x0>x3))))+((((x1<=x0)*(663>629)>=((x1<=161)<(432==647)))-(((505>x2)>=(x2==195))>=((15<=185)!=(385!!985)))&&(((998=(x0>=x3))-(x3-x3!=(x3>x3))!!(x2+x0!!x1!=x0)&&(x2!=x2)==(x3x0)))>=((x2!!171)!=517*x2!!(x2>760)-(x2>=x1)))<=((((922&&x2)!=(344<547))>=((568!=884)!=(x3<421)))<=((976*x1&&196+x2)!=(767>290!!350+545))))));
+write (y)
diff --git a/regression/deep-expressions/generated00040.input b/regression/deep-expressions/generated00040.input
new file mode 100644
index 00000000..c76b262b
--- /dev/null
+++ b/regression/deep-expressions/generated00040.input
@@ -0,0 +1,4 @@
+16
+89
+40
+51
diff --git a/regression/deep-expressions/generated00041.expr b/regression/deep-expressions/generated00041.expr
new file mode 100644
index 00000000..7a5a492c
--- /dev/null
+++ b/regression/deep-expressions/generated00041.expr
@@ -0,0 +1,7 @@
+skip;
+read (x0);
+read (x1);
+read (x2);
+read (x3);
+y := (((((x3<=944)+(x3==x2)<((x3((x3*x0>=x2+x1)!=((39!!598)>(x3!=x0))))+((((x1==x1)<(834&&807))>=((479(x3!=x3)))>=(((410&&x0)&&x1-26)>=(x3-184&&(x1!!x0))))!!((x0+420==x3*512)<((x3==x0)!=(x1==996))!!(x3-x3!!x2+x1)>((x3<=x2)>=(x1!!x1)))>=((991-208&&x3!=x2)>((606!!400)==(31>=x3)))*((426=x0))))+(((((x1==781)<38*333)*((493<807)+(x2<352))!!((38>x3)<(x1!=x1))<((95&&x1)==(5<=69)))>((942-681)+x2*873!=(x3*x3<=(288!!x3))!!((x3>=114)-(906&&472)!!(x0>x1)-(x2==x1))))!=(((x1>x3)<=(57==x2))-((60>=792)+(x1==x1))==((405==442&&882>x2)==(x1&&668)+(x1&&x1)))-(((794==x0)<=589*x2)!=(x1<128)-(615&&898)!!(257!=x0)-(x0-x2)<=(235*x1!=(930>7))))!!(((((x1&&878)>=(69&&x2))>=((661>640)<=894*x0))*(((81!!x0)>(x0<=968))<(x2>=x1)-(653!=x3))&&((x1=721))>(((218<=x1)==x1+826)!=((x0>=63)<333+342)))!=(((x0!=x0)+(267==672)==(x2!=x3)+(749!=x2))==((171>=275)==x1+97)+(x3*x0&&(x2&&x2)))+(((x3>=x1)*(x2>=732)<(x1+x1&&87!=x3))-((273