]> Repositorios git - scryer-prolog.git/commitdiff
fix recursive calls to call/N
authorMark Thom <[email protected]>
Fri, 28 Jul 2017 23:02:08 +0000 (17:02 -0600)
committerMark Thom <[email protected]>
Fri, 28 Jul 2017 23:02:08 +0000 (17:02 -0600)
Cargo.lock
Cargo.toml
src/main.rs
src/prolog/ast.rs
src/prolog/codegen.rs
src/prolog/io.rs
src/prolog/iterators.rs
src/prolog/machine.rs
src/prolog/prolog_parser.lalrpop
src/prolog/prolog_parser.rs

index 29899435698987ae37ff96f8af395cf47ffdb9bb..4724aa0790ac07f700d13a84eede5ae7246e2203 100644 (file)
@@ -1,18 +1,27 @@
 [root]
 name = "rusty-wam"
-version = "0.6.4"
+version = "0.6.5"
 dependencies = [
- "lalrpop 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "lalrpop-util 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "termion 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop-util 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "termion 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "aho-corasick"
-version = "0.5.2"
+version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "ascii-canvas"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -21,53 +30,61 @@ version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "bit-set"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "bit-vec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bit-vec 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "bit-vec"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "bitflags"
-version = "0.4.0"
+version = "0.4.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "diff"
-version = "0.1.9"
+version = "0.1.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "docopt"
-version = "0.6.83"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 0.1.75 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "strsim 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "either"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "ena"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
 [[package]]
 name = "fixedbitset"
-version = "0.1.1"
+version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "itertools"
-version = "0.3.25"
+version = "0.5.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
 
 [[package]]
 name = "kernel32-sys"
@@ -80,118 +97,121 @@ dependencies = [
 
 [[package]]
 name = "lalrpop"
-version = "0.12.5"
+version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
+ "ascii-canvas 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "atty 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "bit-set 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "diff 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "docopt 0.6.83 (registry+https://github.com/rust-lang/crates.io-index)",
- "itertools 0.3.25 (registry+https://github.com/rust-lang/crates.io-index)",
- "lalrpop-intern 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "lalrpop-snap 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "lalrpop-util 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "petgraph 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 0.1.75 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex-syntax 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "diff 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "docopt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ena 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop-intern 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop-snap 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop-util 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "petgraph 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "lalrpop-intern"
-version = "0.12.5"
+version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "lalrpop-snap"
-version = "0.12.5"
+version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
+ "ascii-canvas 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "atty 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "bit-set 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "diff 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "docopt 0.6.83 (registry+https://github.com/rust-lang/crates.io-index)",
- "itertools 0.3.25 (registry+https://github.com/rust-lang/crates.io-index)",
- "lalrpop-intern 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "lalrpop-util 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "petgraph 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 0.1.75 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex-syntax 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "diff 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "docopt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ena 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop-intern 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop-util 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "petgraph 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "lalrpop-util"
-version = "0.12.5"
+version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "lazy_static"
-version = "0.2.1"
+version = "0.2.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "libc"
-version = "0.2.16"
+version = "0.2.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "memchr"
-version = "0.1.11"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "ordermap"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
 [[package]]
 name = "petgraph"
-version = "0.1.18"
+version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "fixedbitset 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fixedbitset 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ordermap 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "regex"
-version = "0.1.75"
+version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "aho-corasick 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex-syntax 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "thread_local 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "regex-syntax"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "regex-syntax"
-version = "0.3.5"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "rustc-serialize"
-version = "0.3.19"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "strsim"
-version = "0.5.1"
+version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "term"
-version = "0.4.4"
+version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -200,37 +220,51 @@ dependencies = [
 
 [[package]]
 name = "termion"
-version = "1.2.0"
+version = "1.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "thread-id"
-version = "2.0.0"
+version = "3.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "thread_local"
-version = "0.2.6"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread-id 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "unicode-xid"
-version = "0.0.2"
+version = "0.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "unreachable"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "utf8-ranges"
-version = "0.1.3"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "void"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -244,34 +278,38 @@ version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [metadata]
-"checksum aho-corasick 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2b3fb52b09c1710b961acb35390d514be82e4ac96a9969a8e38565a29b878dc9"
+"checksum aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699"
+"checksum ascii-canvas 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b385d69402821a1c254533a011a312531cbcc0e3e24f19bbb4747a5a2daf37e2"
 "checksum atty 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d0fd4c0631f06448cc45a6bbb3b710ebb7ff8ccb96a0800c994afe23a70d5df2"
-"checksum bit-set 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "84527c7b0452f22545cc010e72d366a435561d2b28b978035550b3778c4d428d"
-"checksum bit-vec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5b97c2c8e8bbb4251754f559df8af22fb264853c7d009084a576cdf12565089d"
-"checksum bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dead7461c1127cf637931a1e50934eb6eee8bff2f74433ac7909e9afcee04a3"
-"checksum diff 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e48977eec6d3b7707462c2dc2e1363ad91b5dd822cf942537ccdc2085dc87587"
-"checksum docopt 0.6.83 (registry+https://github.com/rust-lang/crates.io-index)" = "fc42c6077823a361410c37d47c2535b73a190cbe10838dc4f400fe87c10c8c3b"
-"checksum fixedbitset 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c59882225c22dfcd2db6f0fce45dabe334e64ffa5efacb785b7ffb5af690cc6f"
-"checksum itertools 0.3.25 (registry+https://github.com/rust-lang/crates.io-index)" = "16b73f1c685cfd8ff8d75698ed87e6188cd09944b30c0863d45c2c3699d1da0c"
+"checksum bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9bf6104718e80d7b26a68fdbacff3481cfc05df670821affc7e9cbc1884400c"
+"checksum bit-vec 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f"
+"checksum diff 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0a515461b6c8c08419850ced27bc29e86166dcdcde8fbe76f8b1f0589bb49472"
+"checksum docopt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ab32ea6e284d87987066f21a9e809a73c14720571ef34516f0890b3d355ccfd8"
+"checksum either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18785c1ba806c258137c937e44ada9ee7e69a37e3c72077542cd2f069d78562a"
+"checksum ena 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cabe5a5078ac8c506d3e4430763b1ba9b609b1286913e7d08e581d1c2de9b7e5"
+"checksum fixedbitset 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fcf4412e2d11115c5ed81c2fbdaba8028de0c92553497aa771fc5f4e0c5c8793"
+"checksum itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4833d6978da405305126af4ac88569b5d71ff758581ce5a987dbfa3755f694fc"
 "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
-"checksum lalrpop 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a50b5cdf6b58f1753c86ebcc4d0852ff30478133fb370a27dbf303cbd5621fdc"
-"checksum lalrpop-intern 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)" = "39e21a3b0618b97e727f67d46bf1a21954384f6be6bf72558cc48f149881066e"
-"checksum lalrpop-snap 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e82554f7abfe767e8a22286e7ca6d1ea7d873e91f0259981e15c7c6754d7340d"
-"checksum lalrpop-util 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)" = "36497edf44be49f4663ebd9cfb154a81c84491986a62773c62624911efd3d84d"
-"checksum lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "49247ec2a285bb3dcb23cbd9c35193c025e7251bfce77c1d5da97e6362dffe7f"
-"checksum libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)" = "408014cace30ee0f767b1c4517980646a573ec61a57957aeeabcac8ac0a02e8d"
-"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
-"checksum petgraph 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "bfd1de18b0a5f1777162e5b61aaf498032467d5409ab4ca6dbd03049f5708de1"
-"checksum regex 0.1.75 (registry+https://github.com/rust-lang/crates.io-index)" = "f62414f9d3b0f53e827ac46d6f8ce2ff6a91afd724225a5986e54e81e170693c"
-"checksum regex-syntax 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a21935ce5a4dfa48e3ded1aefbbe353fb9ab258b0d3fa0bd168bef00797b3dc7"
-"checksum regex-syntax 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279401017ae31cf4e15344aa3f085d0e2e5c1e70067289ef906906fdbe92c8fd"
-"checksum rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "6159e4e6e559c81bd706afe9c8fd68f547d3e851ce12e76b1de7914bab61691b"
-"checksum strsim 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "50c069df92e4b01425a8bf3576d5d417943a6a7272fbabaf5bd80b1aaa76442e"
-"checksum term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3deff8a2b3b6607d6d7cc32ac25c0b33709453ca9cceac006caac51e963cf94a"
-"checksum termion 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6e710c59ecea168019486885ade43ea5329bb9a08a117410052fb81b250f40ae"
-"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
-"checksum thread_local 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "55dd963dbaeadc08aa7266bf7f91c3154a7805e32bb94b820b769d2ef3b4744d"
-"checksum unicode-xid 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f69506a2561962651710609304bbb961fa3da598c812f877975a82e48ee144f9"
-"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum lalrpop 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8ebe5a5c90d5edeecb7f62f6ebec0a3d0f6faf4759a052708348cda99fd311a0"
+"checksum lalrpop-intern 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05410c1e4aff497bdea1ccb274ac35536fda0ee858600df36966502d4f7acbe3"
+"checksum lalrpop-snap 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3f866ece35287f5223a1a022c5d86417c260cda2ca9c8a156af9959404ce5313"
+"checksum lalrpop-util 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7c7743f235fc17f5f50f3b1e64a8690ee154f17f86bd68cbb78787c5b37907f7"
+"checksum lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3b37545ab726dd833ec6420aaba8231c5b320814b9029ad585555d2a03e94fbf"
+"checksum libc 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)" = "38f5c2b18a287cf78b4097db62e20f43cace381dc76ae5c0a3073067f78b7ddc"
+"checksum memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4"
+"checksum ordermap 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "c036a53e6bb62d7eee2edf7e087df56fd84c7bbae6a0bd93c2b9f54bddf62e03"
+"checksum petgraph 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "14c6ae5ccb73b438781abc93d35615019b1ad6e24b44116377fb819cfd7587de"
+"checksum regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b"
+"checksum regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db"
+"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
+"checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"
+"checksum term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fa63644f74ce96fbeb9b794f66aff2a52d601cbd5e80f4b97123e3899f4570f1"
+"checksum termion 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9105678ba52491a8e38e67be7842435ac44d7797b9b05bcdad370b0c84559615"
+"checksum thread-id 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8df7875b676fddfadffd96deea3b1124e5ede707d4884248931077518cf1f773"
+"checksum thread_local 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c85048c6260d17cf486ceae3282d9fb6b90be220bf5b28c400f5485ffc29f0c7"
+"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
+"checksum unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1f2ae5ddb18e1c92664717616dd9549dde73f539f01bd7b77c2edb2446bdff91"
+"checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122"
+"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
 "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
 "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
index 46c8ec45a49c31e2ad0955a000001d961638103a..f7a338a9a1cd38507e0a2eaf94befa1b63adf225 100644 (file)
@@ -1,15 +1,18 @@
 [package]
 name = "rusty-wam"
-version = "0.6.4"
+version = "0.6.5"
 authors = ["Mark Thom"]
 
 build = "build.rs"
 
+[dependencies]
+regex = "0.2.1"
+
 [dependencies.termion]
-version = "1.2.0"
+version = "1.4.0"
 
 [dependencies.lalrpop-util]
-version = "0.12.5"
+version = "0.13.1"
 
 [build-dependencies.lalrpop]
-version = "0.12.5"
\ No newline at end of file
+version = "0.13.1"
\ No newline at end of file
index e736446690bd5194c78aed7e0df92d195e9a12d4..cdf1f6390ffc50bbf5d17a797f99a95c89f99d58 100644 (file)
@@ -3,7 +3,6 @@ mod prolog;
 
 use prolog::io::*;
 use prolog::machine::*;
-use prolog::prolog_parser::*;
 
 #[cfg(test)]
 mod tests {
@@ -13,8 +12,8 @@ mod tests {
     fn submit(wam: &mut Machine, buffer: &str) -> bool {
         wam.reset();
 
-        match parse_TopLevel(buffer.trim()) {
-            Ok(tl) =>
+        match parse_code(buffer.trim()) {
+            Some(tl) =>
                 match eval(wam, &tl) {
                     EvalSession::InitialQuerySuccess(_, _) |
                     EvalSession::EntrySuccess |
@@ -22,7 +21,7 @@ mod tests {
                         true,
                     _ => false
                 },
-            Err(_) => panic!("Bad parse in test case!")
+            None => panic!("Grammatical error of some kind!")
         }
     }
 
@@ -647,19 +646,31 @@ mod tests {
         assert_eq!(submit(&mut wam, "?- call_mult(p(X), one)."), true);
         assert_eq!(submit(&mut wam, "?- call_mult(p(two), one)."), false);
         assert_eq!(submit(&mut wam, "?- call_mult(p(two), two)."), true);
+
+        submit(&mut wam, "f(call(f, undefined)). f(undefined).");
+        submit(&mut wam, "call_var(P) :- P.");
+                
+        assert_eq!(submit(&mut wam, "?- f(X), call_var(X)."), true);
+        assert_eq!(submit(&mut wam, "?- f(call(f, Q)), call_var(call(f, Q))."), true);
+        assert_eq!(submit(&mut wam, "?- call_var(call(undefined, Q))."), false);
+
+        assert_eq!(submit(&mut wam, "?- call(call)."), false);
+        assert_eq!(submit(&mut wam, "?- call(call(call))."), false);
+        assert_eq!(submit(&mut wam, "?- call(call(call(call)))."), false);
+        assert_eq!(submit(&mut wam, "?- call(call(call(call(call))))."), false);
+        assert_eq!(submit(&mut wam, "?- call(call(call(call(call(call)))))."), false);
+        assert_eq!(submit(&mut wam, "?- call(call(call(call(call(call(p(X)))))))."), true);
     }
 }
 
 fn process_buffer(wam: &mut Machine, buffer: &str)
 {
-    match parse_TopLevel(buffer.trim()) {
-        Ok(tl) => {
+    match parse_code(buffer.trim()) {
+        Some(tl) => {
             let result = eval(wam, &tl);
             print(wam, result);
         },
-        Err(_) => {
-            println!("Grammatical error of some kind!");
-        }
+        None => println!("Grammatical error!")
     };
 }
 
index 56083c2e2291e0e78288ae8ab374f5df08171de0..5a84b8c8c3faf265d08a0f12142b6f70f1ca8c30 100644 (file)
@@ -1,6 +1,7 @@
 use std::cell::Cell;
 use std::cmp::Ordering;
 use std::collections::{HashMap, VecDeque};
+use std::iter::*;
 use std::ops::{Add, AddAssign};
 use std::vec::Vec;
 
@@ -57,6 +58,38 @@ pub enum TopLevel {
     Rule(Rule)
 }
 
+impl TopLevel {
+    pub fn query_iter_mut<'a>(&'a mut self) -> Box<Iterator<Item=&'a mut QueryTerm> + 'a>
+    {
+        let mut iter: Box<Iterator<Item=&'a mut QueryTerm> + 'a> = Box::new(empty());
+
+        match self {
+            &mut TopLevel::Rule(Rule { head: (_, ref mut head), ref mut clauses }) => {
+                iter = Box::new(once(head));
+                iter = Box::new(iter.chain(clauses.iter_mut()));
+            },
+            &mut TopLevel::Query(ref mut clauses) =>
+                iter = Box::new(iter.chain(clauses.iter_mut())),
+            &mut TopLevel::Predicate(ref mut pred_clauses) =>
+                for pred_clause in pred_clauses.iter_mut() {
+                    match pred_clause {
+                        &mut PredicateClause::Rule(Rule { head: (_, ref mut head),
+                                                          ref mut clauses })
+                            =>
+                        {
+                            iter = Box::new(once(head));
+                            iter = Box::new(iter.chain(clauses.iter_mut()));
+                        },
+                        _ => {}
+                    }
+                },
+            _ => {}
+        }
+        
+        iter
+    }
+}
+
 #[derive(Clone, Copy)]
 pub enum Level {
     Deep, Shallow
@@ -517,3 +550,4 @@ impl Term {
         }
     }
 }
+
index 630786506ea81e4bc840b4918befc4229db12ac9..15fb9432c4fb24daa75af663783fc2cf534f7f01 100644 (file)
@@ -210,7 +210,6 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
                     *ctrl = ControlInstruction::ExecuteN(terms.len());
                 },
             _ => dealloc_index = body.len()
-            
         };
 
         dealloc_index
index 97f5163338e4089f4ed51b3900a5c4b5764bef6b..4ace7e9bacb2dd40b64e7e101a229ff65f2739f5 100644 (file)
@@ -2,6 +2,7 @@ use prolog::ast::*;
 use prolog::codegen::*;
 use prolog::debray_allocator::*;
 use prolog::machine::*;
+use prolog::prolog_parser::*;
 
 use termion::raw::IntoRawMode;
 use termion::input::TermRead;
@@ -9,6 +10,7 @@ use termion::event::Key;
 
 use std::io::{Write, stdin, stdout};
 use std::fmt;
+use std::mem::swap;
 
 impl fmt::Display for Constant {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
@@ -195,6 +197,35 @@ impl fmt::Display for RegType {
     }
 }
 
+pub fn parse_code(input: &str) -> Option<TopLevel>
+{
+    match parse_TopLevel(input) {
+        Ok(mut tl) => {
+            for query in tl.query_iter_mut() {
+                let cts = match query {
+                    &mut QueryTerm::Term(Term::Clause(_, ref name, ref mut cts)) => {     
+                        if name == "call" {
+                            let mut new_cts = Vec::with_capacity(0);
+                            swap(&mut new_cts, cts);
+                            
+                            Some(new_cts)
+                        } else {
+                            None
+                        }
+                    },
+                    _ => None
+                };
+
+                if let Some(cts) = cts {
+                    swap(&mut QueryTerm::CallN(cts), query);
+                }
+            }
+
+            Some(tl)
+        },
+        Err(_) => None
+    }
+}
 
 fn is_consistent(predicate: &Vec<PredicateClause>) -> bool {
     let name  = predicate.first().unwrap().name();
@@ -285,7 +316,7 @@ Each predicate must have the same name and arity.";
 
             let compiled_fact = cg.compile_fact(fact);
             wam.add_fact(fact, compiled_fact);
-            
+
             EvalSession::EntrySuccess
         },
         &TopLevel::Rule(ref rule) => {
@@ -300,7 +331,8 @@ Each predicate must have the same name and arity.";
             let mut cg = CodeGenerator::<DebrayAllocator>::new();
 
             let compiled_query = cg.compile_query(query);
-            wam.submit_query(compiled_query, cg.take_vars())            
+            print_code(&compiled_query);
+            wam.submit_query(compiled_query, cg.take_vars())
         }
     }
 }
index 2c0bf1a91ee4815a1f20e32f9df7a2c0113f2f90..b4279a7850b230eb51782d02d1b0aab27d96c840 100644 (file)
@@ -70,7 +70,7 @@ impl<'a> QueryIterator<'a> {
     fn new(term: QueryTermRef<'a>) -> Self {
         match term {
             QueryTermRef::CallN(child_terms) => {
-                let state = IteratorState::Clause(0, ClauseType::CallN, child_terms);
+                let state = IteratorState::Clause(1, ClauseType::CallN, child_terms);
                 QueryIterator { state_stack: vec![state] }
             },
             QueryTermRef::Term(term) => Self::from_term(term),
@@ -96,7 +96,9 @@ impl<'a> Iterator for QueryIterator<'a> {
                 IteratorState::Clause(child_num, ct, child_terms) => {
                     if child_num == child_terms.len() {
                         match ct {
-                            ClauseType::CallN | ClauseType::Root =>
+                            ClauseType::CallN =>
+                                self.push_subterm(Level::Shallow, child_terms[0].as_ref()),
+                            ClauseType::Root =>
                                 return None,
                             ClauseType::Deep(_, _, _) =>
                                 return Some(TermRef::Clause(ct, child_terms))
index 26c27d8885798df8a4b0c1d844191994d100126c..bb114e002b3175704f9f387feff88505e288aece 100644 (file)
@@ -15,13 +15,17 @@ enum MachineMode {
     Write
 }
 
-struct MachineState {
+//TODO: probably.. the wrong solution. should integrate deeply with the WAM.
+//type SpecialHandler<'a> = fn(&'a mut MachineState, bool, usize);
+
+struct MachineState { //<'a> {
     h: usize,
     s: usize,
     p: CodePtr,
     b: usize,
     b0: usize,
     e: usize,
+    //special_handlers: HashMap<&'a Atom, SpecialHandler<'a>>,
     num_of_args: usize,
     cp: CodePtr,
     fail: bool,
@@ -99,7 +103,7 @@ impl Machine {
     pub fn failed(&self) -> bool {
         self.ms.fail
     }
-
+    
     pub fn add_fact(&mut self, fact: &Term, mut code: Code) {
         if let Some(name) = fact.name() {
             let p = self.code.len();
@@ -289,8 +293,8 @@ impl Machine {
     pub fn submit_query<'a>(&mut self, code: Code, alloc_locs: AllocVarDict<'a>) -> EvalSession<'a>
     {
         let mut heap_locs = HashMap::new();
-        
-        self.cached_query = Some(code);            
+
+        self.cached_query = Some(code);
         self.run_query(&alloc_locs, &mut heap_locs);
 
         if self.failed() {
@@ -977,7 +981,76 @@ impl MachineState {
                 self.p  = CodePtr::DirEntry(compiled_tl_index);
             },
             None => self.fail = true
-        };        
+        };
+    }
+
+    fn dispatch_call_n(&mut self,
+                       code_dir: &CodeDir,
+                       name: Atom,
+                       is_call: bool,
+                       arity: &mut usize,
+                       narity: usize)
+                       -> bool
+    {
+        if name == "call" {
+            let new_pred = self.registers[1].clone();
+
+            for i in 2 .. *arity + narity {
+                self.registers[i-1] = self.registers[i].clone();
+            }
+
+            self.registers[*arity + narity - 1] = new_pred;
+
+            if *arity + narity - 1 > 0 {
+                *arity = *arity + narity - 1;
+                return true;
+            } else {
+                self.fail = true;
+                return false;
+            }
+        }
+
+        if is_call {
+            self.try_call_predicate(code_dir, name, *arity + narity - 1);
+        } else {
+            self.try_execute_predicate(code_dir, name, *arity + narity - 1);
+        }
+        
+        false
+    }
+
+    fn execute_call_n(&mut self, code_dir: &CodeDir, is_call: bool, mut arity: usize)
+    {
+        loop {
+            let addr = self.deref(self.registers[arity].clone());
+
+            match self.store(addr) {
+                Addr::Str(a) => {
+                    let result = self.heap[a].clone();
+
+                    if let HeapCellValue::NamedStr(narity, name) = result {
+                        for i in (1 .. arity).rev() {
+                            self.registers[i + narity] = self.registers[i].clone();
+                        }
+
+                        for i in 1 .. narity + 1 {
+                            self.registers[i] = self.heap[a + i].as_addr(a + i);
+                        }
+
+                        if self.dispatch_call_n(code_dir, name, is_call, &mut arity, narity) {
+                            continue;
+                        }
+                    }
+                },
+                Addr::Con(Constant::Atom(name)) =>
+                    if self.dispatch_call_n(code_dir, name, is_call, &mut arity, 0) {
+                        continue;
+                    },
+                _ => self.fail = true
+            };
+            
+            break;
+        }
     }
     
     fn execute_ctrl_instr(&mut self, code_dir: &CodeDir, instr: &ControlInstruction)
@@ -987,35 +1060,14 @@ impl MachineState {
                 let num_frames = self.num_frames();
 
                 self.and_stack.push(num_frames + 1, self.e, self.cp, num_cells);
-                
+
                 self.e = self.and_stack.len() - 1;
                 self.p += 1;
             },
             &ControlInstruction::Call(ref name, arity, _) =>
                 self.try_call_predicate(code_dir, name.clone(), arity),
-            &ControlInstruction::CallN(arity) => {
-                let addr = self.deref(self.registers[arity].clone());
-
-                match self.store(addr) {
-                    Addr::Str(a) => {
-                        let result = self.heap[a].clone();
-
-                        if let HeapCellValue::NamedStr(narity, name) = result {
-                            for i in 1 .. narity + 1 {
-                                self.registers[i + narity] = self.registers[i].clone();
-                                self.registers[i] = self.heap[a + i].as_addr(a + i);
-                            }
-
-                            self.try_call_predicate(code_dir, name, arity + narity - 1);
-                        } else {
-                            self.fail = true;
-                        }
-                    },
-                    Addr::Con(Constant::Atom(name)) =>
-                        self.try_call_predicate(code_dir, name, arity - 1),
-                    _ => self.fail = true
-                };
-            },
+            &ControlInstruction::CallN(arity) =>
+                self.execute_call_n(code_dir, true, arity),
             &ControlInstruction::Deallocate => {
                 let e = self.e;
 
@@ -1025,30 +1077,9 @@ impl MachineState {
                 self.p += 1;
             },
             &ControlInstruction::Execute(ref name, arity) =>
-                self.try_execute_predicate(code_dir, name.clone(), arity),            
-            &ControlInstruction::ExecuteN(arity) => {
-                let addr = self.deref(self.registers[arity].clone());
-
-                match self.store(addr) {
-                    Addr::Str(a) => {
-                        let result = self.heap[a].clone();
-
-                        if let HeapCellValue::NamedStr(narity, name) = result {
-                            for i in 1 .. narity + 1 {
-                                self.registers[i + narity] = self.registers[i].clone();
-                                self.registers[i] = self.heap[a + i].as_addr(a + i);
-                            }
-
-                            self.try_execute_predicate(code_dir, name, arity + narity - 1);
-                        } else {
-                            self.fail = true;
-                        }
-                    },
-                    Addr::Con(Constant::Atom(name)) =>
-                        self.try_execute_predicate(code_dir, name, arity - 1),
-                    _ => self.fail = true
-                };                
-            },
+                self.try_execute_predicate(code_dir, name.clone(), arity),
+            &ControlInstruction::ExecuteN(arity) =>
+                self.execute_call_n(code_dir, false, arity),
             &ControlInstruction::Proceed =>
                 self.p = self.cp,
         };
index 5a2135db374de7ccc5beae1ce974b207f76f68ab..ccebf81eb33e82b9781657e1ac191ba81fdf7e16 100644 (file)
@@ -1,4 +1,5 @@
 use prolog::ast::*;
+//use prolog::prolog_parser_utils::*;
 
 use std::cell::Cell;
 
@@ -19,49 +20,8 @@ BoxedTerm : Box<Term> = {
     <t:Term> => Box::new(t)
 };
 
-Call : QueryTerm = {
-    "call" "(" <c:Call> <ts: ("," <BoxedTerm>)*> ")" => {
-        match c {
-            QueryTerm::CallN(mut terms) => {
-                let vt = terms.pop().unwrap();
-                let mut ts = ts;
-                
-                terms.append(&mut ts);
-                terms.push(vt);
-                
-                QueryTerm::CallN(terms)
-            },
-            QueryTerm::Term(Term::Clause(cell, atom, mut terms)) => {
-                let mut ts = ts;                
-                terms.append(&mut ts);
-                QueryTerm::Term(Term::Clause(cell, atom, terms))
-            },
-            _ => c
-        }
-    },    
-    "call" "(" <a:Atom> "(" <ts: (<BoxedTerm> ",")*> <t:BoxedTerm> ")"
-    <tss: ("," <BoxedTerm>)*> ")" => {
-        let mut ts  = ts;
-        let mut tss = tss;
-
-       ts.push(t);
-
-        ts.append(&mut tss);
-        QueryTerm::Term(Term::Clause(Cell::default(), a, ts))
-    },
-    "call" "(" <a:Atom> <ts: ("," <BoxedTerm>)*> ")" =>        
-        QueryTerm::Term(Term::Clause(Cell::default(), a, ts)),    
-    "call" "(" <v:Var> <ts: ("," <BoxedTerm>)*> ")" => {
-        let mut ts = ts;
-       let bv = Box::new(Term::Var(Cell::default(), v));
-        
-        ts.push(bv);
-        QueryTerm::CallN(ts)
-     }       
-};
-
 Clause : Term = {
-    <a:Atom> "(" <ts: (<BoxedTerm> ",")*> <t:BoxedTerm> ")" => {
+    <a: Atom> "(" <ts: (<BoxedTerm> ",")*> <t:BoxedTerm> ")" => {
        let mut ts = ts;
        ts.push(t);
        Term::Clause(Cell::default(), a, ts)
@@ -109,22 +69,20 @@ Rule : Rule = {
     <c:Clause> ":-" <h:QueryTerm> <cs: ("," <QueryTerm>)*> =>
         Rule { head: (c, h), clauses: cs },
     <a:Atom> ":-" <h:QueryTerm> <cs: ("," <QueryTerm>)*> =>
-        Rule { head: (Term::Constant(Cell::default(), Constant::Atom(a)),
-                     h),
+        Rule { head: (Term::Constant(Cell::default(), Constant::Atom(a)), h),
                clauses: cs }
 };
 
 QueryTerm : QueryTerm = {
-    <Call>   => <>,
     "!"      => QueryTerm::Cut,
     <Var>    => QueryTerm::CallN(vec![Box::new(Term::Var(Cell::default(), <>))]),
-    <Clause> => QueryTerm::Term(<>),
+    <Clause> => QueryTerm::Term(<>),        
     <Atom>   => QueryTerm::Term(Term::Constant(Cell::default(), Constant::Atom(<>)))
 };
 
 Term : Term = {
-    <Atom>   => Term::Constant(Cell::default(), Constant::Atom(<>)),
     <Clause> => <>,
+    <Atom>   => Term::Constant(Cell::default(), Constant::Atom(<>)),
     <List>   => <>,
     <Var>    => Term::Var(Cell::default(), <>),
     "_"      => Term::AnonVar
index 6ab46d0d099d4ab7df3787ae3409bec2d748ae70..c465658fc1e69caa3df79d8bc6daf26730e89def 100644 (file)
@@ -21,14 +21,9 @@ mod __parse__TopLevel {
         Term_22_5b_5d_22(&'input str),
         Term_22_5d_22(&'input str),
         Term_22___22(&'input str),
-        Term_22call_22(&'input str),
         Term_22_7c_22(&'input str),
         Termr_23_22_5bA_2dZ_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(&'input str),
         Termr_23_22_5ba_2dz_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(&'input str),
-        Termerror(__lalrpop_util::ErrorRecovery<usize, (usize, &'input str), ()>),
-        Nt_28_22_2c_22_20_3cBoxedTerm_3e_29(Box<Term>),
-        Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2a(::std::vec::Vec<Box<Term>>),
-        Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(::std::vec::Vec<Box<Term>>),
         Nt_28_22_2c_22_20_3cQueryTerm_3e_29(QueryTerm),
         Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2a(::std::vec::Vec<QueryTerm>),
         Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2b(::std::vec::Vec<QueryTerm>),
@@ -42,7 +37,6 @@ mod __parse__TopLevel {
         Nt_28_3cQueryTerm_3e_20_22_2c_22_29_2b(::std::vec::Vec<QueryTerm>),
         NtAtom(Atom),
         NtBoxedTerm(Box<Term>),
-        NtCall(QueryTerm),
         NtClause(Term),
         NtList(Term),
         NtListInternals(Term),
@@ -58,904 +52,324 @@ mod __parse__TopLevel {
     }
     const __ACTION: &'static [i32] = &[
         // State 0
-        0, 0, 0, 0, 0, 0, 12, 13, 14, 0, 15, 0, 0, 16, 17, 0,
+        0, 0, 0, 0, 0, 0, 12, 13, 14, 0, 15, 0, 16, 17,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 0, 16, 17, 0,
+        0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 16, 17,
         // State 2
-        0, 21, 0, 0, -57, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 21, 0, 0, -42, 22, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 0, -58, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, -41, 23, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43,
         // State 5
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47,
         // State 6
-        0, 0, 0, 0, 0, 0, 0, -17, -17, 0, -17, 0, 0, -17, -17, 0,
+        -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12,
         // State 7
-        0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
-        0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51,
         // State 10
-        0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44,
         // State 11
-        33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 36, 0,
+        32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17,
         // State 12
-        0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 46, 0, 0, 47, 48, 0,
+        0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 16, 17,
         // State 13
-        0, 0, 0, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23,
         // State 14
-        0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45,
         // State 15
-        0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50,
         // State 16
-        0, -24, 0, 0, -24, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19,
         // State 17
-        0, 0, 0, 0, 0, 0, 0, -18, -18, 0, -18, 0, 0, -18, -18, 0,
+        0, 0, 0, 0, 0, 0, 0, -13, -13, 0, -13, 0, -13, -13,
         // State 18
-        0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 19
-        0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 20
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
+        0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 16, 17,
         // State 21
-        33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 36, 0,
+        32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17,
         // State 22
-        33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 36, 0,
+        32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17,
         // State 23
-        0, 0, 0, 0, 0, 0, 0, -44, -44, 0, -44, 0, 0, -44, -44, 0,
+        0, 0, 0, 0, 0, 0, 0, -29, -29, 0, -29, 0, -29, -29,
         // State 24
-        0, 0, 0, 0, 0, 0, 0, -45, -45, 0, -45, 0, 0, -45, -45, 0,
+        0, 0, 0, 0, 0, 0, 0, -30, -30, 0, -30, 0, -30, -30,
         // State 25
-        33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 36, 0,
+        32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17,
         // State 26
-        0, 66, 0, -52, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 21, 0, -36, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 27
-        0, 0, 0, -48, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35,
         // State 28
-        0, 0, 0, -51, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 29
-        0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 46, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 30
-        0, 0, 0, 68, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34,
         // State 31
-        0, 0, 0, -50, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33,
         // State 32
-        0, 0, 0, -49, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 21, -42, -42, 0, 0, 0, 0, 0, -42, 0, -42, 0, 0,
         // State 33
-        0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 47, 0, 0, 0, 0, 0, -25, 0, 48, 0, 0,
         // State 34
-        0, 0, 0, -66, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41,
         // State 35
-        0, -24, 0, -24, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0,
         // State 36
-        0, 70, 0, -57, 0, 0, 0, 0, 0, -57, 0, 0, -57, 0, 0, 0,
+        -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20,
         // State 37
-        0, 0, 0, 71, 0, 0, 0, 0, 0, -40, 0, 0, 72, 0, 0, 0,
+        -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29,
         // State 38
-        0, 0, 0, -58, 0, 0, 0, 0, 0, -58, 0, 0, -58, 0, 0, 0,
+        -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
         // State 39
-        0, 0, 0, -59, 0, 0, 0, 0, 0, -59, 0, 0, -59, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 16, 17,
         // State 40
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0,
+        0, 0, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 41
-        0, 0, 0, -25, 0, 0, 0, 0, 0, -25, 0, 0, -25, 0, 0, 0,
+        0, 0, 0, 54, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 42
-        0, 0, 0, -60, 0, 0, 0, 0, 0, -60, 0, 0, -60, 0, 0, 0,
+        0, 0, 0, 54, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 43
-        0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 46, 0, 0, 47, 48, 0,
+        0, 0, 0, 56, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 44
-        0, 0, 0, -38, 0, 0, 0, 0, 0, -38, 0, 0, -38, 0, 0, 0,
+        -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46,
         // State 45
-        0, 0, 0, -61, 0, 0, 0, 0, 0, -61, 0, 0, -61, 0, 0, 0,
+        -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17,
         // State 46
-        0, 0, 0, -66, 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 16, 17,
         // State 47
-        0, -24, 0, -24, 0, 0, 0, 0, 0, -24, 0, 0, -24, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 16, 17,
         // State 48
-        0, 0, 0, 0, 0, 0, 0, -44, -44, 0, -44, 0, 0, -44, -44, 0,
+        -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24,
         // State 49
-        0, 0, 0, 0, 0, 0, 0, -45, -45, 0, -45, 0, 0, -45, -45, 0,
+        0, 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 50
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
+        -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21,
         // State 51
-        0, 76, -57, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9,
         // State 52
-        0, 0, 77, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 61, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 53
-        0, 0, -58, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17,
         // State 54
-        0, 0, -59, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 61, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 55
-        0, 0, -25, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18,
         // State 56
-        0, 0, -60, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26,
         // State 57
-        0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 46, 0, 0, 47, 48, 0,
+        -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
         // State 58
-        0, 0, -38, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22,
         // State 59
-        0, 0, -61, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
         // State 60
-        0, 0, -66, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17,
         // State 61
-        0, -24, -24, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
         // State 62
-        0, 0, 0, 81, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 63
-        0, 0, 0, 81, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 64
-        0, 0, 0, 83, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 65
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 66
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 67
-        -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, -22, -22, 0,
-        // State 68
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 61, 62, 0,
-        // State 69
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 70
-        0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 46, 0, 0, 47, 48, 0,
-        // State 71
-        0, 0, 0, 0, 0, 0, 0, 99, 100, 0, 101, 0, 0, 102, 103, 0,
-        // State 72
-        0, 0, 0, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 73
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0,
-        // State 74
-        0, 0, 105, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 75
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 76
-        0, 0, 0, 0, -36, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 77
-        0, 0, 0, 0, 0, 0, 0, -14, -14, 0, -14, 0, 0, -14, -14, 0,
-        // State 78
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0,
-        // State 79
-        0, 0, 0, 110, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 80
-        33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 36, 0,
-        // State 81
-        0, 0, 0, 110, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 82
-        -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, 0, -23, -23, 0,
-        // State 83
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 84
-        0, 0, 113, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 85
-        0, 115, 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 86
-        0, 0, 119, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 87
-        0, 0, 121, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 88
-        0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 89
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 90
-        0, 0, 124, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 91
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0,
-        // State 92
-        0, 125, 0, 0, 0, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0,
-        // State 93
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0,
-        // State 94
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0,
-        // State 95
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0,
-        // State 96
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0,
-        // State 97
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0,
-        // State 98
-        0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 46, 0, 0, 47, 48, 0,
-        // State 99
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -38, 0, 0, 0, 0, 0, 0,
-        // State 100
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0,
-        // State 101
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0,
-        // State 102
-        0, -24, 0, 0, 0, 0, 0, 0, 0, -24, 0, 0, 0, 0, 0, 0,
-        // State 103
-        0, 0, 0, -39, 0, 0, 0, 0, 0, -39, 0, 0, -39, 0, 0, 0,
-        // State 104
-        0, 0, 0, 0, -37, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 105
-        0, 0, 0, 0, 0, 0, 0, -15, -15, 0, -15, 0, 0, -15, -15, 0,
-        // State 106
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 107
-        0, 0, 128, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 108
-        0, 0, -39, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 109
-        33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 36, 0,
-        // State 110
-        0, 0, 0, -9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 111
-        0, 0, 130, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 112
-        0, 0, 0, -36, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 113
-        0, 0, 131, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 114
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 115
-        0, 0, 0, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 116
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 117
-        0, 0, 136, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 118
-        0, 0, 0, -26, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 119
-        0, 0, 137, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 120
-        0, 0, 0, -34, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 121
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 61, 62, 0,
-        // State 122
-        0, 0, 141, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 123
-        0, 0, 0, -36, 0, 0, 0, 0, 0, -36, 0, 0, -36, 0, 0, 0,
-        // State 124
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 125
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0,
-        // State 126
-        0, 0, 145, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 127
-        0, 0, -36, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 128
-        0, 0, 0, -10, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 129
-        0, 0, 0, -37, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 130
-        0, 0, 0, -33, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 131
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 132
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 133
-        0, 0, 148, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 134
-        0, 0, -4, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 135
-        0, 0, 0, -27, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 136
-        0, 0, 0, -35, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 137
-        0, 150, 151, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 138
-        0, 0, 153, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 139
-        0, 0, 155, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 140
-        0, 0, 0, -37, 0, 0, 0, 0, 0, -37, 0, 0, -37, 0, 0, 0,
-        // State 141
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 142
-        0, 0, 157, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 143
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -39, 0, 0, 0, 0, 0, 0,
-        // State 144
-        0, 0, -37, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 145
-        0, 0, -5, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 146
-        0, 0, 158, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 147
-        0, 0, 160, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 148
-        0, 0, 161, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 149
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 150
-        0, 0, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 151
-        0, 0, 164, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 152
-        0, 0, -26, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 153
-        0, 0, 165, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 154
-        0, 0, -34, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 155
-        0, 0, 166, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 156
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0, 0, 0, 0, 0, 0,
-        // State 157
-        0, 0, 168, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 158
-        0, 0, 169, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 159
-        0, 0, 0, -28, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 160
-        0, 0, -33, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 161
-        0, 0, 0, 0, 0, 0, 0, 58, 59, 0, 60, 0, 0, 61, 62, 0,
-        // State 162
-        0, 0, 171, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 163
-        0, 0, -27, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 164
-        0, 0, -35, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 165
-        0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, 0,
-        // State 166
-        0, 0, 172, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 167
-        0, 0, 0, -29, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 168
-        0, 0, 0, -30, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 169
-        0, 0, 173, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 170
-        0, 0, 175, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 171
-        0, 0, 0, -31, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 172
-        0, 0, 177, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 173
-        0, 0, 178, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 174
-        0, 0, -28, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 175
-        0, 0, 179, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 176
-        0, 0, -29, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 177
-        0, 0, -30, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 178
-        0, 0, -31, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
     ];
     const __EOF_ACTION: &'static [i32] = &[
-        0,
-        0,
-        0,
-        0,
-        0,
-        -63,
-        0,
-        0,
-        0,
-        -67,
-        0,
-        0,
-        0,
         0,
         0,
         0,
         0,
         -43,
+        -47,
+        -12,
         0,
         0,
-        0,
-        0,
-        0,
-        -64,
-        -65,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
+        -51,
         -44,
-        -45,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        -62,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
         0,
         0,
+        -23,
+        -45,
+        -50,
+        -19,
+        -28,
         0,
         0,
         0,
         0,
         0,
+        -48,
+        -49,
         0,
         0,
+        -35,
         0,
         0,
+        -34,
+        -33,
         0,
         0,
+        -41,
         0,
+        -20,
+        -29,
+        -30,
         0,
         0,
         0,
         0,
         0,
+        -46,
+        -17,
         0,
         0,
+        -24,
         0,
+        -21,
+        -9,
         0,
         0,
         0,
+        -18,
+        -26,
+        -27,
+        -22,
+        -10,
         0,
+        -4,
+        -5,
     ];
     const __GOTO: &'static [i32] = &[
         // State 0
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 4, 5, 0, 6, 7, 0, 0, 8, 9, 10, 11, 0,
+        0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 4, 5, 0, 6, 7, 0, 0, 8, 9, 10, 11, 0,
         // State 1
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 5, 0, 0, 18, 0, 0, 19, 20, 0, 11, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 5, 0, 0, 18, 0, 0, 19, 20, 0, 11, 0,
         // State 2
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 3
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 4
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 5
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 6
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 7
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 8
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 9
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 10
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 11
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 0, 28, 29, 0, 0, 0, 0, 30, 31, 0, 0, 0, 32, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 0, 28, 0, 0, 0, 0, 29, 30, 0, 0, 0, 31, 0,
         // State 12
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 40, 41, 0, 0, 0, 0, 0, 42, 0, 43, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, 5, 36, 0, 0, 0, 0, 0, 37, 0, 11, 0,
         // State 13
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 14
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 15
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 16
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 17
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 18
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 19
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 20
-        0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 52, 53, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
+        0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 33, 41, 35, 5, 0, 0, 0, 0, 0, 0, 37, 0, 11, 0,
         // State 21
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 0, 0, 0, 0, 0, 63, 0, 0, 0, 32, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 42, 0, 0, 0, 31, 0,
         // State 22
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 0, 0, 0, 0, 0, 64, 0, 0, 0, 32, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 43, 0, 0, 0, 31, 0,
         // State 23
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 24
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 25
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 0, 0, 0, 0, 0, 65, 0, 0, 0, 32, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 44, 0, 0, 0, 31, 0,
         // State 26
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 27
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 28
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 29
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 30
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 31
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 32
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 33
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 34
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 35
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 36
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 37
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 38
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 39
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 50, 35, 5, 0, 0, 0, 0, 0, 0, 37, 0, 11, 0,
         // State 40
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 41
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 42
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 43
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 40, 74, 0, 0, 0, 0, 0, 42, 0, 43, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 44
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 45
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 46
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, 5, 57, 0, 0, 0, 0, 0, 37, 0, 11, 0,
         // State 47
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 58, 35, 5, 0, 0, 0, 0, 0, 0, 37, 0, 11, 0,
         // State 48
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 49
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 50
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 75, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 51
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 52
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 53
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 62, 0, 0, 0, 31, 0,
         // State 54
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 55
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 56
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 57
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 40, 79, 0, 0, 0, 0, 0, 42, 0, 43, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 58
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 59
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 60
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 63, 0, 0, 0, 31, 0,
         // State 61
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         // State 62
-        0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 63
-        0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 64
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 65
-        0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 52, 85, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 66
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 67
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 68
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
-        // State 69
-        0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 52, 91, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 70
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 40, 92, 0, 0, 0, 0, 0, 42, 0, 43, 0,
-        // State 71
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 94, 0, 95, 96, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0,
-        // State 72
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 73
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 74
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 75
-        0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 52, 108, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 76
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 77
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 78
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 79
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 80
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 0, 0, 0, 0, 0, 111, 0, 0, 0, 32, 0,
-        // State 81
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 82
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 83
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 112, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 84
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 85
-        0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 86
-        0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 87
-        0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 88
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 89
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 123, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 90
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 91
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 92
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 93
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 94
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 95
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 96
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 97
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 98
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 40, 126, 0, 0, 0, 0, 0, 42, 0, 43, 0,
-        // State 99
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 100
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 101
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 102
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 103
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 104
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 105
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 106
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 127, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 107
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 108
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 109
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 0, 0, 0, 0, 0, 129, 0, 0, 0, 32, 0,
-        // State 110
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 111
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 112
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 113
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 114
-        0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 52, 134, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 115
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 116
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 135, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 117
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 118
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 119
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 120
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 121
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0,
-        // State 122
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 123
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 124
-        0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 52, 143, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 125
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 126
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 127
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 128
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 129
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 130
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 131
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 146, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 132
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 147, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 133
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 134
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 135
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 136
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 137
-        0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 138
-        0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 139
-        0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 140
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 141
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 156, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 142
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 143
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 144
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 145
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 146
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 147
-        0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 148
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 149
-        0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 52, 163, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 150
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 151
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 152
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 153
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 154
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 155
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 156
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 157
-        0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 158
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 159
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 160
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 161
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 170, 0, 54, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0,
-        // State 162
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 163
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 164
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 165
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 166
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 167
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 168
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 169
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 170
-        0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 171
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 172
-        0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 173
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 174
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 175
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 176
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 177
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        // State 178
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     ];
     fn __expected_tokens(__state: usize) -> Vec<::std::string::String> {
         const __TERMINAL: &'static [&'static str] = &[
@@ -970,12 +384,11 @@ mod __parse__TopLevel {
             r###""[]""###,
             r###""]""###,
             r###""_""###,
-            r###""call""###,
             r###""|""###,
             r###"r#"[A-Z][A-Za-z0-9_]*"#"###,
             r###"r#"[a-z][A-Za-z0-9_]*"#"###,
         ];
-        __ACTION[(__state * 16)..].iter().zip(__TERMINAL).filter_map(|(&state, terminal)| {
+        __ACTION[(__state * 14)..].iter().zip(__TERMINAL).filter_map(|(&state, terminal)| {
             if state == 0 {
                 None
             } else {
@@ -1003,21 +416,20 @@ mod __parse__TopLevel {
             };
             __last_location = __lookahead.2.clone();
             __integer = match __lookahead.1 {
-                (0, _) if true => 0,
-                (1, _) if true => 1,
-                (2, _) if true => 2,
-                (3, _) if true => 3,
-                (4, _) if true => 4,
-                (5, _) if true => 5,
-                (6, _) if true => 6,
-                (7, _) if true => 7,
-                (8, _) if true => 8,
-                (9, _) if true => 9,
-                (10, _) if true => 10,
-                (11, _) if true => 11,
-                (12, _) if true => 12,
-                (13, _) if true => 13,
-                (14, _) if true => 14,
+                (2, _) if true => 0,
+                (3, _) if true => 1,
+                (4, _) if true => 2,
+                (5, _) if true => 3,
+                (6, _) if true => 4,
+                (7, _) if true => 5,
+                (8, _) if true => 6,
+                (9, _) if true => 7,
+                (10, _) if true => 8,
+                (11, _) if true => 9,
+                (12, _) if true => 10,
+                (13, _) if true => 11,
+                (0, _) if true => 12,
+                (1, _) if true => 13,
                 _ => {
                     let __state = *__states.last().unwrap() as usize;
                     let __error = __lalrpop_util::ParseError::UnrecognizedToken {
@@ -1029,67 +441,63 @@ mod __parse__TopLevel {
             };
             '__inner: loop {
                 let __state = *__states.last().unwrap() as usize;
-                let __action = __ACTION[__state * 16 + __integer];
+                let __action = __ACTION[__state * 14 + __integer];
                 if __action > 0 {
                     let __symbol = match __integer {
                         0 => match __lookahead.1 {
-                            (0, __tok0) => __Symbol::Term_22_21_22(__tok0),
+                            (2, __tok0) => __Symbol::Term_22_21_22((__tok0)),
                             _ => unreachable!(),
                         },
                         1 => match __lookahead.1 {
-                            (1, __tok0) => __Symbol::Term_22_28_22(__tok0),
+                            (3, __tok0) => __Symbol::Term_22_28_22((__tok0)),
                             _ => unreachable!(),
                         },
                         2 => match __lookahead.1 {
-                            (2, __tok0) => __Symbol::Term_22_29_22(__tok0),
+                            (4, __tok0) => __Symbol::Term_22_29_22((__tok0)),
                             _ => unreachable!(),
                         },
                         3 => match __lookahead.1 {
-                            (3, __tok0) => __Symbol::Term_22_2c_22(__tok0),
+                            (5, __tok0) => __Symbol::Term_22_2c_22((__tok0)),
                             _ => unreachable!(),
                         },
                         4 => match __lookahead.1 {
-                            (4, __tok0) => __Symbol::Term_22_2e_22(__tok0),
+                            (6, __tok0) => __Symbol::Term_22_2e_22((__tok0)),
                             _ => unreachable!(),
                         },
                         5 => match __lookahead.1 {
-                            (5, __tok0) => __Symbol::Term_22_3a_2d_22(__tok0),
+                            (7, __tok0) => __Symbol::Term_22_3a_2d_22((__tok0)),
                             _ => unreachable!(),
                         },
                         6 => match __lookahead.1 {
-                            (6, __tok0) => __Symbol::Term_22_3f_2d_22(__tok0),
+                            (8, __tok0) => __Symbol::Term_22_3f_2d_22((__tok0)),
                             _ => unreachable!(),
                         },
                         7 => match __lookahead.1 {
-                            (7, __tok0) => __Symbol::Term_22_5b_22(__tok0),
+                            (9, __tok0) => __Symbol::Term_22_5b_22((__tok0)),
                             _ => unreachable!(),
                         },
                         8 => match __lookahead.1 {
-                            (8, __tok0) => __Symbol::Term_22_5b_5d_22(__tok0),
+                            (10, __tok0) => __Symbol::Term_22_5b_5d_22((__tok0)),
                             _ => unreachable!(),
                         },
                         9 => match __lookahead.1 {
-                            (9, __tok0) => __Symbol::Term_22_5d_22(__tok0),
+                            (11, __tok0) => __Symbol::Term_22_5d_22((__tok0)),
                             _ => unreachable!(),
                         },
                         10 => match __lookahead.1 {
-                            (10, __tok0) => __Symbol::Term_22___22(__tok0),
+                            (12, __tok0) => __Symbol::Term_22___22((__tok0)),
                             _ => unreachable!(),
                         },
                         11 => match __lookahead.1 {
-                            (11, __tok0) => __Symbol::Term_22call_22(__tok0),
+                            (13, __tok0) => __Symbol::Term_22_7c_22((__tok0)),
                             _ => unreachable!(),
                         },
                         12 => match __lookahead.1 {
-                            (12, __tok0) => __Symbol::Term_22_7c_22(__tok0),
+                            (0, __tok0) => __Symbol::Termr_23_22_5bA_2dZ_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23((__tok0)),
                             _ => unreachable!(),
                         },
                         13 => match __lookahead.1 {
-                            (13, __tok0) => __Symbol::Termr_23_22_5bA_2dZ_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(__tok0),
-                            _ => unreachable!(),
-                        },
-                        14 => match __lookahead.1 {
-                            (14, __tok0) => __Symbol::Termr_23_22_5ba_2dz_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(__tok0),
+                            (1, __tok0) => __Symbol::Termr_23_22_5ba_2dz_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23((__tok0)),
                             _ => unreachable!(),
                         },
                         _ => unreachable!(),
@@ -1141,272 +549,214 @@ mod __parse__TopLevel {
     {
         let __nonterminal = match -__action {
             1 => {
-                // ("," <BoxedTerm>) = ",", BoxedTerm => ActionFn(48);
-                let __sym1 = __pop_NtBoxedTerm(__symbols);
+                // ("," <QueryTerm>) = ",", QueryTerm => ActionFn(31);
+                let __sym1 = __pop_NtQueryTerm(__symbols);
                 let __sym0 = __pop_Term_22_2c_22(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action48::<>(input, __sym0, __sym1);
+                let __nt = super::__action31::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
-                __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cBoxedTerm_3e_29(__nt), __end));
+                __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cQueryTerm_3e_29(__nt), __end));
                 0
             }
             2 => {
-                // ("," <BoxedTerm>)* =  => ActionFn(46);
+                // ("," <QueryTerm>)* =  => ActionFn(29);
                 let __start = __symbols.last().map(|s| s.2.clone()).unwrap_or_default();
                 let __end = __lookahead_start.cloned().unwrap_or_else(|| __start.clone());
-                let __nt = super::__action46::<>(input, &__start, &__end);
+                let __nt = super::__action29::<>(input, &__start, &__end);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 0);
-                __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2a(__nt), __end));
+                __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2a(__nt), __end));
                 1
             }
             3 => {
-                // ("," <BoxedTerm>)* = ("," <BoxedTerm>)+ => ActionFn(47);
-                let __sym0 = __pop_Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym0.2.clone();
-                let __nt = super::__action47::<>(input, __sym0);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 1);
-                __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2a(__nt), __end));
-                1
-            }
-            4 => {
-                // ("," <BoxedTerm>)+ = ",", BoxedTerm => ActionFn(57);
-                let __sym1 = __pop_NtBoxedTerm(__symbols);
-                let __sym0 = __pop_Term_22_2c_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym1.2.clone();
-                let __nt = super::__action57::<>(input, __sym0, __sym1);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 2);
-                __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(__nt), __end));
-                2
-            }
-            5 => {
-                // ("," <BoxedTerm>)+ = ("," <BoxedTerm>)+, ",", BoxedTerm => ActionFn(58);
-                let __sym2 = __pop_NtBoxedTerm(__symbols);
-                let __sym1 = __pop_Term_22_2c_22(__symbols);
-                let __sym0 = __pop_Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym2.2.clone();
-                let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 3);
-                __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(__nt), __end));
-                2
-            }
-            6 => {
-                // ("," <QueryTerm>) = ",", QueryTerm => ActionFn(36);
-                let __sym1 = __pop_NtQueryTerm(__symbols);
-                let __sym0 = __pop_Term_22_2c_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym1.2.clone();
-                let __nt = super::__action36::<>(input, __sym0, __sym1);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 2);
-                __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cQueryTerm_3e_29(__nt), __end));
-                3
-            }
-            7 => {
-                // ("," <QueryTerm>)* =  => ActionFn(34);
-                let __start = __symbols.last().map(|s| s.2.clone()).unwrap_or_default();
-                let __end = __lookahead_start.cloned().unwrap_or_else(|| __start.clone());
-                let __nt = super::__action34::<>(input, &__start, &__end);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 0);
-                __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2a(__nt), __end));
-                4
-            }
-            8 => {
-                // ("," <QueryTerm>)* = ("," <QueryTerm>)+ => ActionFn(35);
+                // ("," <QueryTerm>)* = ("," <QueryTerm>)+ => ActionFn(30);
                 let __sym0 = __pop_Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2b(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action35::<>(input, __sym0);
+                let __nt = super::__action30::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2a(__nt), __end));
-                4
+                1
             }
-            9 => {
-                // ("," <QueryTerm>)+ = ",", QueryTerm => ActionFn(67);
+            4 => {
+                // ("," <QueryTerm>)+ = ",", QueryTerm => ActionFn(47);
                 let __sym1 = __pop_NtQueryTerm(__symbols);
                 let __sym0 = __pop_Term_22_2c_22(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action67::<>(input, __sym0, __sym1);
+                let __nt = super::__action47::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2b(__nt), __end));
-                5
+                2
             }
-            10 => {
-                // ("," <QueryTerm>)+ = ("," <QueryTerm>)+, ",", QueryTerm => ActionFn(68);
+            5 => {
+                // ("," <QueryTerm>)+ = ("," <QueryTerm>)+, ",", QueryTerm => ActionFn(48);
                 let __sym2 = __pop_NtQueryTerm(__symbols);
                 let __sym1 = __pop_Term_22_2c_22(__symbols);
                 let __sym0 = __pop_Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2b(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym2.2.clone();
-                let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2);
+                let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 3);
                 __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2b(__nt), __end));
-                5
+                2
             }
-            11 => {
-                // (<BoxedTerm> ",") = BoxedTerm, "," => ActionFn(45);
+            6 => {
+                // (<BoxedTerm> ",") = BoxedTerm, "," => ActionFn(40);
                 let __sym1 = __pop_Term_22_2c_22(__symbols);
                 let __sym0 = __pop_NtBoxedTerm(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action45::<>(input, __sym0, __sym1);
+                let __nt = super::__action40::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29(__nt), __end));
-                6
+                3
             }
-            12 => {
-                // (<BoxedTerm> ",")* =  => ActionFn(43);
+            7 => {
+                // (<BoxedTerm> ",")* =  => ActionFn(38);
                 let __start = __symbols.last().map(|s| s.2.clone()).unwrap_or_default();
                 let __end = __lookahead_start.cloned().unwrap_or_else(|| __start.clone());
-                let __nt = super::__action43::<>(input, &__start, &__end);
+                let __nt = super::__action38::<>(input, &__start, &__end);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 0);
                 __symbols.push((__start, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2a(__nt), __end));
-                7
+                4
             }
-            13 => {
-                // (<BoxedTerm> ",")* = (<BoxedTerm> ",")+ => ActionFn(44);
+            8 => {
+                // (<BoxedTerm> ",")* = (<BoxedTerm> ",")+ => ActionFn(39);
                 let __sym0 = __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action44::<>(input, __sym0);
+                let __nt = super::__action39::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2a(__nt), __end));
-                7
+                4
             }
-            14 => {
-                // (<BoxedTerm> ",")+ = BoxedTerm, "," => ActionFn(73);
+            9 => {
+                // (<BoxedTerm> ",")+ = BoxedTerm, "," => ActionFn(53);
                 let __sym1 = __pop_Term_22_2c_22(__symbols);
                 let __sym0 = __pop_NtBoxedTerm(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action73::<>(input, __sym0, __sym1);
+                let __nt = super::__action53::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__nt), __end));
-                8
+                5
             }
-            15 => {
-                // (<BoxedTerm> ",")+ = (<BoxedTerm> ",")+, BoxedTerm, "," => ActionFn(74);
+            10 => {
+                // (<BoxedTerm> ",")+ = (<BoxedTerm> ",")+, BoxedTerm, "," => ActionFn(54);
                 let __sym2 = __pop_Term_22_2c_22(__symbols);
                 let __sym1 = __pop_NtBoxedTerm(__symbols);
                 let __sym0 = __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym2.2.clone();
-                let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2);
+                let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 3);
                 __symbols.push((__start, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__nt), __end));
-                8
+                5
             }
-            16 => {
-                // (<PredicateClause>) = PredicateClause => ActionFn(42);
+            11 => {
+                // (<PredicateClause>) = PredicateClause => ActionFn(37);
                 let __sym0 = __pop_NtPredicateClause(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action42::<>(input, __sym0);
+                let __nt = super::__action37::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::Nt_28_3cPredicateClause_3e_29(__nt), __end));
-                9
+                6
             }
-            17 => {
-                // (<PredicateClause>)+ = PredicateClause => ActionFn(81);
+            12 => {
+                // (<PredicateClause>)+ = PredicateClause => ActionFn(57);
                 let __sym0 = __pop_NtPredicateClause(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action81::<>(input, __sym0);
+                let __nt = super::__action57::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::Nt_28_3cPredicateClause_3e_29_2b(__nt), __end));
-                10
+                7
             }
-            18 => {
-                // (<PredicateClause>)+ = (<PredicateClause>)+, PredicateClause => ActionFn(82);
+            13 => {
+                // (<PredicateClause>)+ = (<PredicateClause>)+, PredicateClause => ActionFn(58);
                 let __sym1 = __pop_NtPredicateClause(__symbols);
                 let __sym0 = __pop_Nt_28_3cPredicateClause_3e_29_2b(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action82::<>(input, __sym0, __sym1);
+                let __nt = super::__action58::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::Nt_28_3cPredicateClause_3e_29_2b(__nt), __end));
-                10
+                7
             }
-            19 => {
-                // (<QueryTerm> ",") = QueryTerm, "," => ActionFn(39);
+            14 => {
+                // (<QueryTerm> ",") = QueryTerm, "," => ActionFn(34);
                 let __sym1 = __pop_Term_22_2c_22(__symbols);
                 let __sym0 = __pop_NtQueryTerm(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action39::<>(input, __sym0, __sym1);
+                let __nt = super::__action34::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::Nt_28_3cQueryTerm_3e_20_22_2c_22_29(__nt), __end));
-                11
+                8
             }
-            20 => {
-                // (<QueryTerm> ",")* =  => ActionFn(37);
+            15 => {
+                // (<QueryTerm> ",")* =  => ActionFn(32);
                 let __start = __symbols.last().map(|s| s.2.clone()).unwrap_or_default();
                 let __end = __lookahead_start.cloned().unwrap_or_else(|| __start.clone());
-                let __nt = super::__action37::<>(input, &__start, &__end);
+                let __nt = super::__action32::<>(input, &__start, &__end);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 0);
                 __symbols.push((__start, __Symbol::Nt_28_3cQueryTerm_3e_20_22_2c_22_29_2a(__nt), __end));
-                12
+                9
             }
-            21 => {
-                // (<QueryTerm> ",")* = (<QueryTerm> ",")+ => ActionFn(38);
+            16 => {
+                // (<QueryTerm> ",")* = (<QueryTerm> ",")+ => ActionFn(33);
                 let __sym0 = __pop_Nt_28_3cQueryTerm_3e_20_22_2c_22_29_2b(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action38::<>(input, __sym0);
+                let __nt = super::__action33::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::Nt_28_3cQueryTerm_3e_20_22_2c_22_29_2a(__nt), __end));
-                12
+                9
             }
-            22 => {
-                // (<QueryTerm> ",")+ = QueryTerm, "," => ActionFn(83);
+            17 => {
+                // (<QueryTerm> ",")+ = QueryTerm, "," => ActionFn(59);
                 let __sym1 = __pop_Term_22_2c_22(__symbols);
                 let __sym0 = __pop_NtQueryTerm(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action83::<>(input, __sym0, __sym1);
+                let __nt = super::__action59::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::Nt_28_3cQueryTerm_3e_20_22_2c_22_29_2b(__nt), __end));
-                13
+                10
             }
-            23 => {
-                // (<QueryTerm> ",")+ = (<QueryTerm> ",")+, QueryTerm, "," => ActionFn(84);
+            18 => {
+                // (<QueryTerm> ",")+ = (<QueryTerm> ",")+, QueryTerm, "," => ActionFn(60);
                 let __sym2 = __pop_Term_22_2c_22(__symbols);
                 let __sym1 = __pop_NtQueryTerm(__symbols);
                 let __sym0 = __pop_Nt_28_3cQueryTerm_3e_20_22_2c_22_29_2b(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym2.2.clone();
-                let __nt = super::__action84::<>(input, __sym0, __sym1, __sym2);
+                let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 3);
                 __symbols.push((__start, __Symbol::Nt_28_3cQueryTerm_3e_20_22_2c_22_29_2b(__nt), __end));
-                13
+                10
             }
-            24 => {
+            19 => {
                 // Atom = r#"[a-z][A-Za-z0-9_]*"# => ActionFn(5);
                 let __sym0 = __pop_Termr_23_22_5ba_2dz_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(__symbols);
                 let __start = __sym0.0.clone();
@@ -1415,9 +765,9 @@ mod __parse__TopLevel {
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtAtom(__nt), __end));
-                14
+                11
             }
-            25 => {
+            20 => {
                 // BoxedTerm = Term => ActionFn(6);
                 let __sym0 = __pop_NtTerm(__symbols);
                 let __start = __sym0.0.clone();
@@ -1426,183 +776,24 @@ mod __parse__TopLevel {
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtBoxedTerm(__nt), __end));
-                15
-            }
-            26 => {
-                // Call = "call", "(", Call, ")" => ActionFn(59);
-                let __sym3 = __pop_Term_22_29_22(__symbols);
-                let __sym2 = __pop_NtCall(__symbols);
-                let __sym1 = __pop_Term_22_28_22(__symbols);
-                let __sym0 = __pop_Term_22call_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym3.2.clone();
-                let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2, __sym3);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 4);
-                __symbols.push((__start, __Symbol::NtCall(__nt), __end));
-                16
-            }
-            27 => {
-                // Call = "call", "(", Call, ("," <BoxedTerm>)+, ")" => ActionFn(60);
-                let __sym4 = __pop_Term_22_29_22(__symbols);
-                let __sym3 = __pop_Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(__symbols);
-                let __sym2 = __pop_NtCall(__symbols);
-                let __sym1 = __pop_Term_22_28_22(__symbols);
-                let __sym0 = __pop_Term_22call_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym4.2.clone();
-                let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 5);
-                __symbols.push((__start, __Symbol::NtCall(__nt), __end));
-                16
-            }
-            28 => {
-                // Call = "call", "(", Atom, "(", BoxedTerm, ")", ")" => ActionFn(75);
-                let __sym6 = __pop_Term_22_29_22(__symbols);
-                let __sym5 = __pop_Term_22_29_22(__symbols);
-                let __sym4 = __pop_NtBoxedTerm(__symbols);
-                let __sym3 = __pop_Term_22_28_22(__symbols);
-                let __sym2 = __pop_NtAtom(__symbols);
-                let __sym1 = __pop_Term_22_28_22(__symbols);
-                let __sym0 = __pop_Term_22call_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym6.2.clone();
-                let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 7);
-                __symbols.push((__start, __Symbol::NtCall(__nt), __end));
-                16
-            }
-            29 => {
-                // Call = "call", "(", Atom, "(", (<BoxedTerm> ",")+, BoxedTerm, ")", ")" => ActionFn(76);
-                let __sym7 = __pop_Term_22_29_22(__symbols);
-                let __sym6 = __pop_Term_22_29_22(__symbols);
-                let __sym5 = __pop_NtBoxedTerm(__symbols);
-                let __sym4 = __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__symbols);
-                let __sym3 = __pop_Term_22_28_22(__symbols);
-                let __sym2 = __pop_NtAtom(__symbols);
-                let __sym1 = __pop_Term_22_28_22(__symbols);
-                let __sym0 = __pop_Term_22call_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym7.2.clone();
-                let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 8);
-                __symbols.push((__start, __Symbol::NtCall(__nt), __end));
-                16
-            }
-            30 => {
-                // Call = "call", "(", Atom, "(", BoxedTerm, ")", ("," <BoxedTerm>)+, ")" => ActionFn(77);
-                let __sym7 = __pop_Term_22_29_22(__symbols);
-                let __sym6 = __pop_Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(__symbols);
-                let __sym5 = __pop_Term_22_29_22(__symbols);
-                let __sym4 = __pop_NtBoxedTerm(__symbols);
-                let __sym3 = __pop_Term_22_28_22(__symbols);
-                let __sym2 = __pop_NtAtom(__symbols);
-                let __sym1 = __pop_Term_22_28_22(__symbols);
-                let __sym0 = __pop_Term_22call_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym7.2.clone();
-                let __nt = super::__action77::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 8);
-                __symbols.push((__start, __Symbol::NtCall(__nt), __end));
-                16
-            }
-            31 => {
-                // Call = "call", "(", Atom, "(", (<BoxedTerm> ",")+, BoxedTerm, ")", ("," <BoxedTerm>)+, ")" => ActionFn(78);
-                let __sym8 = __pop_Term_22_29_22(__symbols);
-                let __sym7 = __pop_Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(__symbols);
-                let __sym6 = __pop_Term_22_29_22(__symbols);
-                let __sym5 = __pop_NtBoxedTerm(__symbols);
-                let __sym4 = __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__symbols);
-                let __sym3 = __pop_Term_22_28_22(__symbols);
-                let __sym2 = __pop_NtAtom(__symbols);
-                let __sym1 = __pop_Term_22_28_22(__symbols);
-                let __sym0 = __pop_Term_22call_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym8.2.clone();
-                let __nt = super::__action78::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 9);
-                __symbols.push((__start, __Symbol::NtCall(__nt), __end));
-                16
-            }
-            32 => {
-                // Call = "call", "(", Atom, ")" => ActionFn(63);
-                let __sym3 = __pop_Term_22_29_22(__symbols);
-                let __sym2 = __pop_NtAtom(__symbols);
-                let __sym1 = __pop_Term_22_28_22(__symbols);
-                let __sym0 = __pop_Term_22call_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym3.2.clone();
-                let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2, __sym3);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 4);
-                __symbols.push((__start, __Symbol::NtCall(__nt), __end));
-                16
-            }
-            33 => {
-                // Call = "call", "(", Atom, ("," <BoxedTerm>)+, ")" => ActionFn(64);
-                let __sym4 = __pop_Term_22_29_22(__symbols);
-                let __sym3 = __pop_Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(__symbols);
-                let __sym2 = __pop_NtAtom(__symbols);
-                let __sym1 = __pop_Term_22_28_22(__symbols);
-                let __sym0 = __pop_Term_22call_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym4.2.clone();
-                let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 5);
-                __symbols.push((__start, __Symbol::NtCall(__nt), __end));
-                16
-            }
-            34 => {
-                // Call = "call", "(", Var, ")" => ActionFn(65);
-                let __sym3 = __pop_Term_22_29_22(__symbols);
-                let __sym2 = __pop_NtVar(__symbols);
-                let __sym1 = __pop_Term_22_28_22(__symbols);
-                let __sym0 = __pop_Term_22call_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym3.2.clone();
-                let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2, __sym3);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 4);
-                __symbols.push((__start, __Symbol::NtCall(__nt), __end));
-                16
-            }
-            35 => {
-                // Call = "call", "(", Var, ("," <BoxedTerm>)+, ")" => ActionFn(66);
-                let __sym4 = __pop_Term_22_29_22(__symbols);
-                let __sym3 = __pop_Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(__symbols);
-                let __sym2 = __pop_NtVar(__symbols);
-                let __sym1 = __pop_Term_22_28_22(__symbols);
-                let __sym0 = __pop_Term_22call_22(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym4.2.clone();
-                let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 5);
-                __symbols.push((__start, __Symbol::NtCall(__nt), __end));
-                16
+                12
             }
-            36 => {
-                // Clause = Atom, "(", BoxedTerm, ")" => ActionFn(79);
+            21 => {
+                // Clause = Atom, "(", BoxedTerm, ")" => ActionFn(55);
                 let __sym3 = __pop_Term_22_29_22(__symbols);
                 let __sym2 = __pop_NtBoxedTerm(__symbols);
                 let __sym1 = __pop_Term_22_28_22(__symbols);
                 let __sym0 = __pop_NtAtom(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym3.2.clone();
-                let __nt = super::__action79::<>(input, __sym0, __sym1, __sym2, __sym3);
+                let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2, __sym3);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 4);
                 __symbols.push((__start, __Symbol::NtClause(__nt), __end));
-                17
+                13
             }
-            37 => {
-                // Clause = Atom, "(", (<BoxedTerm> ",")+, BoxedTerm, ")" => ActionFn(80);
+            22 => {
+                // Clause = Atom, "(", (<BoxedTerm> ",")+, BoxedTerm, ")" => ActionFn(56);
                 let __sym4 = __pop_Term_22_29_22(__symbols);
                 let __sym3 = __pop_NtBoxedTerm(__symbols);
                 let __sym2 = __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__symbols);
@@ -1610,297 +801,286 @@ mod __parse__TopLevel {
                 let __sym0 = __pop_NtAtom(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym4.2.clone();
-                let __nt = super::__action80::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4);
+                let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 5);
                 __symbols.push((__start, __Symbol::NtClause(__nt), __end));
-                17
+                13
             }
-            38 => {
-                // List = "[]" => ActionFn(12);
+            23 => {
+                // List = "[]" => ActionFn(8);
                 let __sym0 = __pop_Term_22_5b_5d_22(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action12::<>(input, __sym0);
+                let __nt = super::__action8::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtList(__nt), __end));
-                18
+                14
             }
-            39 => {
-                // List = "[", ListInternals, "]" => ActionFn(13);
+            24 => {
+                // List = "[", ListInternals, "]" => ActionFn(9);
                 let __sym2 = __pop_Term_22_5d_22(__symbols);
                 let __sym1 = __pop_NtListInternals(__symbols);
                 let __sym0 = __pop_Term_22_5b_22(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym2.2.clone();
-                let __nt = super::__action13::<>(input, __sym0, __sym1, __sym2);
+                let __nt = super::__action9::<>(input, __sym0, __sym1, __sym2);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 3);
                 __symbols.push((__start, __Symbol::NtList(__nt), __end));
-                18
+                14
             }
-            40 => {
-                // ListInternals = BoxedTerm => ActionFn(14);
+            25 => {
+                // ListInternals = BoxedTerm => ActionFn(10);
                 let __sym0 = __pop_NtBoxedTerm(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action14::<>(input, __sym0);
+                let __nt = super::__action10::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtListInternals(__nt), __end));
-                19
+                15
             }
-            41 => {
-                // ListInternals = BoxedTerm, ",", ListInternals => ActionFn(15);
+            26 => {
+                // ListInternals = BoxedTerm, ",", ListInternals => ActionFn(11);
                 let __sym2 = __pop_NtListInternals(__symbols);
                 let __sym1 = __pop_Term_22_2c_22(__symbols);
                 let __sym0 = __pop_NtBoxedTerm(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym2.2.clone();
-                let __nt = super::__action15::<>(input, __sym0, __sym1, __sym2);
+                let __nt = super::__action11::<>(input, __sym0, __sym1, __sym2);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 3);
                 __symbols.push((__start, __Symbol::NtListInternals(__nt), __end));
-                19
+                15
             }
-            42 => {
-                // ListInternals = BoxedTerm, "|", BoxedTerm => ActionFn(16);
+            27 => {
+                // ListInternals = BoxedTerm, "|", BoxedTerm => ActionFn(12);
                 let __sym2 = __pop_NtBoxedTerm(__symbols);
                 let __sym1 = __pop_Term_22_7c_22(__symbols);
                 let __sym0 = __pop_NtBoxedTerm(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym2.2.clone();
-                let __nt = super::__action16::<>(input, __sym0, __sym1, __sym2);
+                let __nt = super::__action12::<>(input, __sym0, __sym1, __sym2);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 3);
                 __symbols.push((__start, __Symbol::NtListInternals(__nt), __end));
-                19
+                15
             }
-            43 => {
-                // Predicate = (<PredicateClause>)+, PredicateClause => ActionFn(17);
+            28 => {
+                // Predicate = (<PredicateClause>)+, PredicateClause => ActionFn(13);
                 let __sym1 = __pop_NtPredicateClause(__symbols);
                 let __sym0 = __pop_Nt_28_3cPredicateClause_3e_29_2b(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action17::<>(input, __sym0, __sym1);
+                let __nt = super::__action13::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::NtPredicate(__nt), __end));
-                20
+                16
             }
-            44 => {
-                // PredicateClause = Rule, "." => ActionFn(18);
+            29 => {
+                // PredicateClause = Rule, "." => ActionFn(14);
                 let __sym1 = __pop_Term_22_2e_22(__symbols);
                 let __sym0 = __pop_NtRule(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action18::<>(input, __sym0, __sym1);
+                let __nt = super::__action14::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::NtPredicateClause(__nt), __end));
-                21
+                17
             }
-            45 => {
-                // PredicateClause = Term, "." => ActionFn(19);
+            30 => {
+                // PredicateClause = Term, "." => ActionFn(15);
                 let __sym1 = __pop_Term_22_2e_22(__symbols);
                 let __sym0 = __pop_NtTerm(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action19::<>(input, __sym0, __sym1);
+                let __nt = super::__action15::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::NtPredicateClause(__nt), __end));
-                21
+                17
             }
-            46 => {
-                // Query = QueryTerm => ActionFn(85);
+            31 => {
+                // Query = QueryTerm => ActionFn(61);
                 let __sym0 = __pop_NtQueryTerm(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action85::<>(input, __sym0);
+                let __nt = super::__action61::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtQuery(__nt), __end));
-                22
+                18
             }
-            47 => {
-                // Query = (<QueryTerm> ",")+, QueryTerm => ActionFn(86);
+            32 => {
+                // Query = (<QueryTerm> ",")+, QueryTerm => ActionFn(62);
                 let __sym1 = __pop_NtQueryTerm(__symbols);
                 let __sym0 = __pop_Nt_28_3cQueryTerm_3e_20_22_2c_22_29_2b(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym1.2.clone();
-                let __nt = super::__action86::<>(input, __sym0, __sym1);
+                let __nt = super::__action62::<>(input, __sym0, __sym1);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::NtQuery(__nt), __end));
-                22
-            }
-            48 => {
-                // QueryTerm = Call => ActionFn(23);
-                let __sym0 = __pop_NtCall(__symbols);
-                let __start = __sym0.0.clone();
-                let __end = __sym0.2.clone();
-                let __nt = super::__action23::<>(input, __sym0);
-                let __states_len = __states.len();
-                __states.truncate(__states_len - 1);
-                __symbols.push((__start, __Symbol::NtQueryTerm(__nt), __end));
-                23
+                18
             }
-            49 => {
-                // QueryTerm = "!" => ActionFn(24);
+            33 => {
+                // QueryTerm = "!" => ActionFn(19);
                 let __sym0 = __pop_Term_22_21_22(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action24::<>(input, __sym0);
+                let __nt = super::__action19::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtQueryTerm(__nt), __end));
-                23
+                19
             }
-            50 => {
-                // QueryTerm = Var => ActionFn(25);
+            34 => {
+                // QueryTerm = Var => ActionFn(20);
                 let __sym0 = __pop_NtVar(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action25::<>(input, __sym0);
+                let __nt = super::__action20::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtQueryTerm(__nt), __end));
-                23
+                19
             }
-            51 => {
-                // QueryTerm = Clause => ActionFn(26);
+            35 => {
+                // QueryTerm = Clause => ActionFn(21);
                 let __sym0 = __pop_NtClause(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action26::<>(input, __sym0);
+                let __nt = super::__action21::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtQueryTerm(__nt), __end));
-                23
+                19
             }
-            52 => {
-                // QueryTerm = Atom => ActionFn(27);
+            36 => {
+                // QueryTerm = Atom => ActionFn(22);
                 let __sym0 = __pop_NtAtom(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action27::<>(input, __sym0);
+                let __nt = super::__action22::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtQueryTerm(__nt), __end));
-                23
+                19
             }
-            53 => {
-                // Rule = Clause, ":-", QueryTerm => ActionFn(69);
+            37 => {
+                // Rule = Clause, ":-", QueryTerm => ActionFn(49);
                 let __sym2 = __pop_NtQueryTerm(__symbols);
                 let __sym1 = __pop_Term_22_3a_2d_22(__symbols);
                 let __sym0 = __pop_NtClause(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym2.2.clone();
-                let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2);
+                let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 3);
                 __symbols.push((__start, __Symbol::NtRule(__nt), __end));
-                24
+                20
             }
-            54 => {
-                // Rule = Clause, ":-", QueryTerm, ("," <QueryTerm>)+ => ActionFn(70);
+            38 => {
+                // Rule = Clause, ":-", QueryTerm, ("," <QueryTerm>)+ => ActionFn(50);
                 let __sym3 = __pop_Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2b(__symbols);
                 let __sym2 = __pop_NtQueryTerm(__symbols);
                 let __sym1 = __pop_Term_22_3a_2d_22(__symbols);
                 let __sym0 = __pop_NtClause(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym3.2.clone();
-                let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2, __sym3);
+                let __nt = super::__action50::<>(input, __sym0, __sym1, __sym2, __sym3);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 4);
                 __symbols.push((__start, __Symbol::NtRule(__nt), __end));
-                24
+                20
             }
-            55 => {
-                // Rule = Atom, ":-", QueryTerm => ActionFn(71);
+            39 => {
+                // Rule = Atom, ":-", QueryTerm => ActionFn(51);
                 let __sym2 = __pop_NtQueryTerm(__symbols);
                 let __sym1 = __pop_Term_22_3a_2d_22(__symbols);
                 let __sym0 = __pop_NtAtom(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym2.2.clone();
-                let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2);
+                let __nt = super::__action51::<>(input, __sym0, __sym1, __sym2);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 3);
                 __symbols.push((__start, __Symbol::NtRule(__nt), __end));
-                24
+                20
             }
-            56 => {
-                // Rule = Atom, ":-", QueryTerm, ("," <QueryTerm>)+ => ActionFn(72);
+            40 => {
+                // Rule = Atom, ":-", QueryTerm, ("," <QueryTerm>)+ => ActionFn(52);
                 let __sym3 = __pop_Nt_28_22_2c_22_20_3cQueryTerm_3e_29_2b(__symbols);
                 let __sym2 = __pop_NtQueryTerm(__symbols);
                 let __sym1 = __pop_Term_22_3a_2d_22(__symbols);
                 let __sym0 = __pop_NtAtom(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym3.2.clone();
-                let __nt = super::__action72::<>(input, __sym0, __sym1, __sym2, __sym3);
+                let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2, __sym3);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 4);
                 __symbols.push((__start, __Symbol::NtRule(__nt), __end));
-                24
+                20
             }
-            57 => {
-                // Term = Atom => ActionFn(28);
-                let __sym0 = __pop_NtAtom(__symbols);
+            41 => {
+                // Term = Clause => ActionFn(23);
+                let __sym0 = __pop_NtClause(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action28::<>(input, __sym0);
+                let __nt = super::__action23::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtTerm(__nt), __end));
-                25
+                21
             }
-            58 => {
-                // Term = Clause => ActionFn(29);
-                let __sym0 = __pop_NtClause(__symbols);
+            42 => {
+                // Term = Atom => ActionFn(24);
+                let __sym0 = __pop_NtAtom(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action29::<>(input, __sym0);
+                let __nt = super::__action24::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtTerm(__nt), __end));
-                25
+                21
             }
-            59 => {
-                // Term = List => ActionFn(30);
+            43 => {
+                // Term = List => ActionFn(25);
                 let __sym0 = __pop_NtList(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action30::<>(input, __sym0);
+                let __nt = super::__action25::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtTerm(__nt), __end));
-                25
+                21
             }
-            60 => {
-                // Term = Var => ActionFn(31);
+            44 => {
+                // Term = Var => ActionFn(26);
                 let __sym0 = __pop_NtVar(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action31::<>(input, __sym0);
+                let __nt = super::__action26::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtTerm(__nt), __end));
-                25
+                21
             }
-            61 => {
-                // Term = "_" => ActionFn(32);
+            45 => {
+                // Term = "_" => ActionFn(27);
                 let __sym0 = __pop_Term_22___22(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action32::<>(input, __sym0);
+                let __nt = super::__action27::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtTerm(__nt), __end));
-                25
+                21
             }
-            62 => {
+            46 => {
                 // TopLevel = "?-", Query, "." => ActionFn(1);
                 let __sym2 = __pop_Term_22_2e_22(__symbols);
                 let __sym1 = __pop_NtQuery(__symbols);
@@ -1911,9 +1091,9 @@ mod __parse__TopLevel {
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 3);
                 __symbols.push((__start, __Symbol::NtTopLevel(__nt), __end));
-                26
+                22
             }
-            63 => {
+            47 => {
                 // TopLevel = Predicate => ActionFn(2);
                 let __sym0 = __pop_NtPredicate(__symbols);
                 let __start = __sym0.0.clone();
@@ -1922,9 +1102,9 @@ mod __parse__TopLevel {
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtTopLevel(__nt), __end));
-                26
+                22
             }
-            64 => {
+            48 => {
                 // TopLevel = Rule, "." => ActionFn(3);
                 let __sym1 = __pop_Term_22_2e_22(__symbols);
                 let __sym0 = __pop_NtRule(__symbols);
@@ -1934,9 +1114,9 @@ mod __parse__TopLevel {
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::NtTopLevel(__nt), __end));
-                26
+                22
             }
-            65 => {
+            49 => {
                 // TopLevel = Term, "." => ActionFn(4);
                 let __sym1 = __pop_Term_22_2e_22(__symbols);
                 let __sym0 = __pop_NtTerm(__symbols);
@@ -1946,20 +1126,20 @@ mod __parse__TopLevel {
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 2);
                 __symbols.push((__start, __Symbol::NtTopLevel(__nt), __end));
-                26
+                22
             }
-            66 => {
-                // Var = r#"[A-Z][A-Za-z0-9_]*"# => ActionFn(33);
+            50 => {
+                // Var = r#"[A-Z][A-Za-z0-9_]*"# => ActionFn(28);
                 let __sym0 = __pop_Termr_23_22_5bA_2dZ_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(__symbols);
                 let __start = __sym0.0.clone();
                 let __end = __sym0.2.clone();
-                let __nt = super::__action33::<>(input, __sym0);
+                let __nt = super::__action28::<>(input, __sym0);
                 let __states_len = __states.len();
                 __states.truncate(__states_len - 1);
                 __symbols.push((__start, __Symbol::NtVar(__nt), __end));
-                27
+                23
             }
-            67 => {
+            51 => {
                 // __TopLevel = TopLevel => ActionFn(0);
                 let __sym0 = __pop_NtTopLevel(__symbols);
                 let __start = __sym0.0.clone();
@@ -1970,7 +1150,7 @@ mod __parse__TopLevel {
             _ => panic!("invalid action code {}", __action)
         };
         let __state = *__states.last().unwrap() as usize;
-        let __next_state = __GOTO[__state * 29 + __nonterminal] - 1;
+        let __next_state = __GOTO[__state * 25 + __nonterminal] - 1;
         __states.push(__next_state);
         None
     }
@@ -2084,16 +1264,6 @@ mod __parse__TopLevel {
             _ => panic!("symbol type mismatch")
         }
     }
-    fn __pop_Term_22call_22<
-      'input,
-    >(
-        __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)>
-    ) -> (usize, &'input str, usize) {
-        match __symbols.pop().unwrap() {
-            (__l, __Symbol::Term_22call_22(__v), __r) => (__l, __v, __r),
-            _ => panic!("symbol type mismatch")
-        }
-    }
     fn __pop_Term_22_7c_22<
       'input,
     >(
@@ -2124,46 +1294,6 @@ mod __parse__TopLevel {
             _ => panic!("symbol type mismatch")
         }
     }
-    fn __pop_Termerror<
-      'input,
-    >(
-        __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)>
-    ) -> (usize, __lalrpop_util::ErrorRecovery<usize, (usize, &'input str), ()>, usize) {
-        match __symbols.pop().unwrap() {
-            (__l, __Symbol::Termerror(__v), __r) => (__l, __v, __r),
-            _ => panic!("symbol type mismatch")
-        }
-    }
-    fn __pop_Nt_28_22_2c_22_20_3cBoxedTerm_3e_29<
-      'input,
-    >(
-        __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)>
-    ) -> (usize, Box<Term>, usize) {
-        match __symbols.pop().unwrap() {
-            (__l, __Symbol::Nt_28_22_2c_22_20_3cBoxedTerm_3e_29(__v), __r) => (__l, __v, __r),
-            _ => panic!("symbol type mismatch")
-        }
-    }
-    fn __pop_Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2a<
-      'input,
-    >(
-        __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)>
-    ) -> (usize, ::std::vec::Vec<Box<Term>>, usize) {
-        match __symbols.pop().unwrap() {
-            (__l, __Symbol::Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2a(__v), __r) => (__l, __v, __r),
-            _ => panic!("symbol type mismatch")
-        }
-    }
-    fn __pop_Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b<
-      'input,
-    >(
-        __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)>
-    ) -> (usize, ::std::vec::Vec<Box<Term>>, usize) {
-        match __symbols.pop().unwrap() {
-            (__l, __Symbol::Nt_28_22_2c_22_20_3cBoxedTerm_3e_29_2b(__v), __r) => (__l, __v, __r),
-            _ => panic!("symbol type mismatch")
-        }
-    }
     fn __pop_Nt_28_22_2c_22_20_3cQueryTerm_3e_29<
       'input,
     >(
@@ -2294,16 +1424,6 @@ mod __parse__TopLevel {
             _ => panic!("symbol type mismatch")
         }
     }
-    fn __pop_NtCall<
-      'input,
-    >(
-        __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)>
-    ) -> (usize, QueryTerm, usize) {
-        match __symbols.pop().unwrap() {
-            (__l, __Symbol::NtCall(__v), __r) => (__l, __v, __r),
-            _ => panic!("symbol type mismatch")
-        }
-    }
     fn __pop_NtClause<
       'input,
     >(
@@ -2427,491 +1547,59 @@ mod __parse__TopLevel {
 }
 pub use self::__parse__TopLevel::parse_TopLevel;
 mod __intern_token {
+    #![allow(unused_imports)]
+    use prolog::ast::*;
+    use std::cell::Cell;
     extern crate lalrpop_util as __lalrpop_util;
+    extern crate regex as __regex;
     pub struct __Matcher<'input> {
         text: &'input str,
         consumed: usize,
-    }
-
-    fn __tokenize(text: &str) -> Option<(usize, usize)> {
-        let mut __chars = text.char_indices();
-        let mut __current_match: Option<(usize, usize)> = None;
-        let mut __current_state: usize = 0;
-        loop {
-            match __current_state {
-                0 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        33 => /* '!' */ {
-                            __current_match = Some((0, __index + 1));
-                            __current_state = 1;
-                            continue;
-                        }
-                        40 => /* '(' */ {
-                            __current_match = Some((1, __index + 1));
-                            __current_state = 2;
-                            continue;
-                        }
-                        41 => /* ')' */ {
-                            __current_match = Some((2, __index + 1));
-                            __current_state = 3;
-                            continue;
-                        }
-                        44 => /* ',' */ {
-                            __current_match = Some((3, __index + 1));
-                            __current_state = 4;
-                            continue;
-                        }
-                        46 => /* '.' */ {
-                            __current_match = Some((4, __index + 1));
-                            __current_state = 5;
-                            continue;
-                        }
-                        58 => /* ':' */ {
-                            __current_state = 6;
-                            continue;
-                        }
-                        63 => /* '?' */ {
-                            __current_state = 7;
-                            continue;
-                        }
-                        65 ... 90 => {
-                            __current_match = Some((13, __index + __ch.len_utf8()));
-                            __current_state = 8;
-                            continue;
-                        }
-                        91 => /* '[' */ {
-                            __current_match = Some((7, __index + 1));
-                            __current_state = 9;
-                            continue;
-                        }
-                        93 => /* ']' */ {
-                            __current_match = Some((9, __index + 1));
-                            __current_state = 10;
-                            continue;
-                        }
-                        95 => /* '_' */ {
-                            __current_match = Some((10, __index + 1));
-                            __current_state = 11;
-                            continue;
-                        }
-                        97 ... 98 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 12;
-                            continue;
-                        }
-                        99 => /* 'c' */ {
-                            __current_match = Some((14, __index + 1));
-                            __current_state = 13;
-                            continue;
-                        }
-                        100 ... 122 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 12;
-                            continue;
-                        }
-                        124 => /* '|' */ {
-                            __current_match = Some((12, __index + 1));
-                            __current_state = 14;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                1 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                2 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                3 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                4 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                5 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                6 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        45 => /* '-' */ {
-                            __current_match = Some((5, __index + 1));
-                            __current_state = 16;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                7 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        45 => /* '-' */ {
-                            __current_match = Some((6, __index + 1));
-                            __current_state = 17;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                8 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        48 ... 57 => {
-                            __current_match = Some((13, __index + __ch.len_utf8()));
-                            __current_state = 18;
-                            continue;
-                        }
-                        65 ... 90 => {
-                            __current_match = Some((13, __index + __ch.len_utf8()));
-                            __current_state = 18;
-                            continue;
-                        }
-                        95 => /* '_' */ {
-                            __current_match = Some((13, __index + 1));
-                            __current_state = 18;
-                            continue;
-                        }
-                        97 ... 122 => {
-                            __current_match = Some((13, __index + __ch.len_utf8()));
-                            __current_state = 18;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                9 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        93 => /* ']' */ {
-                            __current_match = Some((8, __index + 1));
-                            __current_state = 19;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                10 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                11 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                12 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        48 ... 57 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        65 ... 90 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        95 => /* '_' */ {
-                            __current_match = Some((14, __index + 1));
-                            __current_state = 20;
-                            continue;
-                        }
-                        97 ... 122 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                13 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        48 ... 57 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        65 ... 90 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        95 => /* '_' */ {
-                            __current_match = Some((14, __index + 1));
-                            __current_state = 20;
-                            continue;
-                        }
-                        97 => /* 'a' */ {
-                            __current_match = Some((14, __index + 1));
-                            __current_state = 21;
-                            continue;
-                        }
-                        98 ... 122 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                14 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                15 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                16 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                17 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                18 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        48 ... 57 => {
-                            __current_match = Some((13, __index + __ch.len_utf8()));
-                            __current_state = 18;
-                            continue;
-                        }
-                        65 ... 90 => {
-                            __current_match = Some((13, __index + __ch.len_utf8()));
-                            __current_state = 18;
-                            continue;
-                        }
-                        95 => /* '_' */ {
-                            __current_match = Some((13, __index + 1));
-                            __current_state = 18;
-                            continue;
-                        }
-                        97 ... 122 => {
-                            __current_match = Some((13, __index + __ch.len_utf8()));
-                            __current_state = 18;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                19 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                20 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        48 ... 57 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        65 ... 90 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        95 => /* '_' */ {
-                            __current_match = Some((14, __index + 1));
-                            __current_state = 20;
-                            continue;
-                        }
-                        97 ... 122 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                21 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        48 ... 57 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        65 ... 90 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        95 => /* '_' */ {
-                            __current_match = Some((14, __index + 1));
-                            __current_state = 20;
-                            continue;
-                        }
-                        97 ... 107 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        108 => /* 'l' */ {
-                            __current_match = Some((14, __index + 1));
-                            __current_state = 22;
-                            continue;
-                        }
-                        109 ... 122 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                22 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        48 ... 57 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        65 ... 90 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        95 => /* '_' */ {
-                            __current_match = Some((14, __index + 1));
-                            __current_state = 20;
-                            continue;
-                        }
-                        97 ... 107 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        108 => /* 'l' */ {
-                            __current_match = Some((11, __index + 1));
-                            __current_state = 23;
-                            continue;
-                        }
-                        109 ... 122 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                23 => {
-                    let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match };
-                    match __ch as u32 {
-                        48 ... 57 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        65 ... 90 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        95 => /* '_' */ {
-                            __current_match = Some((14, __index + 1));
-                            __current_state = 20;
-                            continue;
-                        }
-                        97 ... 122 => {
-                            __current_match = Some((14, __index + __ch.len_utf8()));
-                            __current_state = 20;
-                            continue;
-                        }
-                        _ => {
-                            return __current_match;
-                        }
-                    }
-                }
-                _ => { panic!("invalid state {}", __current_state); }
-            }
-        }
+        regex_set: __regex::RegexSet,
+        regex_vec: Vec<__regex::Regex>,
     }
 
     impl<'input> __Matcher<'input> {
         pub fn new(s: &'input str) -> __Matcher<'input> {
-            __Matcher { text: s, consumed: 0 }
+            let __strs: &[&str] = &[
+                "^(?u:[A-Z])(?u:[0-9A-Z_-_a-z])*",
+                "^(?u:[a-z])(?u:[0-9A-Z_-_a-z])*",
+                "^(?u:!)",
+                "^(?u:\\()",
+                "^(?u:\\))",
+                "^(?u:,)",
+                "^(?u:\\.)",
+                "^(?u::\\-)",
+                "^(?u:\\?\\-)",
+                "^(?u:\\[)",
+                "^(?u:\\[\\])",
+                "^(?u:\\])",
+                "^(?u:_)",
+                "^(?u:\\|)",
+            ];
+            let __regex_set = __regex::RegexSet::new(__strs).unwrap();
+            let __regex_vec = vec![
+                __regex::Regex::new("^(?u:[A-Z])(?u:[0-9A-Z_-_a-z])*").unwrap(),
+                __regex::Regex::new("^(?u:[a-z])(?u:[0-9A-Z_-_a-z])*").unwrap(),
+                __regex::Regex::new("^(?u:!)").unwrap(),
+                __regex::Regex::new("^(?u:\\()").unwrap(),
+                __regex::Regex::new("^(?u:\\))").unwrap(),
+                __regex::Regex::new("^(?u:,)").unwrap(),
+                __regex::Regex::new("^(?u:\\.)").unwrap(),
+                __regex::Regex::new("^(?u::\\-)").unwrap(),
+                __regex::Regex::new("^(?u:\\?\\-)").unwrap(),
+                __regex::Regex::new("^(?u:\\[)").unwrap(),
+                __regex::Regex::new("^(?u:\\[\\])").unwrap(),
+                __regex::Regex::new("^(?u:\\])").unwrap(),
+                __regex::Regex::new("^(?u:_)").unwrap(),
+                __regex::Regex::new("^(?u:\\|)").unwrap(),
+            ];
+            __Matcher {
+                text: s,
+                consumed: 0,
+                regex_set: __regex_set,
+                regex_vec: __regex_vec,
+            }
         }
     }
 
@@ -2927,18 +1615,30 @@ mod __intern_token {
                 self.consumed = __start_offset;
                 None
             } else {
-                match __tokenize(__text) {
-                    Some((__index, __length)) => {
-                        let __result = &__text[..__length];
-                        let __remaining = &__text[__length..];
-                        let __end_offset = __start_offset + __length;
-                        self.text = __remaining;
-                        self.consumed = __end_offset;
-                        Some(Ok((__start_offset, (__index, __result), __end_offset)))
-                    }
-                    None => {
-                        Some(Err(__lalrpop_util::ParseError::InvalidToken { location: __start_offset }))
+                let __matches = self.regex_set.matches(__text);
+                if !__matches.matched_any() {
+                    Some(Err(__lalrpop_util::ParseError::InvalidToken {
+                        location: __start_offset,
+                    }))
+                } else {
+                    let mut __longest_match = 0;
+                    let mut __index = 0;
+                    for __i in 0 .. 14 {
+                        if __matches.matched(__i) {
+                            let __match = self.regex_vec[__i].find(__text).unwrap();
+                            let __len = __match.end();
+                            if __len >= __longest_match {
+                                __longest_match = __len;
+                                __index = __i;
+                            }
+                        }
                     }
+                    let __result = &__text[..__longest_match];
+                    let __remaining = &__text[__longest_match..];
+                    let __end_offset = __start_offset + __longest_match;
+                    self.text = __remaining;
+                    self.consumed = __end_offset;
+                    Some(Ok((__start_offset, (__index, __result), __end_offset)))
                 }
             }
         }
@@ -2946,7 +1646,7 @@ mod __intern_token {
 }
 
 #[allow(unused_variables)]
-pub fn __action0<
+fn __action0<
     'input,
 >(
     input: &'input str,
@@ -2957,7 +1657,7 @@ pub fn __action0<
 }
 
 #[allow(unused_variables)]
-pub fn __action1<
+fn __action1<
     'input,
 >(
     input: &'input str,
@@ -2970,7 +1670,7 @@ pub fn __action1<
 }
 
 #[allow(unused_variables)]
-pub fn __action2<
+fn __action2<
     'input,
 >(
     input: &'input str,
@@ -2981,149 +1681,53 @@ pub fn __action2<
 }
 
 #[allow(unused_variables)]
-pub fn __action3<
+fn __action3<
     'input,
 >(
     input: &'input str,
     (_, __0, _): (usize, Rule, usize),
     (_, _, _): (usize, &'input str, usize),
-) -> TopLevel
-{
-    TopLevel::Rule(__0)
-}
-
-#[allow(unused_variables)]
-pub fn __action4<
-    'input,
->(
-    input: &'input str,
-    (_, __0, _): (usize, Term, usize),
-    (_, _, _): (usize, &'input str, usize),
-) -> TopLevel
-{
-    TopLevel::Fact(__0)
-}
-
-#[allow(unused_variables)]
-pub fn __action5<
-    'input,
->(
-    input: &'input str,
-    (_, __0, _): (usize, &'input str, usize),
-) -> Atom
-{
-    __0.trim().to_string()
-}
-
-#[allow(unused_variables)]
-pub fn __action6<
-    'input,
->(
-    input: &'input str,
-    (_, t, _): (usize, Term, usize),
-) -> Box<Term>
-{
-    Box::new(t)
-}
-
-#[allow(unused_variables)]
-pub fn __action7<
-    'input,
->(
-    input: &'input str,
-    (_, _, _): (usize, &'input str, usize),
-    (_, _, _): (usize, &'input str, usize),
-    (_, c, _): (usize, QueryTerm, usize),
-    (_, ts, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
-    (_, _, _): (usize, &'input str, usize),
-) -> QueryTerm
+) -> TopLevel
 {
-    {
-        match c {
-            QueryTerm::CallN(mut terms) => {
-                let vt = terms.pop().unwrap();
-                let mut ts = ts;
-                
-                terms.append(&mut ts);
-                terms.push(vt);
-                
-                QueryTerm::CallN(terms)
-            },
-            QueryTerm::Term(Term::Clause(cell, atom, mut terms)) => {
-                let mut ts = ts;                
-                terms.append(&mut ts);
-                QueryTerm::Term(Term::Clause(cell, atom, terms))
-            },
-            _ => c
-        }
-    }
+    TopLevel::Rule(__0)
 }
 
 #[allow(unused_variables)]
-pub fn __action8<
+fn __action4<
     'input,
 >(
     input: &'input str,
+    (_, __0, _): (usize, Term, usize),
     (_, _, _): (usize, &'input str, usize),
-    (_, _, _): (usize, &'input str, usize),
-    (_, a, _): (usize, Atom, usize),
-    (_, _, _): (usize, &'input str, usize),
-    (_, ts, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
-    (_, t, _): (usize, Box<Term>, usize),
-    (_, _, _): (usize, &'input str, usize),
-    (_, tss, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
-    (_, _, _): (usize, &'input str, usize),
-) -> QueryTerm
+) -> TopLevel
 {
-    {
-        let mut ts  = ts;
-        let mut tss = tss;
-
-       ts.push(t);
-
-        ts.append(&mut tss);
-        QueryTerm::Term(Term::Clause(Cell::default(), a, ts))
-    }
+    TopLevel::Fact(__0)
 }
 
 #[allow(unused_variables)]
-pub fn __action9<
+fn __action5<
     'input,
 >(
     input: &'input str,
-    (_, _, _): (usize, &'input str, usize),
-    (_, _, _): (usize, &'input str, usize),
-    (_, a, _): (usize, Atom, usize),
-    (_, ts, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
-    (_, _, _): (usize, &'input str, usize),
-) -> QueryTerm
+    (_, __0, _): (usize, &'input str, usize),
+) -> Atom
 {
-    QueryTerm::Term(Term::Clause(Cell::default(), a, ts))
+    __0.trim().to_string()
 }
 
 #[allow(unused_variables)]
-pub fn __action10<
+fn __action6<
     'input,
 >(
     input: &'input str,
-    (_, _, _): (usize, &'input str, usize),
-    (_, _, _): (usize, &'input str, usize),
-    (_, v, _): (usize, Var, usize),
-    (_, ts, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
-    (_, _, _): (usize, &'input str, usize),
-) -> QueryTerm
+    (_, t, _): (usize, Term, usize),
+) -> Box<Term>
 {
-    {
-        let mut ts = ts;
-       let bv = Box::new(Term::Var(Cell::default(), v));
-        
-        ts.push(bv);
-        QueryTerm::CallN(ts)
-     }
+    Box::new(t)
 }
 
 #[allow(unused_variables)]
-pub fn __action11<
+fn __action7<
     'input,
 >(
     input: &'input str,
@@ -3142,7 +1746,7 @@ pub fn __action11<
 }
 
 #[allow(unused_variables)]
-pub fn __action12<
+fn __action8<
     'input,
 >(
     input: &'input str,
@@ -3153,7 +1757,7 @@ pub fn __action12<
 }
 
 #[allow(unused_variables)]
-pub fn __action13<
+fn __action9<
     'input,
 >(
     input: &'input str,
@@ -3166,7 +1770,7 @@ pub fn __action13<
 }
 
 #[allow(unused_variables)]
-pub fn __action14<
+fn __action10<
     'input,
 >(
     input: &'input str,
@@ -3180,7 +1784,7 @@ pub fn __action14<
 }
 
 #[allow(unused_variables)]
-pub fn __action15<
+fn __action11<
     'input,
 >(
     input: &'input str,
@@ -3195,7 +1799,7 @@ pub fn __action15<
 }
 
 #[allow(unused_variables)]
-pub fn __action16<
+fn __action12<
     'input,
 >(
     input: &'input str,
@@ -3208,7 +1812,7 @@ pub fn __action16<
 }
 
 #[allow(unused_variables)]
-pub fn __action17<
+fn __action13<
     'input,
 >(
     input: &'input str,
@@ -3224,7 +1828,7 @@ pub fn __action17<
 }
 
 #[allow(unused_variables)]
-pub fn __action18<
+fn __action14<
     'input,
 >(
     input: &'input str,
@@ -3236,7 +1840,7 @@ pub fn __action18<
 }
 
 #[allow(unused_variables)]
-pub fn __action19<
+fn __action15<
     'input,
 >(
     input: &'input str,
@@ -3248,7 +1852,7 @@ pub fn __action19<
 }
 
 #[allow(unused_variables)]
-pub fn __action20<
+fn __action16<
     'input,
 >(
     input: &'input str,
@@ -3264,7 +1868,7 @@ pub fn __action20<
 }
 
 #[allow(unused_variables)]
-pub fn __action21<
+fn __action17<
     'input,
 >(
     input: &'input str,
@@ -3278,7 +1882,7 @@ pub fn __action21<
 }
 
 #[allow(unused_variables)]
-pub fn __action22<
+fn __action18<
     'input,
 >(
     input: &'input str,
@@ -3288,24 +1892,12 @@ pub fn __action22<
     (_, cs, _): (usize, ::std::vec::Vec<QueryTerm>, usize),
 ) -> Rule
 {
-    Rule { head: (Term::Constant(Cell::default(), Constant::Atom(a)),
-                     h),
+    Rule { head: (Term::Constant(Cell::default(), Constant::Atom(a)), h),
                clauses: cs }
 }
 
 #[allow(unused_variables)]
-pub fn __action23<
-    'input,
->(
-    input: &'input str,
-    (_, __0, _): (usize, QueryTerm, usize),
-) -> QueryTerm
-{
-    __0
-}
-
-#[allow(unused_variables)]
-pub fn __action24<
+fn __action19<
     'input,
 >(
     input: &'input str,
@@ -3316,7 +1908,7 @@ pub fn __action24<
 }
 
 #[allow(unused_variables)]
-pub fn __action25<
+fn __action20<
     'input,
 >(
     input: &'input str,
@@ -3327,7 +1919,7 @@ pub fn __action25<
 }
 
 #[allow(unused_variables)]
-pub fn __action26<
+fn __action21<
     'input,
 >(
     input: &'input str,
@@ -3338,7 +1930,7 @@ pub fn __action26<
 }
 
 #[allow(unused_variables)]
-pub fn __action27<
+fn __action22<
     'input,
 >(
     input: &'input str,
@@ -3349,29 +1941,29 @@ pub fn __action27<
 }
 
 #[allow(unused_variables)]
-pub fn __action28<
+fn __action23<
     'input,
 >(
     input: &'input str,
-    (_, __0, _): (usize, Atom, usize),
+    (_, __0, _): (usize, Term, usize),
 ) -> Term
 {
-    Term::Constant(Cell::default(), Constant::Atom(__0))
+    __0
 }
 
 #[allow(unused_variables)]
-pub fn __action29<
+fn __action24<
     'input,
 >(
     input: &'input str,
-    (_, __0, _): (usize, Term, usize),
+    (_, __0, _): (usize, Atom, usize),
 ) -> Term
 {
-    __0
+    Term::Constant(Cell::default(), Constant::Atom(__0))
 }
 
 #[allow(unused_variables)]
-pub fn __action30<
+fn __action25<
     'input,
 >(
     input: &'input str,
@@ -3382,7 +1974,7 @@ pub fn __action30<
 }
 
 #[allow(unused_variables)]
-pub fn __action31<
+fn __action26<
     'input,
 >(
     input: &'input str,
@@ -3393,7 +1985,7 @@ pub fn __action31<
 }
 
 #[allow(unused_variables)]
-pub fn __action32<
+fn __action27<
     'input,
 >(
     input: &'input str,
@@ -3404,7 +1996,7 @@ pub fn __action32<
 }
 
 #[allow(unused_variables)]
-pub fn __action33<
+fn __action28<
     'input,
 >(
     input: &'input str,
@@ -3415,7 +2007,7 @@ pub fn __action33<
 }
 
 #[allow(unused_variables)]
-pub fn __action34<
+fn __action29<
     'input,
 >(
     input: &'input str,
@@ -3427,7 +2019,7 @@ pub fn __action34<
 }
 
 #[allow(unused_variables)]
-pub fn __action35<
+fn __action30<
     'input,
 >(
     input: &'input str,
@@ -3438,7 +2030,7 @@ pub fn __action35<
 }
 
 #[allow(unused_variables)]
-pub fn __action36<
+fn __action31<
     'input,
 >(
     input: &'input str,
@@ -3450,7 +2042,7 @@ pub fn __action36<
 }
 
 #[allow(unused_variables)]
-pub fn __action37<
+fn __action32<
     'input,
 >(
     input: &'input str,
@@ -3462,7 +2054,7 @@ pub fn __action37<
 }
 
 #[allow(unused_variables)]
-pub fn __action38<
+fn __action33<
     'input,
 >(
     input: &'input str,
@@ -3473,7 +2065,7 @@ pub fn __action38<
 }
 
 #[allow(unused_variables)]
-pub fn __action39<
+fn __action34<
     'input,
 >(
     input: &'input str,
@@ -3485,7 +2077,7 @@ pub fn __action39<
 }
 
 #[allow(unused_variables)]
-pub fn __action40<
+fn __action35<
     'input,
 >(
     input: &'input str,
@@ -3496,7 +2088,7 @@ pub fn __action40<
 }
 
 #[allow(unused_variables)]
-pub fn __action41<
+fn __action36<
     'input,
 >(
     input: &'input str,
@@ -3508,7 +2100,7 @@ pub fn __action41<
 }
 
 #[allow(unused_variables)]
-pub fn __action42<
+fn __action37<
     'input,
 >(
     input: &'input str,
@@ -3519,42 +2111,7 @@ pub fn __action42<
 }
 
 #[allow(unused_variables)]
-pub fn __action43<
-    'input,
->(
-    input: &'input str,
-    __lookbehind: &usize,
-    __lookahead: &usize,
-) -> ::std::vec::Vec<Box<Term>>
-{
-    vec![]
-}
-
-#[allow(unused_variables)]
-pub fn __action44<
-    'input,
->(
-    input: &'input str,
-    (_, v, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
-) -> ::std::vec::Vec<Box<Term>>
-{
-    v
-}
-
-#[allow(unused_variables)]
-pub fn __action45<
-    'input,
->(
-    input: &'input str,
-    (_, __0, _): (usize, Box<Term>, usize),
-    (_, _, _): (usize, &'input str, usize),
-) -> Box<Term>
-{
-    (__0)
-}
-
-#[allow(unused_variables)]
-pub fn __action46<
+fn __action38<
     'input,
 >(
     input: &'input str,
@@ -3566,418 +2123,99 @@ pub fn __action46<
 }
 
 #[allow(unused_variables)]
-pub fn __action47<
-    'input,
->(
-    input: &'input str,
-    (_, v, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
-) -> ::std::vec::Vec<Box<Term>>
-{
-    v
-}
-
-#[allow(unused_variables)]
-pub fn __action48<
-    'input,
->(
-    input: &'input str,
-    (_, _, _): (usize, &'input str, usize),
-    (_, __0, _): (usize, Box<Term>, usize),
-) -> Box<Term>
-{
-    (__0)
-}
-
-#[allow(unused_variables)]
-pub fn __action49<
-    'input,
->(
-    input: &'input str,
-    (_, __0, _): (usize, Box<Term>, usize),
-) -> ::std::vec::Vec<Box<Term>>
-{
-    vec![__0]
-}
-
-#[allow(unused_variables)]
-pub fn __action50<
-    'input,
->(
-    input: &'input str,
-    (_, v, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
-    (_, e, _): (usize, Box<Term>, usize),
-) -> ::std::vec::Vec<Box<Term>>
-{
-    { let mut v = v; v.push(e); v }
-}
-
-#[allow(unused_variables)]
-pub fn __action51<
-    'input,
->(
-    input: &'input str,
-    (_, __0, _): (usize, Box<Term>, usize),
-) -> ::std::vec::Vec<Box<Term>>
-{
-    vec![__0]
-}
-
-#[allow(unused_variables)]
-pub fn __action52<
-    'input,
->(
-    input: &'input str,
-    (_, v, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
-    (_, e, _): (usize, Box<Term>, usize),
-) -> ::std::vec::Vec<Box<Term>>
-{
-    { let mut v = v; v.push(e); v }
-}
-
-#[allow(unused_variables)]
-pub fn __action53<
-    'input,
->(
-    input: &'input str,
-    (_, __0, _): (usize, QueryTerm, usize),
-) -> ::std::vec::Vec<QueryTerm>
-{
-    vec![__0]
-}
-
-#[allow(unused_variables)]
-pub fn __action54<
-    'input,
->(
-    input: &'input str,
-    (_, v, _): (usize, ::std::vec::Vec<QueryTerm>, usize),
-    (_, e, _): (usize, QueryTerm, usize),
-) -> ::std::vec::Vec<QueryTerm>
-{
-    { let mut v = v; v.push(e); v }
-}
-
-#[allow(unused_variables)]
-pub fn __action55<
-    'input,
->(
-    input: &'input str,
-    (_, __0, _): (usize, QueryTerm, usize),
-) -> ::std::vec::Vec<QueryTerm>
-{
-    vec![__0]
-}
-
-#[allow(unused_variables)]
-pub fn __action56<
-    'input,
->(
-    input: &'input str,
-    (_, v, _): (usize, ::std::vec::Vec<QueryTerm>, usize),
-    (_, e, _): (usize, QueryTerm, usize),
-) -> ::std::vec::Vec<QueryTerm>
-{
-    { let mut v = v; v.push(e); v }
-}
-
-#[allow(unused_variables)]
-pub fn __action57<
-    'input,
->(
-    input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, Box<Term>, usize),
-) -> ::std::vec::Vec<Box<Term>>
-{
-    let __start0 = __0.0.clone();
-    let __end0 = __1.2.clone();
-    let __temp0 = __action48(
-        input,
-        __0,
-        __1,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action49(
-        input,
-        __temp0,
-    )
-}
-
-#[allow(unused_variables)]
-pub fn __action58<
-    'input,
->(
-    input: &'input str,
-    __0: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Box<Term>, usize),
-) -> ::std::vec::Vec<Box<Term>>
-{
-    let __start0 = __1.0.clone();
-    let __end0 = __2.2.clone();
-    let __temp0 = __action48(
-        input,
-        __1,
-        __2,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action50(
-        input,
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(unused_variables)]
-pub fn __action59<
+fn __action39<
     'input,
 >(
     input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, QueryTerm, usize),
-    __3: (usize, &'input str, usize),
-) -> QueryTerm
-{
-    let __start0 = __2.2.clone();
-    let __end0 = __3.0.clone();
-    let __temp0 = __action46(
-        input,
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action7(
-        input,
-        __0,
-        __1,
-        __2,
-        __temp0,
-        __3,
-    )
+    (_, v, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
+) -> ::std::vec::Vec<Box<Term>>
+{
+    v
 }
 
 #[allow(unused_variables)]
-pub fn __action60<
+fn __action40<
     'input,
 >(
     input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, QueryTerm, usize),
-    __3: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __4: (usize, &'input str, usize),
-) -> QueryTerm
+    (_, __0, _): (usize, Box<Term>, usize),
+    (_, _, _): (usize, &'input str, usize),
+) -> Box<Term>
 {
-    let __start0 = __3.0.clone();
-    let __end0 = __3.2.clone();
-    let __temp0 = __action47(
-        input,
-        __3,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action7(
-        input,
-        __0,
-        __1,
-        __2,
-        __temp0,
-        __4,
-    )
+    (__0)
 }
 
 #[allow(unused_variables)]
-pub fn __action61<
+fn __action41<
     'input,
 >(
     input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Atom, usize),
-    __3: (usize, &'input str, usize),
-    __4: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __5: (usize, Box<Term>, usize),
-    __6: (usize, &'input str, usize),
-    __7: (usize, &'input str, usize),
-) -> QueryTerm
+    (_, __0, _): (usize, Box<Term>, usize),
+) -> ::std::vec::Vec<Box<Term>>
 {
-    let __start0 = __6.2.clone();
-    let __end0 = __7.0.clone();
-    let __temp0 = __action46(
-        input,
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action8(
-        input,
-        __0,
-        __1,
-        __2,
-        __3,
-        __4,
-        __5,
-        __6,
-        __temp0,
-        __7,
-    )
+    vec![__0]
 }
 
 #[allow(unused_variables)]
-pub fn __action62<
+fn __action42<
     'input,
 >(
     input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Atom, usize),
-    __3: (usize, &'input str, usize),
-    __4: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __5: (usize, Box<Term>, usize),
-    __6: (usize, &'input str, usize),
-    __7: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __8: (usize, &'input str, usize),
-) -> QueryTerm
+    (_, v, _): (usize, ::std::vec::Vec<Box<Term>>, usize),
+    (_, e, _): (usize, Box<Term>, usize),
+) -> ::std::vec::Vec<Box<Term>>
 {
-    let __start0 = __7.0.clone();
-    let __end0 = __7.2.clone();
-    let __temp0 = __action47(
-        input,
-        __7,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action8(
-        input,
-        __0,
-        __1,
-        __2,
-        __3,
-        __4,
-        __5,
-        __6,
-        __temp0,
-        __8,
-    )
+    { let mut v = v; v.push(e); v }
 }
 
 #[allow(unused_variables)]
-pub fn __action63<
+fn __action43<
     'input,
 >(
     input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Atom, usize),
-    __3: (usize, &'input str, usize),
-) -> QueryTerm
+    (_, __0, _): (usize, QueryTerm, usize),
+) -> ::std::vec::Vec<QueryTerm>
 {
-    let __start0 = __2.2.clone();
-    let __end0 = __3.0.clone();
-    let __temp0 = __action46(
-        input,
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action9(
-        input,
-        __0,
-        __1,
-        __2,
-        __temp0,
-        __3,
-    )
+    vec![__0]
 }
 
 #[allow(unused_variables)]
-pub fn __action64<
+fn __action44<
     'input,
 >(
     input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Atom, usize),
-    __3: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __4: (usize, &'input str, usize),
-) -> QueryTerm
+    (_, v, _): (usize, ::std::vec::Vec<QueryTerm>, usize),
+    (_, e, _): (usize, QueryTerm, usize),
+) -> ::std::vec::Vec<QueryTerm>
 {
-    let __start0 = __3.0.clone();
-    let __end0 = __3.2.clone();
-    let __temp0 = __action47(
-        input,
-        __3,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action9(
-        input,
-        __0,
-        __1,
-        __2,
-        __temp0,
-        __4,
-    )
+    { let mut v = v; v.push(e); v }
 }
 
 #[allow(unused_variables)]
-pub fn __action65<
+fn __action45<
     'input,
 >(
     input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Var, usize),
-    __3: (usize, &'input str, usize),
-) -> QueryTerm
+    (_, __0, _): (usize, QueryTerm, usize),
+) -> ::std::vec::Vec<QueryTerm>
 {
-    let __start0 = __2.2.clone();
-    let __end0 = __3.0.clone();
-    let __temp0 = __action46(
-        input,
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action10(
-        input,
-        __0,
-        __1,
-        __2,
-        __temp0,
-        __3,
-    )
+    vec![__0]
 }
 
 #[allow(unused_variables)]
-pub fn __action66<
+fn __action46<
     'input,
 >(
     input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Var, usize),
-    __3: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __4: (usize, &'input str, usize),
-) -> QueryTerm
+    (_, v, _): (usize, ::std::vec::Vec<QueryTerm>, usize),
+    (_, e, _): (usize, QueryTerm, usize),
+) -> ::std::vec::Vec<QueryTerm>
 {
-    let __start0 = __3.0.clone();
-    let __end0 = __3.2.clone();
-    let __temp0 = __action47(
-        input,
-        __3,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action10(
-        input,
-        __0,
-        __1,
-        __2,
-        __temp0,
-        __4,
-    )
+    { let mut v = v; v.push(e); v }
 }
 
 #[allow(unused_variables)]
-pub fn __action67<
+fn __action47<
     'input,
 >(
     input: &'input str,
@@ -3987,20 +2225,20 @@ pub fn __action67<
 {
     let __start0 = __0.0.clone();
     let __end0 = __1.2.clone();
-    let __temp0 = __action36(
+    let __temp0 = __action31(
         input,
         __0,
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action55(
+    __action45(
         input,
         __temp0,
     )
 }
 
 #[allow(unused_variables)]
-pub fn __action68<
+fn __action48<
     'input,
 >(
     input: &'input str,
@@ -4011,13 +2249,13 @@ pub fn __action68<
 {
     let __start0 = __1.0.clone();
     let __end0 = __2.2.clone();
-    let __temp0 = __action36(
+    let __temp0 = __action31(
         input,
         __1,
         __2,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action56(
+    __action46(
         input,
         __0,
         __temp0,
@@ -4025,7 +2263,7 @@ pub fn __action68<
 }
 
 #[allow(unused_variables)]
-pub fn __action69<
+fn __action49<
     'input,
 >(
     input: &'input str,
@@ -4036,13 +2274,13 @@ pub fn __action69<
 {
     let __start0 = __2.2.clone();
     let __end0 = __2.2.clone();
-    let __temp0 = __action34(
+    let __temp0 = __action29(
         input,
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action21(
+    __action17(
         input,
         __0,
         __1,
@@ -4052,7 +2290,7 @@ pub fn __action69<
 }
 
 #[allow(unused_variables)]
-pub fn __action70<
+fn __action50<
     'input,
 >(
     input: &'input str,
@@ -4064,12 +2302,12 @@ pub fn __action70<
 {
     let __start0 = __3.0.clone();
     let __end0 = __3.2.clone();
-    let __temp0 = __action35(
+    let __temp0 = __action30(
         input,
         __3,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action21(
+    __action17(
         input,
         __0,
         __1,
@@ -4079,7 +2317,7 @@ pub fn __action70<
 }
 
 #[allow(unused_variables)]
-pub fn __action71<
+fn __action51<
     'input,
 >(
     input: &'input str,
@@ -4090,13 +2328,13 @@ pub fn __action71<
 {
     let __start0 = __2.2.clone();
     let __end0 = __2.2.clone();
-    let __temp0 = __action34(
+    let __temp0 = __action29(
         input,
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action22(
+    __action18(
         input,
         __0,
         __1,
@@ -4106,7 +2344,7 @@ pub fn __action71<
 }
 
 #[allow(unused_variables)]
-pub fn __action72<
+fn __action52<
     'input,
 >(
     input: &'input str,
@@ -4118,12 +2356,12 @@ pub fn __action72<
 {
     let __start0 = __3.0.clone();
     let __end0 = __3.2.clone();
-    let __temp0 = __action35(
+    let __temp0 = __action30(
         input,
         __3,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action22(
+    __action18(
         input,
         __0,
         __1,
@@ -4133,7 +2371,7 @@ pub fn __action72<
 }
 
 #[allow(unused_variables)]
-pub fn __action73<
+fn __action53<
     'input,
 >(
     input: &'input str,
@@ -4143,20 +2381,20 @@ pub fn __action73<
 {
     let __start0 = __0.0.clone();
     let __end0 = __1.2.clone();
-    let __temp0 = __action45(
+    let __temp0 = __action40(
         input,
         __0,
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action51(
+    __action41(
         input,
         __temp0,
     )
 }
 
 #[allow(unused_variables)]
-pub fn __action74<
+fn __action54<
     'input,
 >(
     input: &'input str,
@@ -4167,165 +2405,21 @@ pub fn __action74<
 {
     let __start0 = __1.0.clone();
     let __end0 = __2.2.clone();
-    let __temp0 = __action45(
-        input,
-        __1,
-        __2,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action52(
-        input,
-        __0,
-        __temp0,
-    )
-}
-
-#[allow(unused_variables)]
-pub fn __action75<
-    'input,
->(
-    input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Atom, usize),
-    __3: (usize, &'input str, usize),
-    __4: (usize, Box<Term>, usize),
-    __5: (usize, &'input str, usize),
-    __6: (usize, &'input str, usize),
-) -> QueryTerm
-{
-    let __start0 = __3.2.clone();
-    let __end0 = __4.0.clone();
-    let __temp0 = __action43(
-        input,
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action61(
-        input,
-        __0,
-        __1,
-        __2,
-        __3,
-        __temp0,
-        __4,
-        __5,
-        __6,
-    )
-}
-
-#[allow(unused_variables)]
-pub fn __action76<
-    'input,
->(
-    input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Atom, usize),
-    __3: (usize, &'input str, usize),
-    __4: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __5: (usize, Box<Term>, usize),
-    __6: (usize, &'input str, usize),
-    __7: (usize, &'input str, usize),
-) -> QueryTerm
-{
-    let __start0 = __4.0.clone();
-    let __end0 = __4.2.clone();
-    let __temp0 = __action44(
-        input,
-        __4,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action61(
-        input,
-        __0,
-        __1,
-        __2,
-        __3,
-        __temp0,
-        __5,
-        __6,
-        __7,
-    )
-}
-
-#[allow(unused_variables)]
-pub fn __action77<
-    'input,
->(
-    input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Atom, usize),
-    __3: (usize, &'input str, usize),
-    __4: (usize, Box<Term>, usize),
-    __5: (usize, &'input str, usize),
-    __6: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __7: (usize, &'input str, usize),
-) -> QueryTerm
-{
-    let __start0 = __3.2.clone();
-    let __end0 = __4.0.clone();
-    let __temp0 = __action43(
-        input,
-        &__start0,
-        &__end0,
-    );
-    let __temp0 = (__start0, __temp0, __end0);
-    __action62(
+    let __temp0 = __action40(
         input,
-        __0,
         __1,
         __2,
-        __3,
-        __temp0,
-        __4,
-        __5,
-        __6,
-        __7,
-    )
-}
-
-#[allow(unused_variables)]
-pub fn __action78<
-    'input,
->(
-    input: &'input str,
-    __0: (usize, &'input str, usize),
-    __1: (usize, &'input str, usize),
-    __2: (usize, Atom, usize),
-    __3: (usize, &'input str, usize),
-    __4: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __5: (usize, Box<Term>, usize),
-    __6: (usize, &'input str, usize),
-    __7: (usize, ::std::vec::Vec<Box<Term>>, usize),
-    __8: (usize, &'input str, usize),
-) -> QueryTerm
-{
-    let __start0 = __4.0.clone();
-    let __end0 = __4.2.clone();
-    let __temp0 = __action44(
-        input,
-        __4,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action62(
+    __action42(
         input,
         __0,
-        __1,
-        __2,
-        __3,
         __temp0,
-        __5,
-        __6,
-        __7,
-        __8,
     )
 }
 
 #[allow(unused_variables)]
-pub fn __action79<
+fn __action55<
     'input,
 >(
     input: &'input str,
@@ -4337,13 +2431,13 @@ pub fn __action79<
 {
     let __start0 = __1.2.clone();
     let __end0 = __2.0.clone();
-    let __temp0 = __action43(
+    let __temp0 = __action38(
         input,
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action11(
+    __action7(
         input,
         __0,
         __1,
@@ -4354,7 +2448,7 @@ pub fn __action79<
 }
 
 #[allow(unused_variables)]
-pub fn __action80<
+fn __action56<
     'input,
 >(
     input: &'input str,
@@ -4367,12 +2461,12 @@ pub fn __action80<
 {
     let __start0 = __2.0.clone();
     let __end0 = __2.2.clone();
-    let __temp0 = __action44(
+    let __temp0 = __action39(
         input,
         __2,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action11(
+    __action7(
         input,
         __0,
         __1,
@@ -4383,7 +2477,7 @@ pub fn __action80<
 }
 
 #[allow(unused_variables)]
-pub fn __action81<
+fn __action57<
     'input,
 >(
     input: &'input str,
@@ -4392,19 +2486,19 @@ pub fn __action81<
 {
     let __start0 = __0.0.clone();
     let __end0 = __0.2.clone();
-    let __temp0 = __action42(
+    let __temp0 = __action37(
         input,
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action40(
+    __action35(
         input,
         __temp0,
     )
 }
 
 #[allow(unused_variables)]
-pub fn __action82<
+fn __action58<
     'input,
 >(
     input: &'input str,
@@ -4414,12 +2508,12 @@ pub fn __action82<
 {
     let __start0 = __1.0.clone();
     let __end0 = __1.2.clone();
-    let __temp0 = __action42(
+    let __temp0 = __action37(
         input,
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action41(
+    __action36(
         input,
         __0,
         __temp0,
@@ -4427,7 +2521,7 @@ pub fn __action82<
 }
 
 #[allow(unused_variables)]
-pub fn __action83<
+fn __action59<
     'input,
 >(
     input: &'input str,
@@ -4437,20 +2531,20 @@ pub fn __action83<
 {
     let __start0 = __0.0.clone();
     let __end0 = __1.2.clone();
-    let __temp0 = __action39(
+    let __temp0 = __action34(
         input,
         __0,
         __1,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action53(
+    __action43(
         input,
         __temp0,
     )
 }
 
 #[allow(unused_variables)]
-pub fn __action84<
+fn __action60<
     'input,
 >(
     input: &'input str,
@@ -4461,13 +2555,13 @@ pub fn __action84<
 {
     let __start0 = __1.0.clone();
     let __end0 = __2.2.clone();
-    let __temp0 = __action39(
+    let __temp0 = __action34(
         input,
         __1,
         __2,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action54(
+    __action44(
         input,
         __0,
         __temp0,
@@ -4475,7 +2569,7 @@ pub fn __action84<
 }
 
 #[allow(unused_variables)]
-pub fn __action85<
+fn __action61<
     'input,
 >(
     input: &'input str,
@@ -4484,13 +2578,13 @@ pub fn __action85<
 {
     let __start0 = __0.0.clone();
     let __end0 = __0.0.clone();
-    let __temp0 = __action37(
+    let __temp0 = __action32(
         input,
         &__start0,
         &__end0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action20(
+    __action16(
         input,
         __temp0,
         __0,
@@ -4498,7 +2592,7 @@ pub fn __action85<
 }
 
 #[allow(unused_variables)]
-pub fn __action86<
+fn __action62<
     'input,
 >(
     input: &'input str,
@@ -4508,12 +2602,12 @@ pub fn __action86<
 {
     let __start0 = __0.0.clone();
     let __end0 = __0.2.clone();
-    let __temp0 = __action38(
+    let __temp0 = __action33(
         input,
         __0,
     );
     let __temp0 = (__start0, __temp0, __end0);
-    __action20(
+    __action16(
         input,
         __temp0,
         __1,