diff --git a/.gitignore b/.gitignore
index 7c9d772a8..344feff64 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@
*.merlin
cache/*
Version.ml
+/result
+/result-*
/_opam/
/*.pp.ligo
/*.pp.mligo
diff --git a/gitlab-pages/docs/demo/ligo-snippet.md b/gitlab-pages/docs/demo/ligo-snippet.md
new file mode 100644
index 000000000..68a75249f
--- /dev/null
+++ b/gitlab-pages/docs/demo/ligo-snippet.md
@@ -0,0 +1,170 @@
+---
+id: ligo-snippets-demo
+title: Ligo-Snippets Demo
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+“ligo-snippets” (https://www.npmjs.com/package/@ligolang/ligo-snippets) is a React component that can be included on any webpage to display Ligo source code to users.
+
+The user will see Ligo code with syntax highlighting, and an action button allowing the user to open the source code in the Ligo Web IDE (https://ide.ligolang.org).
+
+Each code snippet can have preset Ligo Web IDE configurations (e.g. entrypoint, parameters or storage). These configurations are optional and will be passed onto the Ligo Web IDE when present. This will allow examples to provide the proper configurations for the reader to experiment with.
+
+The “ligo-snippets” React component uses the CodeJar editor (https://github.com/antonmedv/codejar), which is extremely lightweight (only 2kB). It currently supports syntax highlighting for PascaLigo, CameLigo and ReasonLigo. Additionally, it has both a light and dark theme mode.
+
+
+
+
+
+
+```pascaligo {"name": "Ligo Introduction Example", "editor": true}
+(*_*
+ name: PascaLIGO Contract
+ language: pascaligo
+ compile:
+ entrypoint: main
+ dryRun:
+ entrypoint: main
+ parameters: Increment (1)
+ storage: 999
+ deploy:
+ entrypoint: main
+ storage: 999
+ evaluateValue:
+ entrypoint: ""
+ evaluateFunction:
+ entrypoint: add
+ parameters: (5, 6)
+ generateDeployScript:
+ entrypoint: main
+ storage: 999
+*_*)
+// variant defining pseudo multi-entrypoint actions
+type action is
+| Increment of int
+| Decrement of int
+
+function add (const a : int ; const b : int) : int is
+ block { skip } with a + b
+
+function subtract (const a : int ; const b : int) : int is
+ block { skip } with a - b
+
+// real entrypoint that re-routes the flow based
+// on the action provided
+function main (const p : action ; const s : int) :
+ (list(operation) * int) is
+ block { skip } with ((nil : list(operation)),
+ case p of
+ | Increment(n) -> add(s, n)
+ | Decrement(n) -> subtract(s, n)
+ end)
+
+```
+
+
+
+
+```cameligo {"name": "Ligo Introduction Example", "editor": true}
+(*_*
+ name: CameLIGO Contract
+ language: cameligo
+ compile:
+ entrypoint: main
+ dryRun:
+ entrypoint: main
+ parameters: Increment 1
+ storage: 999
+ deploy:
+ entrypoint: main
+ storage: 999
+ evaluateValue:
+ entrypoint: ""
+ evaluateFunction:
+ entrypoint: add
+ parameters: 5, 6
+ generateDeployScript:
+ entrypoint: main
+ storage: 999
+*_*)
+type storage = int
+
+(* variant defining pseudo multi-entrypoint actions *)
+
+type action =
+| Increment of int
+| Decrement of int
+
+let add (a,b: int * int) : int = a + b
+let sub (a,b: int * int) : int = a - b
+
+(* real entrypoint that re-routes the flow based on the action provided *)
+
+let main (p,s: action * storage) =
+ let storage =
+ match p with
+ | Increment n -> add (s, n)
+ | Decrement n -> sub (s, n)
+ in ([] : operation list), storage
+
+```
+
+
+
+
+```reasonligo {"name": "Ligo Introduction Example", "editor": true}
+(*_*
+ name: ReasonLIGO Contract
+ language: reasonligo
+ compile:
+ entrypoint: main
+ dryRun:
+ entrypoint: main
+ parameters: Increment (1)
+ storage: 999
+ deploy:
+ entrypoint: main
+ storage: 999
+ evaluateValue:
+ entrypoint: ""
+ evaluateFunction:
+ entrypoint: add
+ parameters: (5, 6)
+ generateDeployScript:
+ entrypoint: main
+ storage: 999
+*_*)
+type storage = int;
+
+/* variant defining pseudo multi-entrypoint actions */
+
+type action =
+ | Increment(int)
+ | Decrement(int);
+
+let add = ((a,b): (int, int)): int => a + b;
+let sub = ((a,b): (int, int)): int => a - b;
+
+/* real entrypoint that re-routes the flow based on the action provided */
+
+let main = ((p,storage): (action, storage)) => {
+ let storage =
+ switch (p) {
+ | Increment(n) => add((storage, n))
+ | Decrement(n) => sub((storage, n))
+ };
+ ([]: list(operation), storage);
+};
+
+```
+
+
diff --git a/gitlab-pages/docs/reference/bitwise.md b/gitlab-pages/docs/reference/bitwise.md
index 9d4df471a..7796e94c6 100644
--- a/gitlab-pages/docs/reference/bitwise.md
+++ b/gitlab-pages/docs/reference/bitwise.md
@@ -9,17 +9,42 @@ import Syntax from '@theme/Syntax';
import SyntaxTitle from '@theme/SyntaxTitle';
-function and : nat -> nat -> nat
+function and : 'a -> nat -> nat
-val and : nat -> nat -> nat
+val and : 'a -> nat -> nat
-let and: (nat, nat) => nat
+let and: ('a, nat) => nat
+`'a` can either be an `int` or `nat`.
+
A bitwise `and` operation.
+
+
+```pascaligo
+const zero: nat = Bitwise.and(2n, 1n)
+```
+
+
+
+
+```cameligo
+let zero: nat = Bitwise.and 2n 1n
+```
+
+
+
+
+```reasonligo
+let zero: nat = Bitwise.and(2n, 1n);
+```
+
+
+
+
function or : nat -> nat -> nat
@@ -32,6 +57,28 @@ let or: (nat, nat) => nat
A bitwise `or` operation.
+
+
+```pascaligo
+const three: nat = Bitwise.or(2n, 1n)
+```
+
+
+
+
+```cameligo
+let three: nat = Bitwise.or 2n 1n
+```
+
+
+
+
+```reasonligo
+let three: nat = Bitwise.or(2n, 1n);
+```
+
+
+
function xor : nat -> nat -> nat
@@ -44,6 +91,28 @@ let xor: (nat, nat) => nat
A bitwise `xor` operation.
+
+
+```pascaligo
+const three: nat = Bitwise.xor(2n, 1n)
+```
+
+
+
+
+```cameligo
+let three: nat = Bitwise.xor 2n 1n
+```
+
+
+
+
+```reasonligo
+let three: nat = Bitwise.xor(2n, 1n);
+```
+
+
+
function shift_left : nat -> nat -> nat
@@ -56,6 +125,28 @@ let shift_left: (nat, nat) => nat
A bitwise shift left operation.
+
+
+```pascaligo
+const four: nat = Bitwise.shift_left(2n, 1n)
+```
+
+
+
+
+```cameligo
+let four: nat = Bitwise.shift_left 2n 1n
+```
+
+
+
+
+```reasonligo
+let four: nat = Bitwise.shift_left(2n, 1n);
+```
+
+
+
function shift_right : nat -> nat -> nat
@@ -67,3 +158,25 @@ let shift_right: (nat, nat) => nat
A bitwise shift right operation.
+
+
+
+```pascaligo
+const one: nat = Bitwise.shift_right(2n, 1n)
+```
+
+
+
+
+```cameligo
+let one: nat = Bitwise.shift_right 2n 1n
+```
+
+
+
+
+```reasonligo
+let one: nat = Bitwise.shift_right(2n, 1n);
+```
+
+
\ No newline at end of file
diff --git a/gitlab-pages/website/package-lock.json b/gitlab-pages/website/package-lock.json
index bed04a355..e9f32f8ce 100644
--- a/gitlab-pages/website/package-lock.json
+++ b/gitlab-pages/website/package-lock.json
@@ -1535,6 +1535,20 @@
"@ligo/syntax": {
"version": "file:src/@ligo/syntax"
},
+ "@ligolang/ligo-snippets": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@ligolang/ligo-snippets/-/ligo-snippets-1.0.1.tgz",
+ "integrity": "sha512-JJa69veCkdwOS+u7iUngRNHFlXBJ+3Wx5l+EfrQyhBXMGzH4Ii4onZPxghDQEiL6RzqRbhCIsOE+A8OX7NCYMA==",
+ "requires": {
+ "@types/prismjs": "^1.16.1",
+ "axios": "^0.19.2",
+ "ligo-snippets-css": "0.0.1",
+ "prism-react-renderer": "^1.1.1",
+ "prismjs": "^1.20.0",
+ "react-codejar": "^1.0.1",
+ "yaml": "^1.9.2"
+ }
+ },
"@mdx-js/mdx": {
"version": "1.6.5",
"resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.5.tgz",
@@ -1621,6 +1635,11 @@
"integrity": "sha512-ljr9hGQYW3kZY1NmQbmSe4yXvgq3KDRt0FMBOB5OaDWqi4X2WzEsp6SZ02KmVrieNW1cjWlj13pgvcf0towZPw==",
"dev": true
},
+ "@medv/codejar": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@medv/codejar/-/codejar-1.0.9.tgz",
+ "integrity": "sha512-TxcSsq+TFcCvbsTDbVT5h4y9g86yBpEk+Da6tyIyd2OTJKWK0o7U5Olva4XMG4i+ExW5A9MfZAGFClwYokacIQ=="
+ },
"@mrmlnc/readdir-enhanced": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
@@ -1859,6 +1878,11 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
+ "@types/prismjs": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.16.1.tgz",
+ "integrity": "sha512-RNgcK3FEc1GpeOkamGDq42EYkb6yZW5OWQwTS56NJIB8WL0QGISQglA7En7NUx9RGP8AC52DOe+squqbAckXlA=="
+ },
"@types/q": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
@@ -2516,6 +2540,37 @@
"integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==",
"dev": true
},
+ "axios": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
+ "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
+ "requires": {
+ "follow-redirects": "1.5.10"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+ "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+ "requires": {
+ "debug": "=3.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
"babel-code-frame": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
@@ -3418,7 +3473,6 @@
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz",
"integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==",
- "dev": true,
"requires": {
"good-listener": "^1.2.2",
"select": "^1.1.2",
@@ -4419,8 +4473,7 @@
"delegate": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
- "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
- "dev": true
+ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
},
"depd": {
"version": "1.1.2",
@@ -5961,7 +6014,6 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
"integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
- "dev": true,
"requires": {
"delegate": "^3.1.2"
}
@@ -7367,6 +7419,11 @@
"leven": "^3.1.0"
}
},
+ "ligo-snippets-css": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/ligo-snippets-css/-/ligo-snippets-css-0.0.1.tgz",
+ "integrity": "sha512-8qZ3TO198MX03HJw5YzTe5am63hacUtYzZEt2DlLtLP22Iri2UvLnckVXisZEVt0w18kM6aDhtMarAz127/z4g=="
+ },
"lines-and-columns": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
@@ -10042,14 +10099,12 @@
"prism-react-renderer": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz",
- "integrity": "sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug==",
- "dev": true
+ "integrity": "sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug=="
},
"prismjs": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.20.0.tgz",
"integrity": "sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ==",
- "dev": true,
"requires": {
"clipboard": "^2.0.0"
}
@@ -10267,6 +10322,14 @@
"prop-types": "^15.6.2"
}
},
+ "react-codejar": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/react-codejar/-/react-codejar-1.0.1.tgz",
+ "integrity": "sha512-t58v/YF4qV8w1yHi8Ylkte5tOU5ziYd5/4EIyyuJ6g/rS73ccaV113HhQBwvtoofSKTqOdKv3Rc4K5iMZ10IGg==",
+ "requires": {
+ "@medv/codejar": "^1.0.0"
+ }
+ },
"react-dev-utils": {
"version": "10.2.1",
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz",
@@ -11452,8 +11515,7 @@
"select": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
- "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
- "dev": true
+ "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
},
"select-hose": {
"version": "2.0.0",
@@ -12678,8 +12740,7 @@
"tiny-emitter": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
- "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
- "dev": true
+ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
},
"tiny-invariant": {
"version": "1.1.0",
@@ -14516,8 +14577,7 @@
"yaml": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
- "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==",
- "dev": true
+ "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg=="
},
"yargs": {
"version": "13.3.2",
diff --git a/gitlab-pages/website/package.json b/gitlab-pages/website/package.json
index 02dec3f10..bb1eceb68 100644
--- a/gitlab-pages/website/package.json
+++ b/gitlab-pages/website/package.json
@@ -29,6 +29,10 @@
},
"dependencies": {
"@docusaurus/plugin-sitemap": "^2.0.0-alpha.56",
- "@ligo/syntax": "file:src/@ligo/syntax"
+ "@ligo/syntax": "file:src/@ligo/syntax",
+ "@ligolang/ligo-snippets": "^1.0.1",
+ "axios": "^0.19.2",
+ "react-codejar": "^1.0.1",
+ "yaml": "^1.10.0"
}
}
diff --git a/gitlab-pages/website/src/theme/CodeBlock/index.js b/gitlab-pages/website/src/theme/CodeBlock/index.js
index f9120f21d..fa3ad282b 100644
--- a/gitlab-pages/website/src/theme/CodeBlock/index.js
+++ b/gitlab-pages/website/src/theme/CodeBlock/index.js
@@ -81,11 +81,13 @@ Prism.languages = {
]
}
};
+
import defaultTheme from 'prism-react-renderer/themes/palenight';
import Clipboard from 'clipboard';
import rangeParser from 'parse-numeric-range';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import useThemeContext from '@theme/hooks/useThemeContext';
+import { LigoSnippet } from '@ligolang/ligo-snippets'
import styles from './styles.module.css';
@@ -159,7 +161,8 @@ const highlightDirectiveRegex = (lang) => {
};
const codeBlockTitleRegex = /title=".*"/;
-export default ({children, className: languageClassName, metastring}) => {
+export default ({ children, className: languageClassName, metastring }) => {
+
const {
siteConfig: {
themeConfig: {prism = {}},
@@ -277,6 +280,34 @@ export default ({children, className: languageClassName, metastring}) => {
setTimeout(() => setShowCopied(false), 2000);
};
+ // ligo-snippets - begin
+ if (metastring) {
+ const theme = isDarkTheme ? 'dark' : 'light';
+ let isObject = true
+ let metadata
+
+ try {
+ metadata = JSON.parse(metastring)
+ } catch (e) {
+ isObject = false
+ }
+
+ if (isObject) {
+ const snippetData = {
+ "language": language,
+ "name": metadata.name,
+ "code": children,
+ "theme": theme,
+ "height": "" // Optional
+ }
+
+ if (metadata.editor) {
+ return
+ }
+ }
+ }
+ // ligo-snippets - end
+
return (
div {
font-size: 1em;
font-weight: normal;
diff --git a/nix/ocaml-overlay.nix b/nix/ocaml-overlay.nix
index 8dd971e79..4ff46b20b 100644
--- a/nix/ocaml-overlay.nix
+++ b/nix/ocaml-overlay.nix
@@ -9,11 +9,12 @@ let
inherit (import sources."gitignore.nix" { inherit (self) lib; })
gitignoreSource;
# Remove list of directories or files from source (to stop unneeded rebuilds)
+ # Also, apply the gitignore here.
filterOut = xs:
- self.lib.cleanSourceWith {
+ gitignoreSource (self.lib.cleanSourceWith {
filter = p: type: !(builtins.elem (builtins.baseNameOf p) xs);
src = gitignoreSource ../.;
- };
+ });
in {
ocamlPackages = self.ocaml-ng.ocamlPackages_4_07.overrideScope'
(builtins.foldl' self.lib.composeExtensions (_: _: { }) [
diff --git a/src/bin/cli.ml b/src/bin/cli.ml
index 0dc4df7cb..8c3720042 100644
--- a/src/bin/cli.ml
+++ b/src/bin/cli.ml
@@ -159,10 +159,22 @@ let preprocess =
let doc = "Subcommand: Preprocess the source file.\nWarning: Intended for development of LIGO and can break at any time." in
(Term.ret term, Term.info ~doc cmdname)
+let pretty_print =
+ let f source_file syntax display_format = (
+ toplevel ~display_format @@
+ let%bind pp =
+ Compile.Of_source.pretty_print source_file (Syntax_name syntax) in
+ ok @@ Buffer.contents pp
+ ) in
+ let term = Term.(const f $ source_file 0 $ syntax $ display_format) in
+ let cmdname = "pretty-print" in
+ let doc = "Subcommand: Pretty-print the source file."
+ in (Term.ret term, Term.info ~doc cmdname)
+
let print_cst =
let f source_file syntax display_format = (
toplevel ~display_format @@
- let%bind pp = Compile.Of_source.pretty_print source_file (Syntax_name syntax) in
+ let%bind pp = Compile.Of_source.pretty_print_cst source_file (Syntax_name syntax) in
ok @@ Format.asprintf "%s \n" (Buffer.contents pp)
)
in
@@ -489,5 +501,6 @@ let run ?argv () =
print_ast_typed ;
print_mini_c ;
list_declarations ;
- preprocess
+ preprocess;
+ pretty_print
]
diff --git a/src/bin/expect_tests/help_tests.ml b/src/bin/expect_tests/help_tests.ml
index d30f67155..4c00c7969 100644
--- a/src/bin/expect_tests/help_tests.ml
+++ b/src/bin/expect_tests/help_tests.ml
@@ -57,6 +57,9 @@ let%expect_test _ =
Subcommand: Preprocess the source file. Warning: Intended for
development of LIGO and can break at any time.
+ pretty-print
+ Subcommand: Pretty-print the source file.
+
print-ast
Subcommand: Print the AST. Warning: Intended for development of
LIGO and can break at any time.
@@ -148,6 +151,9 @@ let%expect_test _ =
Subcommand: Preprocess the source file. Warning: Intended for
development of LIGO and can break at any time.
+ pretty-print
+ Subcommand: Pretty-print the source file.
+
print-ast
Subcommand: Print the AST. Warning: Intended for development of
LIGO and can break at any time.
diff --git a/src/bin/expect_tests/literals.ml b/src/bin/expect_tests/literals.ml
index c4c4b03a9..aebe463e3 100644
--- a/src/bin/expect_tests/literals.ml
+++ b/src/bin/expect_tests/literals.ml
@@ -7,7 +7,7 @@ let%expect_test _ =
let%expect_test _ =
run_ligo_bad ["interpret" ; "(\"thisisnotasignature\":signature)" ; "--syntax=pascaligo"] ;
[%expect {|
- ligo: in file "", line 0, characters 1-32. Badly formatted literal: Signature thisisnotasignature {"location":"in file \"\", line 0, characters 1-32"}
+ ligo: in file "", line 0, characters 0-33. Badly formatted literal: Signature thisisnotasignature {"location":"in file \"\", line 0, characters 0-33"}
If you're not sure how to fix this error, you can
@@ -25,7 +25,7 @@ let%expect_test _ =
let%expect_test _ =
run_ligo_bad ["interpret" ; "(\"thisisnotapublickey\":key)" ; "--syntax=pascaligo"] ;
[%expect {|
- ligo: in file "", line 0, characters 1-26. Badly formatted literal: key thisisnotapublickey {"location":"in file \"\", line 0, characters 1-26"}
+ ligo: in file "", line 0, characters 0-27. Badly formatted literal: key thisisnotapublickey {"location":"in file \"\", line 0, characters 0-27"}
If you're not sure how to fix this error, you can
diff --git a/src/main/compile/helpers.ml b/src/main/compile/helpers.ml
index b6809a20a..8d89c369f 100644
--- a/src/main/compile/helpers.ml
+++ b/src/main/compile/helpers.ml
@@ -129,7 +129,7 @@ let parsify_string syntax source =
let%bind applied = Self_ast_imperative.all_program parsified
in ok applied
-let pretty_print_pascaligo source =
+let pretty_print_pascaligo_cst source =
let%bind ast = Parser.Pascaligo.parse_file source in
let buffer = Buffer.create 59 in
let state =
@@ -137,10 +137,10 @@ let pretty_print_pascaligo source =
~offsets:true
~mode:`Byte
~buffer in
- Parser_pascaligo.ParserLog.pp_ast state ast;
+ Parser_pascaligo.ParserLog.pp_cst state ast;
ok buffer
-let pretty_print_cameligo source =
+let pretty_print_cameligo_cst source =
let%bind ast = Parser.Cameligo.parse_file source in
let buffer = Buffer.create 59 in
let state = (* TODO: Should flow from the CLI *)
@@ -148,10 +148,10 @@ let pretty_print_cameligo source =
~offsets:true
~mode:`Point
~buffer in
- Parser_cameligo.ParserLog.pp_ast state ast;
+ Parser_cameligo.ParserLog.pp_cst state ast;
ok buffer
-let pretty_print_reasonligo source =
+let pretty_print_reasonligo_cst source =
let%bind ast = Parser.Reasonligo.parse_file source in
let buffer = Buffer.create 59 in
let state = (* TODO: Should flow from the CLI *)
@@ -159,16 +159,16 @@ let pretty_print_reasonligo source =
~offsets:true
~mode:`Point
~buffer in
- Parser_cameligo.ParserLog.pp_ast state ast;
+ Parser_cameligo.ParserLog.pp_cst state ast;
ok buffer
-let pretty_print syntax source =
+let pretty_print_cst syntax source =
let%bind v_syntax =
syntax_to_variant syntax (Some source) in
match v_syntax with
- PascaLIGO -> pretty_print_pascaligo source
- | CameLIGO -> pretty_print_cameligo source
- | ReasonLIGO -> pretty_print_reasonligo source
+ PascaLIGO -> pretty_print_pascaligo_cst source
+ | CameLIGO -> pretty_print_cameligo_cst source
+ | ReasonLIGO -> pretty_print_reasonligo_cst source
let preprocess_pascaligo = Parser.Pascaligo.preprocess
@@ -183,3 +183,44 @@ let preprocess syntax source =
PascaLIGO -> preprocess_pascaligo source
| CameLIGO -> preprocess_cameligo source
| ReasonLIGO -> preprocess_reasonligo source
+
+let pretty_print_pascaligo source =
+ let%bind ast = Parser.Pascaligo.parse_file source in
+ let doc = Parser_pascaligo.Pretty.print ast in
+ let buffer = Buffer.create 131 in
+ let width =
+ match Terminal_size.get_columns () with
+ None -> 60
+ | Some c -> c in
+ let () = PPrint.ToBuffer.pretty 1.0 width buffer doc
+ in Trace.ok buffer
+
+let pretty_print_cameligo source =
+ let%bind ast = Parser.Cameligo.parse_file source in
+ let doc = Parser_cameligo.Pretty.print ast in
+ let buffer = Buffer.create 131 in
+ let width =
+ match Terminal_size.get_columns () with
+ None -> 60
+ | Some c -> c in
+ let () = PPrint.ToBuffer.pretty 1.0 width buffer doc
+ in Trace.ok buffer
+
+let pretty_print_reasonligo source =
+ let%bind ast = Parser.Reasonligo.parse_file source in
+ let doc = Parser_reasonligo.Pretty.print ast in
+ let buffer = Buffer.create 131 in
+ let width =
+ match Terminal_size.get_columns () with
+ None -> 60
+ | Some c -> c in
+ let () = PPrint.ToBuffer.pretty 1.0 width buffer doc
+ in Trace.ok buffer
+
+let pretty_print syntax source =
+ let%bind v_syntax =
+ syntax_to_variant syntax (Some source) in
+ match v_syntax with
+ PascaLIGO -> pretty_print_pascaligo source
+ | CameLIGO -> pretty_print_cameligo source
+ | ReasonLIGO -> pretty_print_reasonligo source
diff --git a/src/main/compile/of_source.ml b/src/main/compile/of_source.ml
index 75cb9f32c..f0611d4ba 100644
--- a/src/main/compile/of_source.ml
+++ b/src/main/compile/of_source.ml
@@ -19,8 +19,11 @@ let compile_contract_input : string -> string -> v_syntax -> Ast_imperative.expr
let%bind (storage,parameter) = bind_map_pair (compile_expression syntax) (storage,parameter) in
ok @@ Ast_imperative.e_pair storage parameter
-let pretty_print source_filename syntax =
- Helpers.pretty_print syntax source_filename
+let pretty_print_cst source_filename syntax =
+ Helpers.pretty_print_cst syntax source_filename
let preprocess source_filename syntax =
Helpers.preprocess syntax source_filename
+
+let pretty_print source_filename syntax =
+ Helpers.pretty_print syntax source_filename
diff --git a/src/passes/01-parser/cameligo.ml b/src/passes/01-parser/cameligo.ml
index 79093af97..7ef89b360 100644
--- a/src/passes/01-parser/cameligo.ml
+++ b/src/passes/01-parser/cameligo.ml
@@ -5,6 +5,7 @@ module Scoping = Parser_cameligo.Scoping
module Region = Simple_utils.Region
module ParErr = Parser_cameligo.ParErr
module SSet = Set.Make (String)
+module Pretty = Parser_cameligo.Pretty
(* Mock IOs TODO: Fill them with CLI options *)
@@ -19,7 +20,8 @@ module SubIO =
ext : string; (* ".mligo" *)
mode : [`Byte | `Point];
cmd : EvalOpt.command;
- mono : bool
+ mono : bool;
+ pretty : bool
>
let options : options =
@@ -34,6 +36,7 @@ module SubIO =
method mode = `Point
method cmd = EvalOpt.Quiet
method mono = false
+ method pretty = false
end
let make =
@@ -46,6 +49,7 @@ module SubIO =
~mode:options#mode
~cmd:options#cmd
~mono:options#mono
+ ~pretty:options#mono
end
module Parser =
@@ -146,3 +150,18 @@ let parse_expression source = apply (fun () -> Unit.expr_in_string source)
(* Preprocessing a contract in a file *)
let preprocess source = apply (fun () -> Unit.preprocess source)
+
+(* Pretty-print a file (after parsing it). *)
+
+let pretty_print source =
+ match parse_file source with
+ Stdlib.Error _ as e -> e
+ | Ok ast ->
+ let doc = Pretty.print (fst ast) in
+ let buffer = Buffer.create 131 in
+ let width =
+ match Terminal_size.get_columns () with
+ None -> 60
+ | Some c -> c in
+ let () = PPrint.ToBuffer.pretty 1.0 width buffer doc
+ in Trace.ok buffer
diff --git a/src/passes/01-parser/cameligo.mli b/src/passes/01-parser/cameligo.mli
index c4f66a596..4181e6a58 100644
--- a/src/passes/01-parser/cameligo.mli
+++ b/src/passes/01-parser/cameligo.mli
@@ -19,3 +19,6 @@ val parse_expression : string -> AST.expr Trace.result
(** Preprocess a given CameLIGO file and preprocess it. *)
val preprocess : string -> Buffer.t Trace.result
+
+(** Pretty-print a given CameLIGO file (after parsing it). *)
+val pretty_print : string -> Buffer.t Trace.result
diff --git a/src/passes/01-parser/cameligo/.links b/src/passes/01-parser/cameligo/.links
index fc8466c8e..8dcc06146 100644
--- a/src/passes/01-parser/cameligo/.links
+++ b/src/passes/01-parser/cameligo/.links
@@ -19,5 +19,3 @@ $HOME/git/OCaml-build/Makefile
../shared/LexerUnit.ml
../shared/ParserUnit.mli
../shared/ParserUnit.ml
-
-$HOME/git/ligo/_build/default/src/passes/1-parser/cameligo/ParErr.ml
\ No newline at end of file
diff --git a/src/passes/01-parser/cameligo/AST.ml b/src/passes/01-parser/cameligo/AST.ml
index 5ade8c346..db425d540 100644
--- a/src/passes/01-parser/cameligo/AST.ml
+++ b/src/passes/01-parser/cameligo/AST.ml
@@ -137,11 +137,14 @@ and ast = t
and attributes = attribute list
and declaration =
- Let of (kwd_let * kwd_rec option * let_binding * attributes) reg
+ Let of let_decl
| TypeDecl of type_decl reg
(* Non-recursive values *)
+and let_decl =
+ (kwd_let * kwd_rec option * let_binding * attributes) reg
+
and let_binding = {
binders : pattern nseq;
lhs_type : (colon * type_expr) option;
@@ -225,7 +228,7 @@ and field_pattern = {
and expr =
ECase of expr case reg
| ECond of cond_expr reg
-| EAnnot of (expr * colon * type_expr) par reg
+| EAnnot of annot_expr par reg
| ELogic of logic_expr
| EArith of arith_expr
| EString of string_expr
@@ -244,6 +247,8 @@ and expr =
| EFun of fun_expr reg
| ESeq of expr injection reg
+and annot_expr = expr * colon * type_expr
+
and 'a injection = {
compound : compound;
elements : ('a, semi) sepseq;
@@ -336,18 +341,19 @@ and field_assign = {
}
and update = {
- lbrace : lbrace;
- record : path;
+ lbrace : lbrace;
+ record : path;
kwd_with : kwd_with;
- updates : field_path_assign reg ne_injection reg;
- rbrace : rbrace;
+ updates : field_path_assignment reg ne_injection reg;
+ rbrace : rbrace
}
-and field_path_assign = {
- field_path : (field_name, dot) nsepseq;
+and field_path_assignment = {
+ field_path : path;
assignment : equal;
field_expr : expr
}
+
and path =
Name of variable
| Path of projection reg
diff --git a/src/passes/01-parser/cameligo/LexToken.mll b/src/passes/01-parser/cameligo/LexToken.mll
index 509e5fae2..7d54d440b 100644
--- a/src/passes/01-parser/cameligo/LexToken.mll
+++ b/src/passes/01-parser/cameligo/LexToken.mll
@@ -431,21 +431,20 @@ type nat_err =
| Non_canonical_zero_nat
let mk_nat lexeme region =
- match (String.index_opt lexeme 'n') with
+ match String.index_opt lexeme 'n' with
None -> Error Invalid_natural
| Some _ -> let z =
- Str.(global_replace (regexp "_") "" lexeme) |>
- Str.(global_replace (regexp "n") "") |>
- Z.of_string in
+ Str.(global_replace (regexp "_") "" lexeme) |>
+ Str.(global_replace (regexp "n") "") |>
+ Z.of_string in
if Z.equal z Z.zero && lexeme <> "0n"
then Error Non_canonical_zero_nat
else Ok (Nat Region.{region; value = lexeme,z})
let mk_mutez lexeme region =
- let z =
- Str.(global_replace (regexp "_") "" lexeme) |>
- Str.(global_replace (regexp "mutez") "") |>
- Z.of_string in
+ let z = Str.(global_replace (regexp "_") "" lexeme) |>
+ Str.(global_replace (regexp "mutez") "") |>
+ Z.of_string in
if Z.equal z Z.zero && lexeme <> "0mutez"
then Error Non_canonical_zero
else Ok (Mutez Region.{region; value = lexeme, z})
diff --git a/src/passes/01-parser/cameligo/Parser.mly b/src/passes/01-parser/cameligo/Parser.mly
index 24b747f93..cf4c0494b 100644
--- a/src/passes/01-parser/cameligo/Parser.mly
+++ b/src/passes/01-parser/cameligo/Parser.mly
@@ -86,7 +86,7 @@ nsepseq(item,sep):
(* Non-empty comma-separated values (at least two values) *)
tuple(item):
- item "," nsepseq(item,",") { let h,t = $3 in $1,($2,h)::t }
+ item "," nsepseq(item,",") { let h,t = $3 in $1, ($2,h)::t }
(* Possibly empty semicolon-separated values between brackets *)
@@ -236,10 +236,7 @@ type_annotation:
irrefutable:
sub_irrefutable { $1 }
| tuple(sub_irrefutable) {
- let hd, tl = $1 in
- let start = pattern_to_region hd in
- let stop = last fst tl in
- let region = cover start stop
+ let region = nsepseq_to_region pattern_to_region $1
in PTuple {region; value=$1} }
sub_irrefutable:
@@ -276,9 +273,7 @@ pattern:
PList (PCons {region; value=$1,$2,$3})
}
| tuple(sub_pattern) {
- let start = pattern_to_region (fst $1) in
- let stop = last fst (snd $1) in
- let region = cover start stop
+ let region = nsepseq_to_region pattern_to_region $1
in PTuple {region; value=$1} }
sub_pattern:
@@ -333,10 +328,7 @@ constr_pattern:
ptuple:
tuple(tail) {
- let hd, tl = $1 in
- let start = pattern_to_region hd in
- let stop = last fst tl in
- let region = cover start stop
+ let region = nsepseq_to_region pattern_to_region $1
in PTuple {region; value=$1} }
unit:
@@ -372,9 +364,7 @@ base_expr(right_expr):
tuple_expr:
tuple(disj_expr_level) {
- let start = expr_to_region (fst $1) in
- let stop = last fst (snd $1) in
- let region = cover start stop
+ let region = nsepseq_to_region expr_to_region $1
in ETuple {region; value=$1} }
conditional(right_expr):
@@ -534,8 +524,7 @@ mult_expr_level:
| unary_expr_level { $1 }
unary_expr_level:
- call_expr_level { $1 }
-| "-" call_expr_level {
+ "-" call_expr_level {
let start = $1 in
let stop = expr_to_region $2 in
let region = cover start stop
@@ -547,7 +536,9 @@ unary_expr_level:
let stop = expr_to_region $2 in
let region = cover start stop
and value = {op=$1; arg=$2} in
- ELogic (BoolExpr (Not ({region; value}))) }
+ ELogic (BoolExpr (Not ({region; value})))
+ }
+| call_expr_level { $1 }
call_expr_level:
call_expr | constr_expr | core_expr { $1 }
@@ -593,7 +584,10 @@ core_expr:
| record_expr { ERecord $1 }
| update_record { EUpdate $1 }
| par(expr) { EPar $1 }
-| par(expr ":" type_expr {$1,$2,$3}) { EAnnot $1 }
+| par(annot_expr) { EAnnot $1 }
+
+annot_expr:
+ expr ":" type_expr { $1,$2,$3 }
module_field:
module_name "." module_fun {
@@ -602,7 +596,7 @@ module_field:
module_fun:
field_name { $1 }
-| "or" { {value="or"; region=$1} }
+| "or" { {value="or"; region=$1} }
projection:
struct_name "." nsepseq(selection,".") {
@@ -642,7 +636,7 @@ update_record:
lbrace = $1;
record = $2;
kwd_with = $3;
- updates = {value = {compound = Braces($1,$5);
+ updates = {value = {compound = Braces (ghost, ghost);
ne_elements;
terminator};
region = cover $3 $5};
@@ -650,20 +644,15 @@ update_record:
in {region; value} }
field_path_assignment :
- nsepseq(field_name,".") "=" expr {
- let start = nsepseq_to_region (fun x -> x.region) $1 in
- let region = cover start (expr_to_region $3) in
- let value = {field_path = $1;
- assignment = $2;
- field_expr = $3}
- in {region; value}}
+ path "=" expr {
+ let region = cover (path_to_region $1) (expr_to_region $3)
+ and value = {field_path=$1; assignment=$2; field_expr=$3}
+ in {region; value} }
field_assignment:
field_name "=" expr {
- let start = $1.region in
- let stop = expr_to_region $3 in
- let region = cover start stop in
- let value = {field_name = $1;
+ let region = cover $1.region (expr_to_region $3)
+ and value = {field_name = $1;
assignment = $2;
field_expr = $3}
in {region; value} }
diff --git a/src/passes/01-parser/cameligo/ParserLog.ml b/src/passes/01-parser/cameligo/ParserLog.ml
index a3b159dae..49d9b2562 100644
--- a/src/passes/01-parser/cameligo/ParserLog.ml
+++ b/src/passes/01-parser/cameligo/ParserLog.ml
@@ -136,11 +136,10 @@ let rec print_tokens state {decl;eof} =
print_token state eof "EOF"
and print_attributes state attributes =
- List.iter (
- fun ({value = attribute; region}) ->
- let attribute_formatted = sprintf "[@@%s]" attribute in
- print_token state region attribute_formatted
- ) attributes
+ let apply {value = attribute; region} =
+ let attribute_formatted = sprintf "[@@%s]" attribute in
+ print_token state region attribute_formatted
+ in List.iter apply attributes
and print_statement state = function
Let {value=kwd_let, kwd_rec, let_binding, attributes; _} ->
@@ -527,7 +526,7 @@ and print_field_assign state {value; _} =
and print_field_path_assign state {value; _} =
let {field_path; assignment; field_expr} = value in
- print_nsepseq state "." print_var field_path;
+ print_path state field_path;
print_token state assignment "=";
print_expr state field_expr
@@ -616,12 +615,20 @@ let pp_node state name =
let node = sprintf "%s%s\n" state#pad_path name
in Buffer.add_string state#buffer node
-let pp_string state = pp_ident state
+let pp_string state {value=name; region} =
+ let reg = compact state region in
+ let node = sprintf "%s%S (%s)\n" state#pad_path name reg
+ in Buffer.add_string state#buffer node
+
+let pp_verbatim state {value=name; region} =
+ let reg = compact state region in
+ let node = sprintf "%s{|%s|} (%s)\n" state#pad_path name reg
+ in Buffer.add_string state#buffer node
let pp_loc_node state name region =
pp_ident state {value=name; region}
-let rec pp_ast state {decl; _} =
+let rec pp_cst state {decl; _} =
let apply len rank =
pp_declaration (state#pad len rank) in
let decls = Utils.nseq_to_list decl in
@@ -704,7 +711,7 @@ and pp_pattern state = function
pp_string (state#pad 1 0) s
| PVerbatim v ->
pp_node state "PVerbatim";
- pp_string (state#pad 1 0) v
+ pp_verbatim (state#pad 1 0) v
| PUnit {region; _} ->
pp_loc_node state "PUnit" region
| PFalse region ->
@@ -938,7 +945,7 @@ and pp_projection state proj =
List.iteri (apply len) selections
and pp_update state update =
- pp_path state update.record;
+ pp_path (state#pad 2 0) update.record;
pp_ne_injection pp_field_path_assign state update.updates.value
and pp_path state = function
@@ -963,10 +970,10 @@ and pp_field_assign state {value; _} =
pp_expr (state#pad 2 1) value.field_expr
and pp_field_path_assign state {value; _} =
- pp_node state "";
- let path = Utils.nsepseq_to_list value.field_path in
- List.iter (pp_ident (state#pad 2 0)) path;
- pp_expr (state#pad 2 1) value.field_expr
+ let {field_path; field_expr; _} = value in
+ pp_node state "";
+ pp_path (state#pad 2 0) field_path;
+ pp_expr (state#pad 2 1) field_expr
and pp_constr_expr state = function
ENone region ->
@@ -987,11 +994,11 @@ and pp_constr_app_expr state (constr, expr_opt) =
and pp_list_expr state = function
ECons {value; region} ->
- pp_loc_node state "Cons" region;
+ pp_loc_node state "ECons" region;
pp_expr (state#pad 2 0) value.arg1;
pp_expr (state#pad 2 1) value.arg2
| EListComp {value; region} ->
- pp_loc_node state "List" region;
+ pp_loc_node state "EListComp" region;
if value.elements = None
then pp_node (state#pad 1 0) ""
else pp_injection pp_expr state value
@@ -1134,13 +1141,13 @@ and pp_type_expr state = function
pp_type_expr (state#pad len rank) in
let domain, _, range = value in
List.iteri (apply 2) [domain; range]
- | TPar {value={inside;_}; region} ->
+| TPar {value={inside;_}; region} ->
pp_loc_node state "TPar" region;
pp_type_expr (state#pad 1 0) inside
- | TVar v ->
+| TVar v ->
pp_node state "TVar";
pp_ident (state#pad 1 0) v
- | TString s ->
+| TString s ->
pp_node state "TString";
pp_string (state#pad 1 0) s
diff --git a/src/passes/01-parser/cameligo/ParserLog.mli b/src/passes/01-parser/cameligo/ParserLog.mli
index d16252478..800ea4443 100644
--- a/src/passes/01-parser/cameligo/ParserLog.mli
+++ b/src/passes/01-parser/cameligo/ParserLog.mli
@@ -27,5 +27,5 @@ val expr_to_string :
(** {1 Pretty-printing of AST nodes} *)
-val pp_ast : state -> AST.t -> unit
+val pp_cst : state -> AST.t -> unit
val pp_expr : state -> AST.expr -> unit
diff --git a/src/passes/01-parser/cameligo/ParserMain.ml b/src/passes/01-parser/cameligo/ParserMain.ml
index a3d13f3cc..0ccb71a01 100644
--- a/src/passes/01-parser/cameligo/ParserMain.ml
+++ b/src/passes/01-parser/cameligo/ParserMain.ml
@@ -22,7 +22,8 @@ module SubIO =
ext : string;
mode : [`Byte | `Point];
cmd : EvalOpt.command;
- mono : bool
+ mono : bool;
+ pretty : bool
>
let options : options =
@@ -36,6 +37,7 @@ module SubIO =
method mode = IO.options#mode
method cmd = IO.options#cmd
method mono = IO.options#mono
+ method pretty = IO.options#pretty
end
let make =
@@ -48,6 +50,7 @@ module SubIO =
~mode:options#mode
~cmd:options#cmd
~mono:options#mono
+ ~pretty:options#pretty
end
module Parser =
@@ -67,14 +70,28 @@ module ParserLog =
module Lexer = Lexer.Make (LexToken)
module Unit =
- ParserUnit.Make (Lexer)(AST)(Parser)(ParErr)(ParserLog)(SubIO)
+ ParserUnit.Make (Lexer)(AST)(Parser)(Parser_msg)(ParserLog)(SubIO)
(* Main *)
let wrap = function
- Stdlib.Ok _ -> flush_all ()
+ Stdlib.Ok ast ->
+ if IO.options#pretty then
+ begin
+ let doc = Pretty.print ast in
+ let width =
+ match Terminal_size.get_columns () with
+ None -> 60
+ | Some c -> c in
+ PPrint.ToChannel.pretty 1.0 width stdout doc;
+ print_newline ()
+ end;
+ flush_all ()
| Error msg ->
- (flush_all (); Printf.eprintf "\027[31m%s\027[0m%!" msg.Region.value)
+ begin
+ flush_all ();
+ Printf.eprintf "\027[31m%s\027[0m%!" msg.Region.value
+ end
let () =
match IO.options#input with
diff --git a/src/passes/01-parser/cameligo/Pretty.ml b/src/passes/01-parser/cameligo/Pretty.ml
new file mode 100644
index 000000000..780d05e29
--- /dev/null
+++ b/src/passes/01-parser/cameligo/Pretty.ml
@@ -0,0 +1,442 @@
+[@@@warning "-42"]
+
+open AST
+module Region = Simple_utils.Region
+open! Region
+open! PPrint
+
+let pp_par printer {value; _} =
+ string "(" ^^ nest 1 (printer value.inside ^^ string ")")
+
+let rec print ast =
+ let app decl = group (pp_declaration decl) in
+ let decl = Utils.nseq_to_list ast.decl in
+ separate_map (hardline ^^ hardline) app decl
+
+and pp_declaration = function
+ Let decl -> pp_let_decl decl
+| TypeDecl decl -> pp_type_decl decl
+
+and pp_let_decl {value; _} =
+ let _, rec_opt, binding, attr = value in
+ let let_str =
+ match rec_opt with
+ None -> "let "
+ | Some _ -> "let rec " in
+ let binding = pp_let_binding binding
+ and attr = pp_attributes attr
+ in string let_str ^^ binding ^^ attr
+
+and pp_attributes = function
+ [] -> empty
+| attr ->
+ let make s = string "[@@" ^^ string s.value ^^ string "]" in
+ group (nest 2 (break 1 ^^ separate_map (break 0) make attr))
+
+and pp_ident {value; _} = string value
+
+and pp_string s = string "\"" ^^ pp_ident s ^^ string "\""
+
+and pp_verbatim s = string "{|" ^^ pp_ident s ^^ string "|}"
+
+and pp_let_binding (binding : let_binding) =
+ let {binders; lhs_type; let_rhs; _} = binding in
+ let head, tail = binders in
+ let patterns =
+ group (nest 2 (separate_map (break 1) pp_pattern (head::tail))) in
+ let lhs =
+ patterns ^^
+ match lhs_type with
+ None -> empty
+ | Some (_,e) -> group (break 1 ^^ string ": " ^^ pp_type_expr e)
+ in prefix 2 1 (lhs ^^ string " =") (pp_expr let_rhs)
+
+and pp_pattern = function
+ PConstr p -> pp_pconstr p
+| PUnit _ -> string "()"
+| PFalse _ -> string "false"
+| PTrue _ -> string "true"
+| PVar v -> pp_ident v
+| PInt i -> pp_int i
+| PNat n -> pp_nat n
+| PBytes b -> pp_bytes b
+| PString s -> pp_string s
+| PVerbatim s -> pp_verbatim s
+| PWild _ -> string "_"
+| PList l -> pp_plist l
+| PTuple t -> pp_ptuple t
+| PPar p -> pp_ppar p
+| PRecord r -> pp_precord r
+| PTyped t -> pp_ptyped t
+
+and pp_pconstr = function
+ PNone _ -> string "None"
+| PSomeApp p -> pp_patt_some p
+| PConstrApp a -> pp_pconstr_app a
+
+and pp_pconstr_app {value; _} =
+ match value with
+ constr, None -> pp_ident constr
+ | constr, Some pat ->
+ prefix 4 1 (pp_ident constr) (pp_pattern pat)
+
+and pp_patt_some {value; _} =
+ prefix 4 1 (string "Some") (pp_pattern (snd value))
+
+and pp_int {value; _} =
+ string (Z.to_string (snd value))
+
+and pp_nat {value; _} =
+ string (Z.to_string (snd value) ^ "n")
+
+and pp_bytes {value; _} =
+ string ("0x" ^ Hex.show (snd value))
+
+and pp_ppar p = pp_par pp_pattern p
+
+and pp_plist = function
+ PListComp cmp -> pp_list_comp cmp
+| PCons cons -> pp_pcons cons
+
+and pp_list_comp e = group (pp_injection pp_pattern e)
+
+and pp_pcons {value; _} =
+ let patt1, _, patt2 = value in
+ prefix 2 1 (pp_pattern patt1 ^^ string " ::") (pp_pattern patt2)
+
+and pp_ptuple {value; _} =
+ let head, tail = value in
+ let rec app = function
+ [] -> empty
+ | [p] -> group (break 1 ^^ pp_pattern p)
+ | p::items ->
+ group (break 1 ^^ pp_pattern p ^^ string ",") ^^ app items
+ in if tail = []
+ then pp_pattern head
+ else pp_pattern head ^^ string "," ^^ app (List.map snd tail)
+
+and pp_precord fields = pp_ne_injection pp_field_pattern fields
+
+and pp_field_pattern {value; _} =
+ let {field_name; pattern; _} = value in
+ prefix 2 1 (pp_ident field_name ^^ string " =") (pp_pattern pattern)
+
+and pp_ptyped {value; _} =
+ let {pattern; type_expr; _} = value in
+ group (pp_pattern pattern ^^ string " :" ^/^ pp_type_expr type_expr)
+
+and pp_type_decl decl =
+ let {name; type_expr; _} = decl.value in
+ let padding = match type_expr with TSum _ -> 0 | _ -> 2 in
+ string "type " ^^ string name.value ^^ string " ="
+ ^^ group (nest padding (break 1 ^^ pp_type_expr type_expr))
+
+and pp_expr = function
+ ECase e -> pp_case_expr e
+| ECond e -> group (pp_cond_expr e)
+| EAnnot e -> pp_annot_expr e
+| ELogic e -> group (pp_logic_expr e)
+| EArith e -> group (pp_arith_expr e)
+| EString e -> pp_string_expr e
+| EList e -> group (pp_list_expr e)
+| EConstr e -> pp_constr_expr e
+| ERecord e -> pp_record_expr e
+| EProj e -> pp_projection e
+| EUpdate e -> pp_update e
+| EVar v -> pp_ident v
+| ECall e -> pp_call_expr e
+| EBytes e -> pp_bytes e
+| EUnit _ -> string "()"
+| ETuple e -> pp_tuple_expr e
+| EPar e -> pp_par_expr e
+| ELetIn e -> pp_let_in e
+| EFun e -> pp_fun e
+| ESeq e -> pp_seq e
+
+and pp_case_expr {value; _} =
+ let {expr; cases; _} = value in
+ group (string "match " ^^ nest 6 (pp_expr expr) ^/^ string "with")
+ ^^ hardline ^^ pp_cases cases
+
+and pp_cases {value; _} =
+ let head, tail = value in
+ let head = pp_clause head in
+ let head = if tail = [] then head else blank 2 ^^ head in
+ let rest = List.map snd tail in
+ let app clause = break 1 ^^ string "| " ^^ pp_clause clause
+ in head ^^ concat_map app rest
+
+and pp_clause {value; _} =
+ let {pattern; rhs; _} = value in
+ pp_pattern pattern ^^ prefix 4 1 (string " ->") (pp_expr rhs)
+
+and pp_cond_expr {value; _} =
+ let {test; ifso; kwd_else; ifnot; _} = value in
+ let test = string "if " ^^ group (nest 3 (pp_expr test))
+ and ifso = string "then" ^^ group (nest 2 (break 1 ^^ pp_expr ifso))
+ and ifnot = string "else" ^^ group (nest 2 (break 1 ^^ pp_expr ifnot))
+ in if kwd_else#is_ghost
+ then test ^/^ ifso
+ else test ^/^ ifso ^/^ ifnot
+
+and pp_annot_expr {value; _} =
+ let expr, _, type_expr = value.inside in
+ group (string "(" ^^ nest 1 (pp_expr expr ^/^ string ": "
+ ^^ pp_type_expr type_expr ^^ string ")"))
+
+and pp_logic_expr = function
+ BoolExpr e -> pp_bool_expr e
+| CompExpr e -> pp_comp_expr e
+
+and pp_bool_expr = function
+ Or e -> pp_bin_op "||" e
+| And e -> pp_bin_op "&&" e
+| Not e -> pp_un_op "not" e
+| True _ -> string "true"
+| False _ -> string "false"
+
+and pp_bin_op op {value; _} =
+ let {arg1; arg2; _} = value
+ and length = String.length op + 1 in
+ pp_expr arg1 ^/^ string (op ^ " ") ^^ nest length (pp_expr arg2)
+
+and pp_un_op op {value; _} =
+ string (op ^ " ") ^^ pp_expr value.arg
+
+and pp_comp_expr = function
+ Lt e -> pp_bin_op "<" e
+| Leq e -> pp_bin_op "<=" e
+| Gt e -> pp_bin_op ">" e
+| Geq e -> pp_bin_op ">=" e
+| Equal e -> pp_bin_op "=" e
+| Neq e -> pp_bin_op "<>" e
+
+and pp_arith_expr = function
+ Add e -> pp_bin_op "+" e
+| Sub e -> pp_bin_op "-" e
+| Mult e -> pp_bin_op "*" e
+| Div e -> pp_bin_op "/" e
+| Mod e -> pp_bin_op "mod" e
+| Neg e -> string "-" ^^ pp_expr e.value.arg
+| Int e -> pp_int e
+| Nat e -> pp_nat e
+| Mutez e -> pp_mutez e
+
+and pp_mutez {value; _} =
+ Z.to_string (snd value) ^ "mutez" |> string
+
+and pp_string_expr = function
+ Cat e -> pp_bin_op "^" e
+| String e -> pp_string e
+| Verbatim e -> pp_verbatim e
+
+and pp_list_expr = function
+ ECons e -> pp_bin_op "::" e
+| EListComp e -> group (pp_injection pp_expr e)
+
+and pp_injection :
+ 'a.('a -> document) -> 'a injection reg -> document =
+ fun printer {value; _} ->
+ let {compound; elements; _} = value in
+ let sep = string ";" ^^ break 1 in
+ let elements = Utils.sepseq_to_list elements in
+ let elements = separate_map sep printer elements in
+ match pp_compound compound with
+ None -> elements
+ | Some (opening, closing) ->
+ string opening ^^ nest 1 elements ^^ string closing
+
+and pp_compound = function
+ BeginEnd (start, _) ->
+ if start#is_ghost then None else Some ("begin","end")
+| Braces (start, _) ->
+ if start#is_ghost then None else Some ("{","}")
+| Brackets (start, _) ->
+ if start#is_ghost then None else Some ("[","]")
+
+and pp_constr_expr = function
+ ENone _ -> string "None"
+| ESomeApp a -> pp_some a
+| EConstrApp a -> pp_constr_app a
+
+and pp_some {value=_, e; _} =
+ prefix 4 1 (string "Some") (pp_expr e)
+
+and pp_constr_app {value; _} =
+ let constr, arg = value in
+ let constr = string constr.value in
+ match arg with
+ None -> constr
+ | Some e -> prefix 2 1 constr (pp_expr e)
+
+and pp_record_expr ne_inj = group (pp_ne_injection pp_field_assign ne_inj)
+
+and pp_field_assign {value; _} =
+ let {field_name; field_expr; _} = value in
+ prefix 2 1 (pp_ident field_name ^^ string " =") (pp_expr field_expr)
+
+and pp_ne_injection :
+ 'a.('a -> document) -> 'a ne_injection reg -> document =
+ fun printer {value; _} ->
+ let {compound; ne_elements; _} = value in
+ let elements = pp_nsepseq ";" printer ne_elements in
+ match pp_compound compound with
+ None -> elements
+ | Some (opening, closing) ->
+ string opening ^^ nest 1 elements ^^ string closing
+
+and pp_nsepseq :
+ 'a.string -> ('a -> document) -> ('a, t) Utils.nsepseq -> document =
+ fun sep printer elements ->
+ let elems = Utils.nsepseq_to_list elements
+ and sep = string sep ^^ break 1
+ in separate_map sep printer elems
+
+and pp_nseq : 'a.('a -> document) -> 'a Utils.nseq -> document =
+ fun printer (head, tail) -> separate_map (break 1) printer (head::tail)
+
+and pp_projection {value; _} =
+ let {struct_name; field_path; _} = value in
+ let fields = Utils.nsepseq_to_list field_path
+ and sep = string "." ^^ break 0 in
+ let fields = separate_map sep pp_selection fields in
+ group (pp_ident struct_name ^^ string "." ^^ break 0 ^^ fields)
+
+and pp_selection = function
+ FieldName v -> string v.value
+| Component cmp -> cmp.value |> snd |> Z.to_string |> string
+
+and pp_update {value; _} =
+ let {record; updates; _} = value in
+ let updates = group (pp_ne_injection pp_field_path_assign updates)
+ and record = pp_path record in
+ string "{" ^^ record ^^ string " with"
+ ^^ nest 2 (break 1 ^^ updates ^^ string "}")
+
+and pp_field_path_assign {value; _} =
+ let {field_path; field_expr; _} = value in
+ let path = pp_path field_path in
+ prefix 2 1 (path ^^ string " =") (pp_expr field_expr)
+
+and pp_path = function
+ Name v -> pp_ident v
+| Path p -> pp_projection p
+
+and pp_call_expr {value; _} =
+ let lambda, arguments = value in
+ let arguments = pp_nseq pp_expr arguments in
+ group (pp_expr lambda ^^ nest 2 (break 1 ^^ arguments))
+
+and pp_tuple_expr {value; _} =
+ let head, tail = value in
+ let rec app = function
+ [] -> empty
+ | [e] -> group (break 1 ^^ pp_expr e)
+ | e::items ->
+ group (break 1 ^^ pp_expr e ^^ string ",") ^^ app items
+ in if tail = []
+ then pp_expr head
+ else pp_expr head ^^ string "," ^^ app (List.map snd tail)
+
+and pp_par_expr e = pp_par pp_expr e
+
+and pp_let_in {value; _} =
+ let {binding; kwd_rec; body; attributes; _} = value in
+ let let_str =
+ match kwd_rec with
+ None -> "let "
+ | Some _ -> "let rec " in
+ let binding = pp_let_binding binding
+ and attr = pp_attributes attributes
+ in string let_str ^^ binding ^^ attr
+ ^^ hardline ^^ group (string "in " ^^ nest 3 (pp_expr body))
+
+and pp_fun {value; _} =
+ let {binders; lhs_type; body; _} = value in
+ let binders = pp_nseq pp_pattern binders
+ and annot =
+ match lhs_type with
+ None -> empty
+ | Some (_,e) ->
+ group (break 1 ^^ string ": " ^^ nest 2 (break 1 ^^ pp_type_expr e))
+ in group (string "fun " ^^ nest 4 binders ^^ annot
+ ^^ string " ->" ^^ nest 2 (break 1 ^^ pp_expr body))
+
+and pp_seq {value; _} =
+ let {compound; elements; _} = value in
+ let sep = string ";" ^^ hardline in
+ let elements = Utils.sepseq_to_list elements in
+ let elements = separate_map sep pp_expr elements in
+ match pp_compound compound with
+ None -> elements
+ | Some (opening, closing) ->
+ string opening
+ ^^ nest 2 (hardline ^^ elements) ^^ hardline
+ ^^ string closing
+
+and pp_type_expr = function
+ TProd t -> pp_cartesian t
+| TSum t -> pp_variants t
+| TRecord t -> pp_fields t
+| TApp t -> pp_type_app t
+| TFun t -> pp_fun_type t
+| TPar t -> pp_type_par t
+| TVar t -> pp_ident t
+| TString s -> pp_string s
+
+and pp_cartesian {value; _} =
+ let head, tail = value in
+ let rec app = function
+ [] -> empty
+ | [e] -> group (break 1 ^^ pp_type_expr e)
+ | e::items ->
+ group (break 1 ^^ pp_type_expr e ^^ string " *") ^^ app items
+ in pp_type_expr head ^^ string " *" ^^ app (List.map snd tail)
+
+and pp_variants {value; _} =
+ let head, tail = value in
+ let head = pp_variant head in
+ let head = if tail = [] then head else ifflat head (blank 2 ^^ head) in
+ let rest = List.map snd tail in
+ let app variant = break 1 ^^ string "| " ^^ pp_variant variant
+ in head ^^ concat_map app rest
+
+and pp_variant {value; _} =
+ let {constr; arg} = value in
+ match arg with
+ None -> pp_ident constr
+ | Some (_, e) ->
+ prefix 4 1 (pp_ident constr ^^ string " of") (pp_type_expr e)
+
+and pp_fields fields = group (pp_ne_injection pp_field_decl fields)
+
+and pp_field_decl {value; _} =
+ let {field_name; field_type; _} = value in
+ let name = pp_ident field_name in
+ let t_expr = pp_type_expr field_type
+ in prefix 2 1 (name ^^ string " :") t_expr
+
+and pp_type_app {value = ctor, tuple; _} =
+ pp_type_tuple tuple ^^ group (nest 2 (break 1 ^^ pp_type_constr ctor))
+
+and pp_type_tuple {value; _} =
+ let head, tail = value.inside in
+ let rec app = function
+ [] -> empty
+ | [e] -> group (break 1 ^^ pp_type_expr e)
+ | e::items ->
+ group (break 1 ^^ pp_type_expr e ^^ string ",") ^^ app items in
+ if tail = []
+ then pp_type_expr head
+ else
+ let components =
+ pp_type_expr head ^^ string "," ^^ app (List.map snd tail)
+ in string "(" ^^ nest 1 (components ^^ string ")")
+
+and pp_type_constr ctor = string ctor.value
+
+and pp_fun_type {value; _} =
+ let lhs, _, rhs = value in
+ group (pp_type_expr lhs ^^ string " ->" ^/^ pp_type_expr rhs)
+
+and pp_type_par t = pp_par pp_type_expr t
diff --git a/src/passes/01-parser/cameligo/Tests/pp.mligo b/src/passes/01-parser/cameligo/Tests/pp.mligo
index d84c270aa..e68de8216 100644
--- a/src/passes/01-parser/cameligo/Tests/pp.mligo
+++ b/src/passes/01-parser/cameligo/Tests/pp.mligo
@@ -1,29 +1,54 @@
-type q = {a: int; b: {c: string}}
-type r = int list
-type s = (int, address) map
-type t = int
-type u = {a: int; b: t * char}
-type v = int * (string * address)
-type w = timestamp * nat -> (string, address) map
-type x = A | B of t * int | C of int -> (string -> int)
+let patch_ (m : foobar) : foobar = Map.literal [(0, 5); (1, 6); (2, 7)]
-let x = 4
-let y : t = (if true then -3 + f x x else 0) - 1
-let f (x: int) y = (x : int)
+let (greet_num : int), (greeting : string), one_more_component =
+ different_types of_many_things + ffffff 124312
+
+type storage = int * int
+
+let main (n : int * storage)
+ : operation list * storage =
+ let x : int * int =
+ let x : int = 7
+ in x + n.0.asdasdasd.4, n.1.0 + n.1.1.1111111.aaaa.ddddddd.eeeeeee
+ in ([] : operation list), x
+
+let y : t =
+ if true then ffffffffff (-30000 * 10000 - 100000 + f x x y y y y - ((x / 4000) * -5), 103+5) else (10000 + 100000) / 10000000000
+type return = operation list * (storage * fsdgsdgf * sdfsdfsdf * ssdf)
+let xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx =
+ ttttttttttttt <= (aaaaaaaaaaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbbb)
+let x = tttt * ((fffffffff /55555555) - 3455 * 5135664) - 134 * (-4)
+type x = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | B
+let or_true (b : bool) : bool = bbbbbbbbbbbbb || true && cccccccccccccccccc
+type x = A | B of t * int | CCC of int -> (string -> int) -> (string, address, timestamp, int) map
+let c = CCCCCCCCCCCC (aaaaa, BBBBBBBBB aaaaaaaaaaaa)
+let e = Some (a, B b)
+type w = timestamp * nat -> (string, address) map -> t
+type v = int * (a_long_type_name * (another_long_one * address * and_so_on) * more_of_a_very_long_type)
+
+type r = int list
+type t = int
+type s = (int,address,a_long_type_name, more_of_a_very_long_type * foo_bar_baz) t
+type q = {a: int; b: {c: string}; c: timestamp * (address, string) big_map -> longer_type_name}
+type u = {a: int; b: t * char; c: int * (a_long_type_name * (another_long_one * address * and_so_on) * more_of_a_very_long_type)}
+let f xxxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyy zzzzzzzzzzz ttttt : type_annotation_which_is_very_verbose = this_too_short_a_variable
+let g : type_annotation_which_is_very_verbose = fun x y z t -> this_too_short_a_variable [@@inline]
+let yyyyyyyyyyy : a_very_long_and_specific_type_of_string = "foo and bar"
+let rec x (_, (yyyyyyyyyyyyyyyy: tttttttttttttttttttttttt), very_long_variable_to_trigger_a_break) = 4
+let y {xxxxxxxxx=(_,yyyyyyyy,more_components,another_one); zzzzzzz=34444444; ttttttt=3n} = xxxxxx
let z : (t) = y
-let w =
- match f 3 with
- None -> []
- | Some (1::[2;3]) -> [4;5]::[]
+let f (xxxxxxxxxxx: tttttttttttttt) y = (xxxxxxxxxxxx : tttttttttttttttttt)
let n : nat = 0n
let a = A
let b = B a
-let c = C (a, B (a))
let d = None
-let e = Some (a, B b)
-let z = z.1.2
-let v = "hello" ^ "world" ^ "!"
-let w = Map.literal [(1,"1"); (2,"2")]
-
-let r = { field = 0}
-let r = { r with field = 42}
+let z = let v = "hello" ^ "world" ^ "!" in v
+let r = { field = 0; another = 11111111111111111; and_another_one = "dddddd"}
+let r = { r with field = 42; another = 11111111111111111; and_another_one = "dddddddddddddddddddddd"}
+let w = Map.literal [(11111111111111,"11111111111111"); (22222222222,"22222222222222222"); (1234567890,"1234567890")]
+let z = z.1.a.0.4.c.6.7.8.9.cccccccccccc.ccccccccccccccccc.ddddddddddddddddd.0.1.2
+let y : t = (if true then -30000000000000 + f x x y y y y else 10000000000000000000) - 1
+let w =
+ match f 3 with
+ None -> []
+ | Some (1::[2;3;4;5;6]) -> [4;5]::[]
diff --git a/src/passes/01-parser/cameligo/dune b/src/passes/01-parser/cameligo/dune
index 02b8f3663..ff5896de8 100644
--- a/src/passes/01-parser/cameligo/dune
+++ b/src/passes/01-parser/cameligo/dune
@@ -15,8 +15,10 @@
(name parser_cameligo)
(public_name ligo.parser.cameligo)
(modules
- Scoping AST cameligo Parser ParserLog LexToken ParErr)
+ Scoping AST cameligo Parser ParserLog LexToken ParErr Pretty)
(libraries
+ pprint
+ terminal_size
menhirLib
parser_shared
str
@@ -26,8 +28,8 @@
(pps bisect_ppx --conditional))
(flags (:standard -open Parser_shared -open Simple_utils)))
-;; Build of the unlexer (for covering the
-;; error states of the LR automaton)
+;; Build of the unlexer (for covering the error states of the LR
+;; automaton)
(executable
(name Unlexer)
diff --git a/src/passes/01-parser/cameligo/error.messages.checked-in b/src/passes/01-parser/cameligo/error.messages.checked-in
index 58869eaf3..14c31bc5f 100644
--- a/src/passes/01-parser/cameligo/error.messages.checked-in
+++ b/src/passes/01-parser/cameligo/error.messages.checked-in
@@ -1,8 +1,8 @@
interactive_expr: Begin Fun WILD ARROW Bytes SEMI With
##
-## Ends in an error in state: 483.
+## Ends in an error in state: 485.
##
-## sequence -> Begin option(series) . End [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## sequence -> Begin option(series) . End [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## Begin option(series)
@@ -12,7 +12,7 @@ interactive_expr: Begin Fun WILD ARROW Bytes SEMI With
interactive_expr: Begin Fun WILD ARROW With
##
-## Ends in an error in state: 465.
+## Ends in an error in state: 467.
##
## fun_expr(seq_expr) -> Fun nseq(irrefutable) ARROW . seq_expr [ SEMI End ]
##
@@ -24,7 +24,7 @@ interactive_expr: Begin Fun WILD ARROW With
interactive_expr: Begin Fun With
##
-## Ends in an error in state: 463.
+## Ends in an error in state: 465.
##
## fun_expr(seq_expr) -> Fun . nseq(irrefutable) ARROW seq_expr [ SEMI End ]
##
@@ -34,9 +34,9 @@ interactive_expr: Begin Fun With
-interactive_expr: Begin If True Then Fun WILD ARROW With
+interactive_expr: Begin If Verbatim Then Fun WILD ARROW With
##
-## Ends in an error in state: 452.
+## Ends in an error in state: 454.
##
## fun_expr(closed_if) -> Fun nseq(irrefutable) ARROW . closed_if [ Else ]
##
@@ -46,9 +46,9 @@ interactive_expr: Begin If True Then Fun WILD ARROW With
-interactive_expr: Begin If True Then Fun With
+interactive_expr: Begin If Verbatim Then Fun With
##
-## Ends in an error in state: 450.
+## Ends in an error in state: 452.
##
## fun_expr(closed_if) -> Fun . nseq(irrefutable) ARROW closed_if [ Else ]
##
@@ -58,9 +58,9 @@ interactive_expr: Begin If True Then Fun With
-interactive_expr: Begin If True Then If True Then True COMMA Bytes With
+interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim COMMA Bytes With
##
-## Ends in an error in state: 455.
+## Ends in an error in state: 457.
##
## if_then_else(closed_if) -> If expr Then closed_if . Else closed_if [ Else ]
##
@@ -71,28 +71,28 @@ interactive_expr: Begin If True Then If True Then True COMMA Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 342, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level
-## In state 341, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA)
-## In state 218, spurious reduction of production tuple_expr -> tuple(disj_expr_level)
-## In state 453, spurious reduction of production base_expr(closed_if) -> tuple_expr
-## In state 353, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr(closed_if)
-## In state 352, spurious reduction of production closed_if -> base_if_then_else__open(closed_if)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 344, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level
+## In state 343, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA)
+## In state 220, spurious reduction of production tuple_expr -> tuple(disj_expr_level)
+## In state 455, spurious reduction of production base_expr(closed_if) -> tuple_expr
+## In state 355, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr(closed_if)
+## In state 354, spurious reduction of production closed_if -> base_if_then_else__open(closed_if)
##
-interactive_expr: Begin If True Then If True Then True Else With
+interactive_expr: Begin If Verbatim Then If Verbatim Then Verbatim Else With
##
-## Ends in an error in state: 456.
+## Ends in an error in state: 458.
##
## if_then_else(closed_if) -> If expr Then closed_if Else . closed_if [ Else ]
##
@@ -102,9 +102,9 @@ interactive_expr: Begin If True Then If True Then True Else With
-interactive_expr: Begin If True Then If True Then With
+interactive_expr: Begin If Verbatim Then If Verbatim Then With
##
-## Ends in an error in state: 449.
+## Ends in an error in state: 451.
##
## if_then_else(closed_if) -> If expr Then . closed_if Else closed_if [ Else ]
##
@@ -114,9 +114,9 @@ interactive_expr: Begin If True Then If True Then With
-interactive_expr: Begin If True Then If True With
+interactive_expr: Begin If Verbatim Then If Verbatim With
##
-## Ends in an error in state: 448.
+## Ends in an error in state: 450.
##
## if_then_else(closed_if) -> If expr . Then closed_if Else closed_if [ Else ]
##
@@ -127,25 +127,25 @@ interactive_expr: Begin If True Then If True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: Begin If True Then If With
+interactive_expr: Begin If Verbatim Then If With
##
-## Ends in an error in state: 447.
+## Ends in an error in state: 449.
##
## if_then_else(closed_if) -> If . expr Then closed_if Else closed_if [ Else ]
##
@@ -155,9 +155,9 @@ interactive_expr: Begin If True Then If With
-interactive_expr: Begin If True Then Let Rec WILD EQ Bytes Attr Type
+interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 445.
+## Ends in an error in state: 447.
##
## let_expr(closed_if) -> Let Rec let_binding seq(Attr) . In closed_if [ Else ]
##
@@ -168,15 +168,15 @@ interactive_expr: Begin If True Then Let Rec WILD EQ Bytes Attr Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
-interactive_expr: Begin If True Then Let Rec WILD EQ Bytes In With
+interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes In With
##
-## Ends in an error in state: 446.
+## Ends in an error in state: 448.
##
## let_expr(closed_if) -> Let Rec let_binding seq(Attr) In . closed_if [ Else ]
##
@@ -186,9 +186,9 @@ interactive_expr: Begin If True Then Let Rec WILD EQ Bytes In With
-interactive_expr: Begin If True Then Let Rec WILD EQ Bytes With
+interactive_expr: Begin If Verbatim Then Let Rec WILD EQ Bytes With
##
-## Ends in an error in state: 444.
+## Ends in an error in state: 446.
##
## let_expr(closed_if) -> Let Rec let_binding . seq(Attr) In closed_if [ Else ]
##
@@ -199,26 +199,26 @@ interactive_expr: Begin If True Then Let Rec WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
-interactive_expr: Begin If True Then Let Rec With
+interactive_expr: Begin If Verbatim Then Let Rec With
##
-## Ends in an error in state: 443.
+## Ends in an error in state: 445.
##
## let_expr(closed_if) -> Let Rec . let_binding seq(Attr) In closed_if [ Else ]
##
@@ -228,9 +228,9 @@ interactive_expr: Begin If True Then Let Rec With
-interactive_expr: Begin If True Then Let WILD EQ Bytes Attr Type
+interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 458.
+## Ends in an error in state: 460.
##
## let_expr(closed_if) -> Let let_binding seq(Attr) . In closed_if [ Else ]
##
@@ -241,15 +241,15 @@ interactive_expr: Begin If True Then Let WILD EQ Bytes Attr Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
-interactive_expr: Begin If True Then Let WILD EQ Bytes In With
+interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes In With
##
-## Ends in an error in state: 459.
+## Ends in an error in state: 461.
##
## let_expr(closed_if) -> Let let_binding seq(Attr) In . closed_if [ Else ]
##
@@ -259,9 +259,9 @@ interactive_expr: Begin If True Then Let WILD EQ Bytes In With
-interactive_expr: Begin If True Then Let WILD EQ Bytes With
+interactive_expr: Begin If Verbatim Then Let WILD EQ Bytes With
##
-## Ends in an error in state: 457.
+## Ends in an error in state: 459.
##
## let_expr(closed_if) -> Let let_binding . seq(Attr) In closed_if [ Else ]
##
@@ -272,26 +272,26 @@ interactive_expr: Begin If True Then Let WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
-interactive_expr: Begin If True Then Let With
+interactive_expr: Begin If Verbatim Then Let With
##
-## Ends in an error in state: 442.
+## Ends in an error in state: 444.
##
## let_expr(closed_if) -> Let . let_binding seq(Attr) In closed_if [ Else ]
## let_expr(closed_if) -> Let . Rec let_binding seq(Attr) In closed_if [ Else ]
@@ -302,9 +302,9 @@ interactive_expr: Begin If True Then Let With
-interactive_expr: Begin If True Then Match True Type
+interactive_expr: Begin If Verbatim Then Match Verbatim Type
##
-## Ends in an error in state: 264.
+## Ends in an error in state: 266.
##
## match_expr(base_if_then_else) -> Match expr . With option(VBAR) cases(base_if_then_else) [ Else ]
##
@@ -315,25 +315,25 @@ interactive_expr: Begin If True Then Match True Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: Begin If True Then Match True With VBAR Begin
+interactive_expr: Begin If Verbatim Then Match Verbatim With VBAR Begin
##
-## Ends in an error in state: 266.
+## Ends in an error in state: 268.
##
## match_expr(base_if_then_else) -> Match expr With option(VBAR) . cases(base_if_then_else) [ Else ]
##
@@ -343,9 +343,9 @@ interactive_expr: Begin If True Then Match True With VBAR Begin
-interactive_expr: Begin If True Then Match True With WILD ARROW Bytes With
+interactive_expr: Begin If Verbatim Then Match Verbatim With WILD ARROW Bytes With
##
-## Ends in an error in state: 404.
+## Ends in an error in state: 406.
##
## cases(base_cond) -> cases(base_cond) . VBAR case_clause(base_cond) [ VBAR ]
## cases(base_if_then_else) -> cases(base_cond) . VBAR case_clause(base_if_then_else) [ Else ]
@@ -357,27 +357,27 @@ interactive_expr: Begin If True Then Match True With WILD ARROW Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 390, spurious reduction of production base_expr(base_cond) -> disj_expr_level
-## In state 354, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond)
-## In state 355, spurious reduction of production base_cond -> base_cond__open(base_cond)
-## In state 401, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond
-## In state 409, spurious reduction of production cases(base_cond) -> case_clause(base_cond)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 392, spurious reduction of production base_expr(base_cond) -> disj_expr_level
+## In state 356, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond)
+## In state 357, spurious reduction of production base_cond -> base_cond__open(base_cond)
+## In state 403, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond
+## In state 411, spurious reduction of production cases(base_cond) -> case_clause(base_cond)
##
-interactive_expr: Begin If True Then Match True With With
+interactive_expr: Begin If Verbatim Then Match Verbatim With With
##
-## Ends in an error in state: 265.
+## Ends in an error in state: 267.
##
## match_expr(base_if_then_else) -> Match expr With . option(VBAR) cases(base_if_then_else) [ Else ]
##
@@ -387,9 +387,9 @@ interactive_expr: Begin If True Then Match True With With
-interactive_expr: Begin If True Then Match With
+interactive_expr: Begin If Verbatim Then Match With
##
-## Ends in an error in state: 263.
+## Ends in an error in state: 265.
##
## match_expr(base_if_then_else) -> Match . expr With option(VBAR) cases(base_if_then_else) [ Else ]
##
@@ -399,9 +399,9 @@ interactive_expr: Begin If True Then Match With
-interactive_expr: Begin If True Then True COMMA Bytes With
+interactive_expr: Begin If Verbatim Then Verbatim COMMA Bytes With
##
-## Ends in an error in state: 460.
+## Ends in an error in state: 462.
##
## if_then_else(seq_expr) -> If expr Then closed_if . Else seq_expr [ SEMI End ]
##
@@ -412,28 +412,28 @@ interactive_expr: Begin If True Then True COMMA Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 342, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level
-## In state 341, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA)
-## In state 218, spurious reduction of production tuple_expr -> tuple(disj_expr_level)
-## In state 453, spurious reduction of production base_expr(closed_if) -> tuple_expr
-## In state 353, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr(closed_if)
-## In state 352, spurious reduction of production closed_if -> base_if_then_else__open(closed_if)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 344, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level
+## In state 343, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA)
+## In state 220, spurious reduction of production tuple_expr -> tuple(disj_expr_level)
+## In state 455, spurious reduction of production base_expr(closed_if) -> tuple_expr
+## In state 355, spurious reduction of production base_if_then_else__open(closed_if) -> base_expr(closed_if)
+## In state 354, spurious reduction of production closed_if -> base_if_then_else__open(closed_if)
##
-interactive_expr: Begin If True Then True Else With
+interactive_expr: Begin If Verbatim Then Verbatim Else With
##
-## Ends in an error in state: 461.
+## Ends in an error in state: 463.
##
## if_then_else(seq_expr) -> If expr Then closed_if Else . seq_expr [ SEMI End ]
##
@@ -443,9 +443,9 @@ interactive_expr: Begin If True Then True Else With
-interactive_expr: Begin If True Then True With
+interactive_expr: Begin If Verbatim Then Verbatim With
##
-## Ends in an error in state: 454.
+## Ends in an error in state: 456.
##
## base_expr(closed_if) -> disj_expr_level . [ Else ]
## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ Or Else COMMA BOOL_OR ]
@@ -459,22 +459,22 @@ interactive_expr: Begin If True Then True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
##
-interactive_expr: Begin If True Then With
+interactive_expr: Begin If Verbatim Then With
##
-## Ends in an error in state: 441.
+## Ends in an error in state: 443.
##
## if_then_else(seq_expr) -> If expr Then . closed_if Else seq_expr [ SEMI End ]
##
@@ -484,9 +484,9 @@ interactive_expr: Begin If True Then With
-interactive_expr: Begin If True With
+interactive_expr: Begin If Verbatim With
##
-## Ends in an error in state: 440.
+## Ends in an error in state: 442.
##
## if_then_else(seq_expr) -> If expr . Then closed_if Else seq_expr [ SEMI End ]
##
@@ -497,25 +497,25 @@ interactive_expr: Begin If True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
interactive_expr: Begin If With
##
-## Ends in an error in state: 439.
+## Ends in an error in state: 441.
##
## if_then_else(seq_expr) -> If . expr Then closed_if Else seq_expr [ SEMI End ]
##
@@ -527,7 +527,7 @@ interactive_expr: Begin If With
interactive_expr: Begin Let Rec WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 437.
+## Ends in an error in state: 439.
##
## last_expr -> Let Rec let_binding seq(Attr) . In series [ End ]
##
@@ -538,15 +538,15 @@ interactive_expr: Begin Let Rec WILD EQ Bytes Attr Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
interactive_expr: Begin Let Rec WILD EQ Bytes In With
##
-## Ends in an error in state: 438.
+## Ends in an error in state: 440.
##
## last_expr -> Let Rec let_binding seq(Attr) In . series [ End ]
##
@@ -558,7 +558,7 @@ interactive_expr: Begin Let Rec WILD EQ Bytes In With
interactive_expr: Begin Let Rec WILD EQ Bytes With
##
-## Ends in an error in state: 436.
+## Ends in an error in state: 438.
##
## last_expr -> Let Rec let_binding . seq(Attr) In series [ End ]
##
@@ -569,26 +569,26 @@ interactive_expr: Begin Let Rec WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
interactive_expr: Begin Let Rec With
##
-## Ends in an error in state: 435.
+## Ends in an error in state: 437.
##
## last_expr -> Let Rec . let_binding seq(Attr) In series [ End ]
##
@@ -600,7 +600,7 @@ interactive_expr: Begin Let Rec With
interactive_expr: Begin Let WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 479.
+## Ends in an error in state: 481.
##
## last_expr -> Let let_binding seq(Attr) . In series [ End ]
##
@@ -611,15 +611,15 @@ interactive_expr: Begin Let WILD EQ Bytes Attr Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
interactive_expr: Begin Let WILD EQ Bytes In With
##
-## Ends in an error in state: 480.
+## Ends in an error in state: 482.
##
## last_expr -> Let let_binding seq(Attr) In . series [ End ]
##
@@ -631,7 +631,7 @@ interactive_expr: Begin Let WILD EQ Bytes In With
interactive_expr: Begin Let WILD EQ Bytes With
##
-## Ends in an error in state: 478.
+## Ends in an error in state: 480.
##
## last_expr -> Let let_binding . seq(Attr) In series [ End ]
##
@@ -642,26 +642,26 @@ interactive_expr: Begin Let WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
interactive_expr: Begin Let With
##
-## Ends in an error in state: 434.
+## Ends in an error in state: 436.
##
## last_expr -> Let . let_binding seq(Attr) In series [ End ]
## last_expr -> Let . Rec let_binding seq(Attr) In series [ End ]
@@ -672,9 +672,9 @@ interactive_expr: Begin Let With
-interactive_expr: Begin Match True Type
+interactive_expr: Begin Match Verbatim Type
##
-## Ends in an error in state: 240.
+## Ends in an error in state: 242.
##
## match_expr(seq_expr) -> Match expr . With option(VBAR) cases(seq_expr) [ SEMI End ]
##
@@ -685,25 +685,25 @@ interactive_expr: Begin Match True Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: Begin Match True With VBAR Begin
+interactive_expr: Begin Match Verbatim With VBAR Begin
##
-## Ends in an error in state: 243.
+## Ends in an error in state: 245.
##
## match_expr(seq_expr) -> Match expr With option(VBAR) . cases(seq_expr) [ SEMI End ]
##
@@ -713,9 +713,9 @@ interactive_expr: Begin Match True With VBAR Begin
-interactive_expr: Begin Match True With WILD ARROW Bytes VBAR With
+interactive_expr: Begin Match Verbatim With WILD ARROW Bytes VBAR With
##
-## Ends in an error in state: 431.
+## Ends in an error in state: 433.
##
## cases(base_cond) -> cases(base_cond) VBAR . case_clause(base_cond) [ VBAR ]
## cases(seq_expr) -> cases(base_cond) VBAR . case_clause(seq_expr) [ SEMI End ]
@@ -726,9 +726,9 @@ interactive_expr: Begin Match True With WILD ARROW Bytes VBAR With
-interactive_expr: Begin Match True With WILD ARROW If True Then True Else With
+interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim Then Verbatim Else With
##
-## Ends in an error in state: 424.
+## Ends in an error in state: 426.
##
## if_then_else(base_cond) -> If expr Then closed_if Else . base_cond [ VBAR ]
## if_then_else(seq_expr) -> If expr Then closed_if Else . seq_expr [ SEMI End ]
@@ -739,9 +739,9 @@ interactive_expr: Begin Match True With WILD ARROW If True Then True Else With
-interactive_expr: Begin Match True With WILD ARROW If True Then With
+interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim Then With
##
-## Ends in an error in state: 422.
+## Ends in an error in state: 424.
##
## if_then(base_cond) -> If expr Then . base_cond [ VBAR ]
## if_then_else(base_cond) -> If expr Then . closed_if Else base_cond [ VBAR ]
@@ -753,9 +753,9 @@ interactive_expr: Begin Match True With WILD ARROW If True Then With
-interactive_expr: Begin Match True With WILD ARROW If True With
+interactive_expr: Begin Match Verbatim With WILD ARROW If Verbatim With
##
-## Ends in an error in state: 421.
+## Ends in an error in state: 423.
##
## if_then(base_cond) -> If expr . Then base_cond [ VBAR ]
## if_then_else(base_cond) -> If expr . Then closed_if Else base_cond [ VBAR ]
@@ -768,25 +768,25 @@ interactive_expr: Begin Match True With WILD ARROW If True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: Begin Match True With WILD ARROW If With
+interactive_expr: Begin Match Verbatim With WILD ARROW If With
##
-## Ends in an error in state: 420.
+## Ends in an error in state: 422.
##
## if_then(base_cond) -> If . expr Then base_cond [ VBAR ]
## if_then_else(base_cond) -> If . expr Then closed_if Else base_cond [ VBAR ]
@@ -798,9 +798,9 @@ interactive_expr: Begin Match True With WILD ARROW If With
-interactive_expr: Begin Match True With WILD ARROW True COMMA Bytes With
+interactive_expr: Begin Match Verbatim With WILD ARROW Verbatim COMMA Bytes With
##
-## Ends in an error in state: 430.
+## Ends in an error in state: 432.
##
## cases(base_cond) -> cases(base_cond) . VBAR case_clause(base_cond) [ VBAR ]
## cases(seq_expr) -> cases(base_cond) . VBAR case_clause(seq_expr) [ SEMI End ]
@@ -812,30 +812,30 @@ interactive_expr: Begin Match True With WILD ARROW True COMMA Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 342, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level
-## In state 341, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA)
-## In state 218, spurious reduction of production tuple_expr -> tuple(disj_expr_level)
-## In state 415, spurious reduction of production base_expr(base_cond) -> tuple_expr
-## In state 354, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond)
-## In state 355, spurious reduction of production base_cond -> base_cond__open(base_cond)
-## In state 401, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond
-## In state 409, spurious reduction of production cases(base_cond) -> case_clause(base_cond)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 344, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level
+## In state 343, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA)
+## In state 220, spurious reduction of production tuple_expr -> tuple(disj_expr_level)
+## In state 417, spurious reduction of production base_expr(base_cond) -> tuple_expr
+## In state 356, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond)
+## In state 357, spurious reduction of production base_cond -> base_cond__open(base_cond)
+## In state 403, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond
+## In state 411, spurious reduction of production cases(base_cond) -> case_clause(base_cond)
##
-interactive_expr: Begin Match True With WILD ARROW True With
+interactive_expr: Begin Match Verbatim With WILD ARROW Verbatim With
##
-## Ends in an error in state: 427.
+## Ends in an error in state: 429.
##
## base_expr(base_cond) -> disj_expr_level . [ VBAR ]
## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ VBAR SEMI Or End COMMA BOOL_OR ]
@@ -850,22 +850,22 @@ interactive_expr: Begin Match True With WILD ARROW True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
##
-interactive_expr: Begin Match True With WILD ARROW With
+interactive_expr: Begin Match Verbatim With WILD ARROW With
##
-## Ends in an error in state: 254.
+## Ends in an error in state: 256.
##
## case_clause(base_cond) -> pattern ARROW . base_cond [ VBAR ]
## case_clause(seq_expr) -> pattern ARROW . seq_expr [ SEMI End ]
@@ -876,9 +876,9 @@ interactive_expr: Begin Match True With WILD ARROW With
-interactive_expr: Begin Match True With WILD CONS Bytes SEMI
+interactive_expr: Begin Match Verbatim With WILD CONS Bytes SEMI
##
-## Ends in an error in state: 253.
+## Ends in an error in state: 255.
##
## case_clause(base_cond) -> pattern . ARROW base_cond [ VBAR ]
## case_clause(seq_expr) -> pattern . ARROW seq_expr [ SEMI End ]
@@ -890,15 +890,15 @@ interactive_expr: Begin Match True With WILD CONS Bytes SEMI
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 96, spurious reduction of production tail -> sub_pattern
-## In state 247, spurious reduction of production pattern -> sub_pattern CONS tail
+## In state 97, spurious reduction of production tail -> sub_pattern
+## In state 249, spurious reduction of production pattern -> sub_pattern CONS tail
##
-interactive_expr: Begin Match True With With
+interactive_expr: Begin Match Verbatim With With
##
-## Ends in an error in state: 241.
+## Ends in an error in state: 243.
##
## match_expr(seq_expr) -> Match expr With . option(VBAR) cases(seq_expr) [ SEMI End ]
##
@@ -910,7 +910,7 @@ interactive_expr: Begin Match True With With
interactive_expr: Begin Match With
##
-## Ends in an error in state: 203.
+## Ends in an error in state: 205.
##
## match_expr(seq_expr) -> Match . expr With option(VBAR) cases(seq_expr) [ SEMI End ]
##
@@ -920,9 +920,9 @@ interactive_expr: Begin Match With
-interactive_expr: Begin True SEMI With
+interactive_expr: Begin Verbatim SEMI With
##
-## Ends in an error in state: 469.
+## Ends in an error in state: 471.
##
## option(SEMI) -> SEMI . [ End ]
## series -> seq_expr SEMI . series [ End ]
@@ -933,9 +933,9 @@ interactive_expr: Begin True SEMI With
-interactive_expr: Begin True With
+interactive_expr: Begin Verbatim With
##
-## Ends in an error in state: 462.
+## Ends in an error in state: 464.
##
## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ SEMI Or End BOOL_OR ]
## bin_op(disj_expr_level,Or,conj_expr_level) -> disj_expr_level . Or conj_expr_level [ SEMI Or End BOOL_OR ]
@@ -948,24 +948,24 @@ interactive_expr: Begin True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
##
interactive_expr: Begin With
##
-## Ends in an error in state: 202.
+## Ends in an error in state: 204.
##
-## sequence -> Begin . option(series) End [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## sequence -> Begin . option(series) End [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## Begin
@@ -975,7 +975,7 @@ interactive_expr: Begin With
interactive_expr: C_None WILD
##
-## Ends in an error in state: 219.
+## Ends in an error in state: 221.
##
## add_expr_level -> mult_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level . Mod unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
@@ -990,7 +990,7 @@ interactive_expr: C_None WILD
interactive_expr: C_Some With
##
-## Ends in an error in state: 204.
+## Ends in an error in state: 206.
##
## constr_expr -> C_Some . core_expr [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
##
@@ -1002,9 +1002,9 @@ interactive_expr: C_Some With
interactive_expr: Constr DOT Ident DOT With
##
-## Ends in an error in state: 197.
+## Ends in an error in state: 199.
##
-## projection -> Constr DOT Ident DOT . nsepseq(selection,DOT) [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## projection -> Constr DOT Ident DOT . nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## Constr DOT Ident DOT
@@ -1014,10 +1014,10 @@ interactive_expr: Constr DOT Ident DOT With
interactive_expr: Constr DOT Ident WILD
##
-## Ends in an error in state: 196.
+## Ends in an error in state: 198.
##
-## module_fun -> Ident . [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
-## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## module_fun -> Ident . [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## Constr DOT Ident
@@ -1027,10 +1027,10 @@ interactive_expr: Constr DOT Ident WILD
interactive_expr: Constr DOT With
##
-## Ends in an error in state: 194.
+## Ends in an error in state: 196.
##
-## module_field -> Constr DOT . module_fun [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
-## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## module_field -> Constr DOT . module_fun [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## Constr DOT
@@ -1040,12 +1040,12 @@ interactive_expr: Constr DOT With
interactive_expr: Constr WILD
##
-## Ends in an error in state: 193.
+## Ends in an error in state: 195.
##
## constr_expr -> Constr . core_expr [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
## constr_expr -> Constr . [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
-## module_field -> Constr . DOT module_fun [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
-## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## module_field -> Constr . DOT module_fun [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## Constr
@@ -1055,7 +1055,7 @@ interactive_expr: Constr WILD
interactive_expr: Fun WILD ARROW With
##
-## Ends in an error in state: 191.
+## Ends in an error in state: 193.
##
## fun_expr(expr) -> Fun nseq(irrefutable) ARROW . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -1067,7 +1067,7 @@ interactive_expr: Fun WILD ARROW With
interactive_expr: Fun WILD RPAR
##
-## Ends in an error in state: 357.
+## Ends in an error in state: 359.
##
## nseq(irrefutable) -> irrefutable . seq(irrefutable) [ ARROW ]
##
@@ -1078,14 +1078,14 @@ interactive_expr: Fun WILD RPAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 135, spurious reduction of production irrefutable -> sub_irrefutable
+## In state 136, spurious reduction of production irrefutable -> sub_irrefutable
##
interactive_expr: Fun WILD WILD RPAR
##
-## Ends in an error in state: 359.
+## Ends in an error in state: 361.
##
## seq(irrefutable) -> irrefutable . seq(irrefutable) [ ARROW ]
##
@@ -1096,14 +1096,14 @@ interactive_expr: Fun WILD WILD RPAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 135, spurious reduction of production irrefutable -> sub_irrefutable
+## In state 136, spurious reduction of production irrefutable -> sub_irrefutable
##
interactive_expr: Fun With
##
-## Ends in an error in state: 189.
+## Ends in an error in state: 191.
##
## fun_expr(expr) -> Fun . nseq(irrefutable) ARROW expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -1115,9 +1115,9 @@ interactive_expr: Fun With
interactive_expr: Ident DOT Int DOT With
##
-## Ends in an error in state: 186.
+## Ends in an error in state: 188.
##
-## nsepseq(selection,DOT) -> selection DOT . nsepseq(selection,DOT) [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## nsepseq(selection,DOT) -> selection DOT . nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## selection DOT
@@ -1127,10 +1127,10 @@ interactive_expr: Ident DOT Int DOT With
interactive_expr: Ident DOT Int WILD
##
-## Ends in an error in state: 185.
+## Ends in an error in state: 187.
##
-## nsepseq(selection,DOT) -> selection . [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
-## nsepseq(selection,DOT) -> selection . DOT nsepseq(selection,DOT) [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## nsepseq(selection,DOT) -> selection . [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## nsepseq(selection,DOT) -> selection . DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## selection
@@ -1140,9 +1140,9 @@ interactive_expr: Ident DOT Int WILD
interactive_expr: Ident DOT With
##
-## Ends in an error in state: 182.
+## Ends in an error in state: 184.
##
-## projection -> Ident DOT . nsepseq(selection,DOT) [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## projection -> Ident DOT . nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## Ident DOT
@@ -1152,10 +1152,10 @@ interactive_expr: Ident DOT With
interactive_expr: Ident WILD
##
-## Ends in an error in state: 181.
+## Ends in an error in state: 183.
##
-## core_expr -> Ident . [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
-## projection -> Ident . DOT nsepseq(selection,DOT) [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## core_expr -> Ident . [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## projection -> Ident . DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## Ident
@@ -1163,9 +1163,9 @@ interactive_expr: Ident WILD
-interactive_expr: If True Then Fun WILD ARROW With
+interactive_expr: If Verbatim Then Fun WILD ARROW With
##
-## Ends in an error in state: 504.
+## Ends in an error in state: 506.
##
## fun_expr(closed_if) -> Fun nseq(irrefutable) ARROW . closed_if [ Else ]
## fun_expr(expr) -> Fun nseq(irrefutable) ARROW . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1176,9 +1176,9 @@ interactive_expr: If True Then Fun WILD ARROW With
-interactive_expr: If True Then Fun With
+interactive_expr: If Verbatim Then Fun With
##
-## Ends in an error in state: 502.
+## Ends in an error in state: 504.
##
## fun_expr(closed_if) -> Fun . nseq(irrefutable) ARROW closed_if [ Else ]
## fun_expr(expr) -> Fun . nseq(irrefutable) ARROW expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1189,9 +1189,9 @@ interactive_expr: If True Then Fun With
-interactive_expr: If True Then If True Then True Else With
+interactive_expr: If Verbatim Then If Verbatim Then Verbatim Else With
##
-## Ends in an error in state: 509.
+## Ends in an error in state: 511.
##
## if_then_else(closed_if) -> If expr Then closed_if Else . closed_if [ Else ]
## if_then_else(expr) -> If expr Then closed_if Else . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1202,9 +1202,9 @@ interactive_expr: If True Then If True Then True Else With
-interactive_expr: If True Then If True Then With
+interactive_expr: If Verbatim Then If Verbatim Then With
##
-## Ends in an error in state: 501.
+## Ends in an error in state: 503.
##
## if_then(expr) -> If expr Then . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(closed_if) -> If expr Then . closed_if Else closed_if [ Else ]
@@ -1216,9 +1216,9 @@ interactive_expr: If True Then If True Then With
-interactive_expr: If True Then If True With
+interactive_expr: If Verbatim Then If Verbatim With
##
-## Ends in an error in state: 500.
+## Ends in an error in state: 502.
##
## if_then(expr) -> If expr . Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(closed_if) -> If expr . Then closed_if Else closed_if [ Else ]
@@ -1231,25 +1231,25 @@ interactive_expr: If True Then If True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: If True Then If With
+interactive_expr: If Verbatim Then If With
##
-## Ends in an error in state: 499.
+## Ends in an error in state: 501.
##
## if_then(expr) -> If . expr Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(closed_if) -> If . expr Then closed_if Else closed_if [ Else ]
@@ -1261,9 +1261,9 @@ interactive_expr: If True Then If With
-interactive_expr: If True Then Let Rec WILD EQ Bytes Attr Type
+interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 497.
+## Ends in an error in state: 499.
##
## let_expr(closed_if) -> Let Rec let_binding seq(Attr) . In closed_if [ Else ]
## let_expr(expr) -> Let Rec let_binding seq(Attr) . In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1275,15 +1275,15 @@ interactive_expr: If True Then Let Rec WILD EQ Bytes Attr Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
-interactive_expr: If True Then Let Rec WILD EQ Bytes In With
+interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes In With
##
-## Ends in an error in state: 498.
+## Ends in an error in state: 500.
##
## let_expr(closed_if) -> Let Rec let_binding seq(Attr) In . closed_if [ Else ]
## let_expr(expr) -> Let Rec let_binding seq(Attr) In . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1294,9 +1294,9 @@ interactive_expr: If True Then Let Rec WILD EQ Bytes In With
-interactive_expr: If True Then Let Rec WILD EQ Bytes With
+interactive_expr: If Verbatim Then Let Rec WILD EQ Bytes With
##
-## Ends in an error in state: 496.
+## Ends in an error in state: 498.
##
## let_expr(closed_if) -> Let Rec let_binding . seq(Attr) In closed_if [ Else ]
## let_expr(expr) -> Let Rec let_binding . seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1308,26 +1308,26 @@ interactive_expr: If True Then Let Rec WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
-interactive_expr: If True Then Let Rec With
+interactive_expr: If Verbatim Then Let Rec With
##
-## Ends in an error in state: 495.
+## Ends in an error in state: 497.
##
## let_expr(closed_if) -> Let Rec . let_binding seq(Attr) In closed_if [ Else ]
## let_expr(expr) -> Let Rec . let_binding seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1338,9 +1338,9 @@ interactive_expr: If True Then Let Rec With
-interactive_expr: If True Then Let WILD EQ Bytes Attr Type
+interactive_expr: If Verbatim Then Let WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 513.
+## Ends in an error in state: 515.
##
## let_expr(closed_if) -> Let let_binding seq(Attr) . In closed_if [ Else ]
## let_expr(expr) -> Let let_binding seq(Attr) . In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1352,15 +1352,15 @@ interactive_expr: If True Then Let WILD EQ Bytes Attr Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
-interactive_expr: If True Then Let WILD EQ Bytes In With
+interactive_expr: If Verbatim Then Let WILD EQ Bytes In With
##
-## Ends in an error in state: 514.
+## Ends in an error in state: 516.
##
## let_expr(closed_if) -> Let let_binding seq(Attr) In . closed_if [ Else ]
## let_expr(expr) -> Let let_binding seq(Attr) In . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1371,9 +1371,9 @@ interactive_expr: If True Then Let WILD EQ Bytes In With
-interactive_expr: If True Then Let WILD EQ Bytes With
+interactive_expr: If Verbatim Then Let WILD EQ Bytes With
##
-## Ends in an error in state: 512.
+## Ends in an error in state: 514.
##
## let_expr(closed_if) -> Let let_binding . seq(Attr) In closed_if [ Else ]
## let_expr(expr) -> Let let_binding . seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1385,26 +1385,26 @@ interactive_expr: If True Then Let WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
-interactive_expr: If True Then Let With
+interactive_expr: If Verbatim Then Let With
##
-## Ends in an error in state: 494.
+## Ends in an error in state: 496.
##
## let_expr(closed_if) -> Let . let_binding seq(Attr) In closed_if [ Else ]
## let_expr(closed_if) -> Let . Rec let_binding seq(Attr) In closed_if [ Else ]
@@ -1417,9 +1417,9 @@ interactive_expr: If True Then Let With
-interactive_expr: If True Then Match True Type
+interactive_expr: If Verbatim Then Match Verbatim Type
##
-## Ends in an error in state: 490.
+## Ends in an error in state: 492.
##
## match_expr(base_cond) -> Match expr . With option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## match_expr(base_if_then_else) -> Match expr . With option(VBAR) cases(base_if_then_else) [ Else ]
@@ -1431,25 +1431,25 @@ interactive_expr: If True Then Match True Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: If True Then Match True With VBAR Begin
+interactive_expr: If Verbatim Then Match Verbatim With VBAR Begin
##
-## Ends in an error in state: 492.
+## Ends in an error in state: 494.
##
## match_expr(base_cond) -> Match expr With option(VBAR) . cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## match_expr(base_if_then_else) -> Match expr With option(VBAR) . cases(base_if_then_else) [ Else ]
@@ -1460,9 +1460,9 @@ interactive_expr: If True Then Match True With VBAR Begin
-interactive_expr: If True Then Match True With WILD ARROW Bytes VBAR With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Bytes VBAR With
##
-## Ends in an error in state: 405.
+## Ends in an error in state: 407.
##
## cases(base_cond) -> cases(base_cond) VBAR . case_clause(base_cond) [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## cases(base_if_then_else) -> cases(base_cond) VBAR . case_clause(base_if_then_else) [ Else ]
@@ -1473,9 +1473,9 @@ interactive_expr: If True Then Match True With WILD ARROW Bytes VBAR With
-interactive_expr: If True Then Match True With WILD ARROW Fun WILD ARROW With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Fun WILD ARROW With
##
-## Ends in an error in state: 385.
+## Ends in an error in state: 387.
##
## fun_expr(base_cond) -> Fun nseq(irrefutable) ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## fun_expr(base_if_then_else) -> Fun nseq(irrefutable) ARROW . base_if_then_else [ Else ]
@@ -1486,9 +1486,9 @@ interactive_expr: If True Then Match True With WILD ARROW Fun WILD ARROW With
-interactive_expr: If True Then Match True With WILD ARROW Fun With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Fun With
##
-## Ends in an error in state: 383.
+## Ends in an error in state: 385.
##
## fun_expr(base_cond) -> Fun . nseq(irrefutable) ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## fun_expr(base_if_then_else) -> Fun . nseq(irrefutable) ARROW base_if_then_else [ Else ]
@@ -1499,9 +1499,9 @@ interactive_expr: If True Then Match True With WILD ARROW Fun With
-interactive_expr: If True Then Match True With WILD ARROW If True Then True Else With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If Verbatim Then Verbatim Else With
##
-## Ends in an error in state: 382.
+## Ends in an error in state: 384.
##
## if_then_else(base_cond) -> If expr Then closed_if Else . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(base_if_then_else) -> If expr Then closed_if Else . base_if_then_else [ Else ]
@@ -1512,9 +1512,9 @@ interactive_expr: If True Then Match True With WILD ARROW If True Then True Else
-interactive_expr: If True Then Match True With WILD ARROW If True Then With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If Verbatim Then With
##
-## Ends in an error in state: 276.
+## Ends in an error in state: 278.
##
## if_then(base_cond) -> If expr Then . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(base_cond) -> If expr Then . closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1526,9 +1526,9 @@ interactive_expr: If True Then Match True With WILD ARROW If True Then With
-interactive_expr: If True Then Match True With WILD ARROW If True With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If Verbatim With
##
-## Ends in an error in state: 275.
+## Ends in an error in state: 277.
##
## if_then(base_cond) -> If expr . Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(base_cond) -> If expr . Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1541,25 +1541,25 @@ interactive_expr: If True Then Match True With WILD ARROW If True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: If True Then Match True With WILD ARROW If With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW If With
##
-## Ends in an error in state: 274.
+## Ends in an error in state: 276.
##
## if_then(base_cond) -> If . expr Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(base_cond) -> If . expr Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1571,9 +1571,9 @@ interactive_expr: If True Then Match True With WILD ARROW If With
-interactive_expr: If True Then Match True With WILD ARROW Let Rec WILD EQ Bytes Attr Type
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 272.
+## Ends in an error in state: 274.
##
## let_expr(base_cond) -> Let Rec let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(base_if_then_else) -> Let Rec let_binding seq(Attr) . In base_if_then_else [ Else ]
@@ -1585,15 +1585,15 @@ interactive_expr: If True Then Match True With WILD ARROW Let Rec WILD EQ Bytes
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
-interactive_expr: If True Then Match True With WILD ARROW Let Rec WILD EQ Bytes In With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes In With
##
-## Ends in an error in state: 273.
+## Ends in an error in state: 275.
##
## let_expr(base_cond) -> Let Rec let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(base_if_then_else) -> Let Rec let_binding seq(Attr) In . base_if_then_else [ Else ]
@@ -1604,9 +1604,9 @@ interactive_expr: If True Then Match True With WILD ARROW Let Rec WILD EQ Bytes
-interactive_expr: If True Then Match True With WILD ARROW Let Rec WILD EQ Bytes With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes With
##
-## Ends in an error in state: 271.
+## Ends in an error in state: 273.
##
## let_expr(base_cond) -> Let Rec let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(base_if_then_else) -> Let Rec let_binding . seq(Attr) In base_if_then_else [ Else ]
@@ -1618,26 +1618,26 @@ interactive_expr: If True Then Match True With WILD ARROW Let Rec WILD EQ Bytes
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
-interactive_expr: If True Then Match True With WILD ARROW Let Rec With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let Rec With
##
-## Ends in an error in state: 270.
+## Ends in an error in state: 272.
##
## let_expr(base_cond) -> Let Rec . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(base_if_then_else) -> Let Rec . let_binding seq(Attr) In base_if_then_else [ Else ]
@@ -1648,9 +1648,9 @@ interactive_expr: If True Then Match True With WILD ARROW Let Rec With
-interactive_expr: If True Then Match True With WILD ARROW Let WILD EQ Bytes Attr Type
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 397.
+## Ends in an error in state: 399.
##
## let_expr(base_cond) -> Let let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(base_if_then_else) -> Let let_binding seq(Attr) . In base_if_then_else [ Else ]
@@ -1662,15 +1662,15 @@ interactive_expr: If True Then Match True With WILD ARROW Let WILD EQ Bytes Attr
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
-interactive_expr: If True Then Match True With WILD ARROW Let WILD EQ Bytes In With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let WILD EQ Bytes In With
##
-## Ends in an error in state: 398.
+## Ends in an error in state: 400.
##
## let_expr(base_cond) -> Let let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(base_if_then_else) -> Let let_binding seq(Attr) In . base_if_then_else [ Else ]
@@ -1681,9 +1681,9 @@ interactive_expr: If True Then Match True With WILD ARROW Let WILD EQ Bytes In W
-interactive_expr: If True Then Match True With WILD ARROW Let WILD EQ Bytes With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let WILD EQ Bytes With
##
-## Ends in an error in state: 396.
+## Ends in an error in state: 398.
##
## let_expr(base_cond) -> Let let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(base_if_then_else) -> Let let_binding . seq(Attr) In base_if_then_else [ Else ]
@@ -1695,26 +1695,26 @@ interactive_expr: If True Then Match True With WILD ARROW Let WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
-interactive_expr: If True Then Match True With WILD ARROW Let With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Let With
##
-## Ends in an error in state: 269.
+## Ends in an error in state: 271.
##
## let_expr(base_cond) -> Let . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(base_cond) -> Let . Rec let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1727,9 +1727,9 @@ interactive_expr: If True Then Match True With WILD ARROW Let With
-interactive_expr: If True Then Match True With WILD ARROW True End
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW Verbatim End
##
-## Ends in an error in state: 390.
+## Ends in an error in state: 392.
##
## base_expr(base_cond) -> disj_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## base_expr(base_if_then_else) -> disj_expr_level . [ Else ]
@@ -1744,22 +1744,22 @@ interactive_expr: If True Then Match True With WILD ARROW True End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
##
-interactive_expr: If True Then Match True With WILD ARROW With
+interactive_expr: If Verbatim Then Match Verbatim With WILD ARROW With
##
-## Ends in an error in state: 268.
+## Ends in an error in state: 270.
##
## case_clause(base_cond) -> pattern ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## case_clause(base_if_then_else) -> pattern ARROW . base_if_then_else [ Else ]
@@ -1770,9 +1770,9 @@ interactive_expr: If True Then Match True With WILD ARROW With
-interactive_expr: If True Then Match True With WILD CONS Bytes SEMI
+interactive_expr: If Verbatim Then Match Verbatim With WILD CONS Bytes SEMI
##
-## Ends in an error in state: 267.
+## Ends in an error in state: 269.
##
## case_clause(base_cond) -> pattern . ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## case_clause(base_if_then_else) -> pattern . ARROW base_if_then_else [ Else ]
@@ -1784,15 +1784,15 @@ interactive_expr: If True Then Match True With WILD CONS Bytes SEMI
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 96, spurious reduction of production tail -> sub_pattern
-## In state 247, spurious reduction of production pattern -> sub_pattern CONS tail
+## In state 97, spurious reduction of production tail -> sub_pattern
+## In state 249, spurious reduction of production pattern -> sub_pattern CONS tail
##
-interactive_expr: If True Then Match True With With
+interactive_expr: If Verbatim Then Match Verbatim With With
##
-## Ends in an error in state: 491.
+## Ends in an error in state: 493.
##
## match_expr(base_cond) -> Match expr With . option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## match_expr(base_if_then_else) -> Match expr With . option(VBAR) cases(base_if_then_else) [ Else ]
@@ -1803,9 +1803,9 @@ interactive_expr: If True Then Match True With With
-interactive_expr: If True Then Match With
+interactive_expr: If Verbatim Then Match With
##
-## Ends in an error in state: 489.
+## Ends in an error in state: 491.
##
## match_expr(base_cond) -> Match . expr With option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## match_expr(base_if_then_else) -> Match . expr With option(VBAR) cases(base_if_then_else) [ Else ]
@@ -1816,9 +1816,9 @@ interactive_expr: If True Then Match With
-interactive_expr: If True Then True COMMA Bytes VBAR
+interactive_expr: If Verbatim Then Verbatim COMMA Bytes VBAR
##
-## Ends in an error in state: 505.
+## Ends in an error in state: 507.
##
## base_expr(closed_if) -> tuple_expr . [ Else ]
## base_expr(expr) -> tuple_expr . [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1830,25 +1830,25 @@ interactive_expr: If True Then True COMMA Bytes VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 342, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level
-## In state 341, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA)
-## In state 218, spurious reduction of production tuple_expr -> tuple(disj_expr_level)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 344, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level
+## In state 343, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA)
+## In state 220, spurious reduction of production tuple_expr -> tuple(disj_expr_level)
##
-interactive_expr: If True Then True Else With
+interactive_expr: If Verbatim Then Verbatim Else With
##
-## Ends in an error in state: 517.
+## Ends in an error in state: 519.
##
## if_then_else(expr) -> If expr Then closed_if Else . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -1858,9 +1858,9 @@ interactive_expr: If True Then True Else With
-interactive_expr: If True Then True VBAR
+interactive_expr: If Verbatim Then Verbatim VBAR
##
-## Ends in an error in state: 506.
+## Ends in an error in state: 508.
##
## base_expr(closed_if) -> disj_expr_level . [ Else ]
## base_expr(expr) -> disj_expr_level . [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1875,22 +1875,22 @@ interactive_expr: If True Then True VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
##
-interactive_expr: If True Then With
+interactive_expr: If Verbatim Then With
##
-## Ends in an error in state: 488.
+## Ends in an error in state: 490.
##
## if_then(expr) -> If expr Then . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(expr) -> If expr Then . closed_if Else expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1901,9 +1901,9 @@ interactive_expr: If True Then With
-interactive_expr: If True With
+interactive_expr: If Verbatim With
##
-## Ends in an error in state: 487.
+## Ends in an error in state: 489.
##
## if_then(expr) -> If expr . Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(expr) -> If expr . Then closed_if Else expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1915,25 +1915,25 @@ interactive_expr: If True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
interactive_expr: If With
##
-## Ends in an error in state: 180.
+## Ends in an error in state: 182.
##
## if_then(expr) -> If . expr Then expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(expr) -> If . expr Then closed_if Else expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -1946,9 +1946,9 @@ interactive_expr: If With
interactive_expr: LBRACE Constr DOT Ident With
##
-## Ends in an error in state: 521.
+## Ends in an error in state: 523.
##
-## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With ]
+## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With EQ ]
##
## The known suffix of the stack is as follows:
## Constr DOT Ident
@@ -1958,9 +1958,9 @@ interactive_expr: LBRACE Constr DOT Ident With
interactive_expr: LBRACE Constr DOT With
##
-## Ends in an error in state: 520.
+## Ends in an error in state: 522.
##
-## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With ]
+## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With EQ ]
##
## The known suffix of the stack is as follows:
## Constr DOT
@@ -1970,9 +1970,9 @@ interactive_expr: LBRACE Constr DOT With
interactive_expr: LBRACE Constr With
##
-## Ends in an error in state: 519.
+## Ends in an error in state: 521.
##
-## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With ]
+## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With EQ ]
##
## The known suffix of the stack is as follows:
## Constr
@@ -1980,11 +1980,11 @@ interactive_expr: LBRACE Constr With
-interactive_expr: LBRACE Ident DOT Ident VBAR
+interactive_expr: LBRACE Ident DOT Ident Verbatim
##
-## Ends in an error in state: 525.
+## Ends in an error in state: 527.
##
-## update_record -> LBRACE path . With sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## update_record -> LBRACE path . With sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## LBRACE path
@@ -1993,9 +1993,9 @@ interactive_expr: LBRACE Ident DOT Ident VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 185, spurious reduction of production nsepseq(selection,DOT) -> selection
-## In state 188, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT)
-## In state 524, spurious reduction of production path -> projection
+## In state 187, spurious reduction of production nsepseq(selection,DOT) -> selection
+## In state 190, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT)
+## In state 526, spurious reduction of production path -> projection
##
@@ -2028,19 +2028,19 @@ interactive_expr: LBRACE Ident EQ Bytes SEMI Ident EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 518, spurious reduction of production field_assignment -> Ident EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 520, spurious reduction of production field_assignment -> Ident EQ expr
##
@@ -2085,26 +2085,26 @@ interactive_expr: LBRACE Ident EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 518, spurious reduction of production field_assignment -> Ident EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 520, spurious reduction of production field_assignment -> Ident EQ expr
##
interactive_expr: LBRACE Ident EQ With
##
-## Ends in an error in state: 178.
+## Ends in an error in state: 180.
##
## field_assignment -> Ident EQ . expr [ SEMI RBRACE ]
##
@@ -2116,7 +2116,7 @@ interactive_expr: LBRACE Ident EQ With
interactive_expr: LBRACE Ident WILD
##
-## Ends in an error in state: 177.
+## Ends in an error in state: 179.
##
## field_assignment -> Ident . EQ expr [ SEMI RBRACE ]
## path -> Ident . [ With ]
@@ -2128,19 +2128,7 @@ interactive_expr: LBRACE Ident WILD
-interactive_expr: LBRACE Ident With Ident DOT With
-##
-## Ends in an error in state: 528.
-##
-## nsepseq(field_name,DOT) -> Ident DOT . nsepseq(field_name,DOT) [ EQ ]
-##
-## The known suffix of the stack is as follows:
-## Ident DOT
-##
-
-
-
-interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes SEMI With
+interactive_expr: LBRACE Ident With Ident DOT Ident EQ Bytes SEMI Ident DOT Ident EQ Bytes SEMI With
##
## Ends in an error in state: 542.
##
@@ -2153,7 +2141,7 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes SEMI With
-interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes With
+interactive_expr: LBRACE Ident With Ident DOT Ident EQ Bytes SEMI Ident DOT Ident EQ Bytes With
##
## Ends in an error in state: 541.
##
@@ -2168,24 +2156,24 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI Ident EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 536, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 534, spurious reduction of production field_path_assignment -> path EQ expr
##
-interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI With
+interactive_expr: LBRACE Ident With Ident DOT Ident EQ Bytes SEMI With
##
## Ends in an error in state: 538.
##
@@ -2198,7 +2186,7 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes SEMI With
-interactive_expr: LBRACE Ident With Ident EQ Bytes With
+interactive_expr: LBRACE Ident With Ident DOT Ident EQ Bytes With
##
## Ends in an error in state: 537.
##
@@ -2213,41 +2201,61 @@ interactive_expr: LBRACE Ident With Ident EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 536, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 534, spurious reduction of production field_path_assignment -> path EQ expr
##
-interactive_expr: LBRACE Ident With Ident EQ With
+interactive_expr: LBRACE Ident With Ident DOT Ident EQ With
##
-## Ends in an error in state: 535.
+## Ends in an error in state: 533.
##
-## field_path_assignment -> nsepseq(field_name,DOT) EQ . expr [ SEMI RBRACE ]
+## field_path_assignment -> path EQ . expr [ SEMI RBRACE ]
##
## The known suffix of the stack is as follows:
-## nsepseq(field_name,DOT) EQ
+## path EQ
+##
+
+
+
+interactive_expr: LBRACE Ident With Ident DOT Ident With
+##
+## Ends in an error in state: 532.
+##
+## field_path_assignment -> path . EQ expr [ SEMI RBRACE ]
+##
+## The known suffix of the stack is as follows:
+## path
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 187, spurious reduction of production nsepseq(selection,DOT) -> selection
+## In state 190, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT)
+## In state 526, spurious reduction of production path -> projection
##
interactive_expr: LBRACE Ident With Ident With
##
-## Ends in an error in state: 527.
+## Ends in an error in state: 529.
##
-## nsepseq(field_name,DOT) -> Ident . [ EQ ]
-## nsepseq(field_name,DOT) -> Ident . DOT nsepseq(field_name,DOT) [ EQ ]
+## path -> Ident . [ EQ ]
+## projection -> Ident . DOT nsepseq(selection,DOT) [ EQ ]
##
## The known suffix of the stack is as follows:
## Ident
@@ -2257,9 +2265,9 @@ interactive_expr: LBRACE Ident With Ident With
interactive_expr: LBRACE Ident With With
##
-## Ends in an error in state: 526.
+## Ends in an error in state: 528.
##
-## update_record -> LBRACE path With . sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## update_record -> LBRACE path With . sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## LBRACE path With
@@ -2269,10 +2277,10 @@ interactive_expr: LBRACE Ident With With
interactive_expr: LBRACE With
##
-## Ends in an error in state: 176.
+## Ends in an error in state: 178.
##
-## record_expr -> LBRACE . sep_or_term_list(field_assignment,SEMI) RBRACE [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
-## update_record -> LBRACE . path With sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## record_expr -> LBRACE . sep_or_term_list(field_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## update_record -> LBRACE . path With sep_or_term_list(field_path_assignment,SEMI) RBRACE [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## LBRACE
@@ -2280,7 +2288,7 @@ interactive_expr: LBRACE With
-interactive_expr: LBRACKET True SEMI True SEMI With
+interactive_expr: LBRACKET Verbatim SEMI Verbatim SEMI With
##
## Ends in an error in state: 567.
##
@@ -2293,7 +2301,7 @@ interactive_expr: LBRACKET True SEMI True SEMI With
-interactive_expr: LBRACKET True SEMI True With
+interactive_expr: LBRACKET Verbatim SEMI Verbatim With
##
## Ends in an error in state: 566.
##
@@ -2308,23 +2316,23 @@ interactive_expr: LBRACKET True SEMI True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: LBRACKET True SEMI With
+interactive_expr: LBRACKET Verbatim SEMI With
##
## Ends in an error in state: 563.
##
@@ -2337,7 +2345,7 @@ interactive_expr: LBRACKET True SEMI With
-interactive_expr: LBRACKET True With
+interactive_expr: LBRACKET Verbatim With
##
## Ends in an error in state: 562.
##
@@ -2352,27 +2360,27 @@ interactive_expr: LBRACKET True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
interactive_expr: LBRACKET With
##
-## Ends in an error in state: 168.
+## Ends in an error in state: 170.
##
-## list__(expr) -> LBRACKET . option(sep_or_term_list(expr,SEMI)) RBRACKET [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## list__(expr) -> LBRACKET . option(sep_or_term_list(expr,SEMI)) RBRACKET [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## LBRACKET
@@ -2380,14 +2388,14 @@ interactive_expr: LBRACKET With
-interactive_expr: LPAR True COLON String VBAR
+interactive_expr: LPAR Verbatim COLON Ident VBAR
##
-## Ends in an error in state: 580.
+## Ends in an error in state: 581.
##
-## par(__anonymous_1) -> LPAR expr COLON type_expr . RPAR [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## par(annot_expr) -> LPAR annot_expr . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
-## LPAR expr COLON type_expr
+## LPAR annot_expr
##
## WARNING: This example involves spurious reductions.
## This implies that, although the LR(1) items shown above provide an
@@ -2396,28 +2404,29 @@ interactive_expr: LPAR True COLON String VBAR
## In state 28, spurious reduction of production cartesian -> core_type
## In state 36, spurious reduction of production fun_type -> cartesian
## In state 27, spurious reduction of production type_expr -> fun_type
+## In state 580, spurious reduction of production annot_expr -> expr COLON type_expr
##
-interactive_expr: LPAR True COLON With
+interactive_expr: LPAR Verbatim COLON With
##
## Ends in an error in state: 579.
##
-## par(__anonymous_1) -> LPAR expr COLON . type_expr RPAR [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## annot_expr -> expr COLON . type_expr [ RPAR ]
##
## The known suffix of the stack is as follows:
-## LPAR expr COLON
+## expr COLON
##
-interactive_expr: LPAR True With
+interactive_expr: LPAR Verbatim With
##
## Ends in an error in state: 577.
##
-## par(__anonymous_1) -> LPAR expr . COLON type_expr RPAR [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
-## par(expr) -> LPAR expr . RPAR [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## annot_expr -> expr . COLON type_expr [ RPAR ]
+## par(expr) -> LPAR expr . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## LPAR expr
@@ -2426,29 +2435,29 @@ interactive_expr: LPAR True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
interactive_expr: LPAR With
##
-## Ends in an error in state: 165.
+## Ends in an error in state: 167.
##
-## par(__anonymous_1) -> LPAR . expr COLON type_expr RPAR [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
-## par(expr) -> LPAR . expr RPAR [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
-## unit -> LPAR . RPAR [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## par(annot_expr) -> LPAR . annot_expr RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## par(expr) -> LPAR . expr RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## unit -> LPAR . RPAR [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## LPAR
@@ -2458,7 +2467,7 @@ interactive_expr: LPAR With
interactive_expr: Let Rec WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 174.
+## Ends in an error in state: 176.
##
## let_expr(expr) -> Let Rec let_binding seq(Attr) . In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -2469,15 +2478,15 @@ interactive_expr: Let Rec WILD EQ Bytes Attr Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
interactive_expr: Let Rec WILD EQ Bytes In With
##
-## Ends in an error in state: 175.
+## Ends in an error in state: 177.
##
## let_expr(expr) -> Let Rec let_binding seq(Attr) In . expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -2489,7 +2498,7 @@ interactive_expr: Let Rec WILD EQ Bytes In With
interactive_expr: Let Rec WILD EQ Bytes With
##
-## Ends in an error in state: 171.
+## Ends in an error in state: 173.
##
## let_expr(expr) -> Let Rec let_binding . seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -2500,26 +2509,26 @@ interactive_expr: Let Rec WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
interactive_expr: Let Rec With
##
-## Ends in an error in state: 170.
+## Ends in an error in state: 172.
##
## let_expr(expr) -> Let Rec . let_binding seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -2542,8 +2551,8 @@ interactive_expr: Let WILD EQ Bytes Attr Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
@@ -2573,26 +2582,26 @@ interactive_expr: Let WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
interactive_expr: Let With
##
-## Ends in an error in state: 169.
+## Ends in an error in state: 171.
##
## let_expr(expr) -> Let . let_binding seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(expr) -> Let . Rec let_binding seq(Attr) In expr [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -2605,7 +2614,7 @@ interactive_expr: Let With
interactive_expr: MINUS With
##
-## Ends in an error in state: 167.
+## Ends in an error in state: 169.
##
## unary_expr_level -> MINUS . call_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
##
@@ -2615,7 +2624,7 @@ interactive_expr: MINUS With
-interactive_expr: Match True Type
+interactive_expr: Match Verbatim Type
##
## Ends in an error in state: 570.
##
@@ -2628,25 +2637,25 @@ interactive_expr: Match True Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: Match True With LPAR Bytes RPAR With
+interactive_expr: Match Verbatim With LPAR Bytes RPAR With
##
-## Ends in an error in state: 245.
+## Ends in an error in state: 247.
##
## pattern -> sub_pattern . CONS tail [ ARROW ]
## tuple(sub_pattern) -> sub_pattern . COMMA nsepseq(sub_pattern,COMMA) [ ARROW ]
@@ -2657,7 +2666,7 @@ interactive_expr: Match True With LPAR Bytes RPAR With
-interactive_expr: Match True With VBAR Begin
+interactive_expr: Match Verbatim With VBAR Begin
##
## Ends in an error in state: 572.
##
@@ -2669,7 +2678,7 @@ interactive_expr: Match True With VBAR Begin
-interactive_expr: Match True With WILD ARROW Bytes VBAR With
+interactive_expr: Match Verbatim With WILD ARROW Bytes VBAR With
##
## Ends in an error in state: 576.
##
@@ -2681,9 +2690,9 @@ interactive_expr: Match True With WILD ARROW Bytes VBAR With
-interactive_expr: Match True With WILD ARROW Fun WILD ARROW With
+interactive_expr: Match Verbatim With WILD ARROW Fun WILD ARROW With
##
-## Ends in an error in state: 414.
+## Ends in an error in state: 416.
##
## fun_expr(base_cond) -> Fun nseq(irrefutable) ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -2693,9 +2702,9 @@ interactive_expr: Match True With WILD ARROW Fun WILD ARROW With
-interactive_expr: Match True With WILD ARROW Fun With
+interactive_expr: Match Verbatim With WILD ARROW Fun With
##
-## Ends in an error in state: 412.
+## Ends in an error in state: 414.
##
## fun_expr(base_cond) -> Fun . nseq(irrefutable) ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -2705,9 +2714,9 @@ interactive_expr: Match True With WILD ARROW Fun With
-interactive_expr: Match True With WILD ARROW If True Then Fun WILD ARROW With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Fun WILD ARROW With
##
-## Ends in an error in state: 287.
+## Ends in an error in state: 289.
##
## fun_expr(base_cond) -> Fun nseq(irrefutable) ARROW . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## fun_expr(closed_if) -> Fun nseq(irrefutable) ARROW . closed_if [ Else ]
@@ -2718,9 +2727,9 @@ interactive_expr: Match True With WILD ARROW If True Then Fun WILD ARROW With
-interactive_expr: Match True With WILD ARROW If True Then Fun With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Fun With
##
-## Ends in an error in state: 285.
+## Ends in an error in state: 287.
##
## fun_expr(base_cond) -> Fun . nseq(irrefutable) ARROW base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## fun_expr(closed_if) -> Fun . nseq(irrefutable) ARROW closed_if [ Else ]
@@ -2731,9 +2740,9 @@ interactive_expr: Match True With WILD ARROW If True Then Fun With
-interactive_expr: Match True With WILD ARROW If True Then If True Then True Else With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If Verbatim Then Verbatim Else With
##
-## Ends in an error in state: 362.
+## Ends in an error in state: 364.
##
## if_then_else(base_cond) -> If expr Then closed_if Else . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(closed_if) -> If expr Then closed_if Else . closed_if [ Else ]
@@ -2744,9 +2753,9 @@ interactive_expr: Match True With WILD ARROW If True Then If True Then True Else
-interactive_expr: Match True With WILD ARROW If True Then If True Then With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If Verbatim Then With
##
-## Ends in an error in state: 284.
+## Ends in an error in state: 286.
##
## if_then(base_cond) -> If expr Then . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(base_cond) -> If expr Then . closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -2758,9 +2767,9 @@ interactive_expr: Match True With WILD ARROW If True Then If True Then With
-interactive_expr: Match True With WILD ARROW If True Then If True With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If Verbatim With
##
-## Ends in an error in state: 283.
+## Ends in an error in state: 285.
##
## if_then(base_cond) -> If expr . Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(base_cond) -> If expr . Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -2773,25 +2782,25 @@ interactive_expr: Match True With WILD ARROW If True Then If True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: Match True With WILD ARROW If True Then If With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then If With
##
-## Ends in an error in state: 282.
+## Ends in an error in state: 284.
##
## if_then(base_cond) -> If . expr Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(base_cond) -> If . expr Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -2803,9 +2812,9 @@ interactive_expr: Match True With WILD ARROW If True Then If With
-interactive_expr: Match True With WILD ARROW If True Then Let Rec WILD EQ Bytes Attr Type
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 280.
+## Ends in an error in state: 282.
##
## let_expr(base_cond) -> Let Rec let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(closed_if) -> Let Rec let_binding seq(Attr) . In closed_if [ Else ]
@@ -2817,15 +2826,15 @@ interactive_expr: Match True With WILD ARROW If True Then Let Rec WILD EQ Bytes
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
-interactive_expr: Match True With WILD ARROW If True Then Let Rec WILD EQ Bytes In With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec WILD EQ Bytes In With
##
-## Ends in an error in state: 281.
+## Ends in an error in state: 283.
##
## let_expr(base_cond) -> Let Rec let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(closed_if) -> Let Rec let_binding seq(Attr) In . closed_if [ Else ]
@@ -2836,9 +2845,9 @@ interactive_expr: Match True With WILD ARROW If True Then Let Rec WILD EQ Bytes
-interactive_expr: Match True With WILD ARROW If True Then Let Rec WILD EQ Bytes With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec WILD EQ Bytes With
##
-## Ends in an error in state: 279.
+## Ends in an error in state: 281.
##
## let_expr(base_cond) -> Let Rec let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(closed_if) -> Let Rec let_binding . seq(Attr) In closed_if [ Else ]
@@ -2850,26 +2859,26 @@ interactive_expr: Match True With WILD ARROW If True Then Let Rec WILD EQ Bytes
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
-interactive_expr: Match True With WILD ARROW If True Then Let Rec With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let Rec With
##
-## Ends in an error in state: 278.
+## Ends in an error in state: 280.
##
## let_expr(base_cond) -> Let Rec . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(closed_if) -> Let Rec . let_binding seq(Attr) In closed_if [ Else ]
@@ -2880,9 +2889,9 @@ interactive_expr: Match True With WILD ARROW If True Then Let Rec With
-interactive_expr: Match True With WILD ARROW If True Then Let WILD EQ Bytes Attr Type
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 377.
+## Ends in an error in state: 379.
##
## let_expr(base_cond) -> Let let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(closed_if) -> Let let_binding seq(Attr) . In closed_if [ Else ]
@@ -2894,15 +2903,15 @@ interactive_expr: Match True With WILD ARROW If True Then Let WILD EQ Bytes Attr
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
-interactive_expr: Match True With WILD ARROW If True Then Let WILD EQ Bytes In With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let WILD EQ Bytes In With
##
-## Ends in an error in state: 378.
+## Ends in an error in state: 380.
##
## let_expr(base_cond) -> Let let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(closed_if) -> Let let_binding seq(Attr) In . closed_if [ Else ]
@@ -2913,9 +2922,9 @@ interactive_expr: Match True With WILD ARROW If True Then Let WILD EQ Bytes In W
-interactive_expr: Match True With WILD ARROW If True Then Let WILD EQ Bytes With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let WILD EQ Bytes With
##
-## Ends in an error in state: 376.
+## Ends in an error in state: 378.
##
## let_expr(base_cond) -> Let let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(closed_if) -> Let let_binding . seq(Attr) In closed_if [ Else ]
@@ -2927,26 +2936,26 @@ interactive_expr: Match True With WILD ARROW If True Then Let WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
-interactive_expr: Match True With WILD ARROW If True Then Let With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Let With
##
-## Ends in an error in state: 277.
+## Ends in an error in state: 279.
##
## let_expr(base_cond) -> Let . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(base_cond) -> Let . Rec let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -2959,9 +2968,9 @@ interactive_expr: Match True With WILD ARROW If True Then Let With
-interactive_expr: Match True With WILD ARROW If True Then True Else With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Verbatim Else With
##
-## Ends in an error in state: 411.
+## Ends in an error in state: 413.
##
## if_then_else(base_cond) -> If expr Then closed_if Else . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -2971,9 +2980,9 @@ interactive_expr: Match True With WILD ARROW If True Then True Else With
-interactive_expr: Match True With WILD ARROW If True Then True End
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then Verbatim End
##
-## Ends in an error in state: 297.
+## Ends in an error in state: 299.
##
## base_expr(base_cond) -> disj_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## base_expr(closed_if) -> disj_expr_level . [ Else ]
@@ -2988,22 +2997,22 @@ interactive_expr: Match True With WILD ARROW If True Then True End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
##
-interactive_expr: Match True With WILD ARROW If True Then With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim Then With
##
-## Ends in an error in state: 262.
+## Ends in an error in state: 264.
##
## if_then(base_cond) -> If expr Then . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(base_cond) -> If expr Then . closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -3014,9 +3023,9 @@ interactive_expr: Match True With WILD ARROW If True Then With
-interactive_expr: Match True With WILD ARROW If True With
+interactive_expr: Match Verbatim With WILD ARROW If Verbatim With
##
-## Ends in an error in state: 261.
+## Ends in an error in state: 263.
##
## if_then(base_cond) -> If expr . Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(base_cond) -> If expr . Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -3028,25 +3037,25 @@ interactive_expr: Match True With WILD ARROW If True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
-interactive_expr: Match True With WILD ARROW If With
+interactive_expr: Match Verbatim With WILD ARROW If With
##
-## Ends in an error in state: 260.
+## Ends in an error in state: 262.
##
## if_then(base_cond) -> If . expr Then base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## if_then_else(base_cond) -> If . expr Then closed_if Else base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -3057,9 +3066,9 @@ interactive_expr: Match True With WILD ARROW If With
-interactive_expr: Match True With WILD ARROW Let Rec WILD EQ Bytes Attr Type
+interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 258.
+## Ends in an error in state: 260.
##
## let_expr(base_cond) -> Let Rec let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -3070,15 +3079,15 @@ interactive_expr: Match True With WILD ARROW Let Rec WILD EQ Bytes Attr Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
-interactive_expr: Match True With WILD ARROW Let Rec WILD EQ Bytes In With
+interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes In With
##
-## Ends in an error in state: 259.
+## Ends in an error in state: 261.
##
## let_expr(base_cond) -> Let Rec let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -3088,9 +3097,9 @@ interactive_expr: Match True With WILD ARROW Let Rec WILD EQ Bytes In With
-interactive_expr: Match True With WILD ARROW Let Rec WILD EQ Bytes With
+interactive_expr: Match Verbatim With WILD ARROW Let Rec WILD EQ Bytes With
##
-## Ends in an error in state: 257.
+## Ends in an error in state: 259.
##
## let_expr(base_cond) -> Let Rec let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -3101,26 +3110,26 @@ interactive_expr: Match True With WILD ARROW Let Rec WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
-interactive_expr: Match True With WILD ARROW Let Rec With
+interactive_expr: Match Verbatim With WILD ARROW Let Rec With
##
-## Ends in an error in state: 256.
+## Ends in an error in state: 258.
##
## let_expr(base_cond) -> Let Rec . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -3130,9 +3139,9 @@ interactive_expr: Match True With WILD ARROW Let Rec With
-interactive_expr: Match True With WILD ARROW Let WILD EQ Bytes Attr Type
+interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes Attr Type
##
-## Ends in an error in state: 418.
+## Ends in an error in state: 420.
##
## let_expr(base_cond) -> Let let_binding seq(Attr) . In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -3143,15 +3152,15 @@ interactive_expr: Match True With WILD ARROW Let WILD EQ Bytes Attr Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 172, spurious reduction of production seq(Attr) ->
-## In state 173, spurious reduction of production seq(Attr) -> Attr seq(Attr)
+## In state 174, spurious reduction of production seq(Attr) ->
+## In state 175, spurious reduction of production seq(Attr) -> Attr seq(Attr)
##
-interactive_expr: Match True With WILD ARROW Let WILD EQ Bytes In With
+interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes In With
##
-## Ends in an error in state: 419.
+## Ends in an error in state: 421.
##
## let_expr(base_cond) -> Let let_binding seq(Attr) In . base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -3161,9 +3170,9 @@ interactive_expr: Match True With WILD ARROW Let WILD EQ Bytes In With
-interactive_expr: Match True With WILD ARROW Let WILD EQ Bytes With
+interactive_expr: Match Verbatim With WILD ARROW Let WILD EQ Bytes With
##
-## Ends in an error in state: 417.
+## Ends in an error in state: 419.
##
## let_expr(base_cond) -> Let let_binding . seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -3174,26 +3183,26 @@ interactive_expr: Match True With WILD ARROW Let WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
-interactive_expr: Match True With WILD ARROW Let With
+interactive_expr: Match Verbatim With WILD ARROW Let With
##
-## Ends in an error in state: 255.
+## Ends in an error in state: 257.
##
## let_expr(base_cond) -> Let . let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## let_expr(base_cond) -> Let . Rec let_binding seq(Attr) In base_cond [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
@@ -3204,7 +3213,7 @@ interactive_expr: Match True With WILD ARROW Let With
-interactive_expr: Match True With WILD ARROW True COMMA Bytes Else
+interactive_expr: Match Verbatim With WILD ARROW Verbatim COMMA Bytes Else
##
## Ends in an error in state: 575.
##
@@ -3218,30 +3227,30 @@ interactive_expr: Match True With WILD ARROW True COMMA Bytes Else
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 342, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level
-## In state 341, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA)
-## In state 218, spurious reduction of production tuple_expr -> tuple(disj_expr_level)
-## In state 415, spurious reduction of production base_expr(base_cond) -> tuple_expr
-## In state 354, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond)
-## In state 355, spurious reduction of production base_cond -> base_cond__open(base_cond)
-## In state 401, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond
-## In state 409, spurious reduction of production cases(base_cond) -> case_clause(base_cond)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 344, spurious reduction of production nsepseq(disj_expr_level,COMMA) -> disj_expr_level
+## In state 343, spurious reduction of production tuple(disj_expr_level) -> disj_expr_level COMMA nsepseq(disj_expr_level,COMMA)
+## In state 220, spurious reduction of production tuple_expr -> tuple(disj_expr_level)
+## In state 417, spurious reduction of production base_expr(base_cond) -> tuple_expr
+## In state 356, spurious reduction of production base_cond__open(base_cond) -> base_expr(base_cond)
+## In state 357, spurious reduction of production base_cond -> base_cond__open(base_cond)
+## In state 403, spurious reduction of production case_clause(base_cond) -> pattern ARROW base_cond
+## In state 411, spurious reduction of production cases(base_cond) -> case_clause(base_cond)
##
-interactive_expr: Match True With WILD ARROW True End
+interactive_expr: Match Verbatim With WILD ARROW Verbatim End
##
-## Ends in an error in state: 416.
+## Ends in an error in state: 418.
##
## base_expr(base_cond) -> disj_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In EOF COMMA COLON BOOL_OR Attr ]
@@ -3255,20 +3264,20 @@ interactive_expr: Match True With WILD ARROW True End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
##
-interactive_expr: Match True With WILD ARROW With
+interactive_expr: Match Verbatim With WILD ARROW With
##
## Ends in an error in state: 574.
##
@@ -3280,9 +3289,9 @@ interactive_expr: Match True With WILD ARROW With
-interactive_expr: Match True With WILD COMMA WILD COMMA With
+interactive_expr: Match Verbatim With WILD COMMA WILD COMMA With
##
-## Ends in an error in state: 250.
+## Ends in an error in state: 252.
##
## nsepseq(sub_pattern,COMMA) -> sub_pattern COMMA . nsepseq(sub_pattern,COMMA) [ ARROW ]
##
@@ -3292,9 +3301,9 @@ interactive_expr: Match True With WILD COMMA WILD COMMA With
-interactive_expr: Match True With WILD COMMA WILD With
+interactive_expr: Match Verbatim With WILD COMMA WILD With
##
-## Ends in an error in state: 249.
+## Ends in an error in state: 251.
##
## nsepseq(sub_pattern,COMMA) -> sub_pattern . [ ARROW ]
## nsepseq(sub_pattern,COMMA) -> sub_pattern . COMMA nsepseq(sub_pattern,COMMA) [ ARROW ]
@@ -3305,9 +3314,9 @@ interactive_expr: Match True With WILD COMMA WILD With
-interactive_expr: Match True With WILD COMMA With
+interactive_expr: Match Verbatim With WILD COMMA With
##
-## Ends in an error in state: 248.
+## Ends in an error in state: 250.
##
## tuple(sub_pattern) -> sub_pattern COMMA . nsepseq(sub_pattern,COMMA) [ ARROW ]
##
@@ -3317,7 +3326,7 @@ interactive_expr: Match True With WILD COMMA With
-interactive_expr: Match True With WILD CONS Bytes SEMI
+interactive_expr: Match Verbatim With WILD CONS Bytes SEMI
##
## Ends in an error in state: 573.
##
@@ -3330,15 +3339,15 @@ interactive_expr: Match True With WILD CONS Bytes SEMI
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 96, spurious reduction of production tail -> sub_pattern
-## In state 247, spurious reduction of production pattern -> sub_pattern CONS tail
+## In state 97, spurious reduction of production tail -> sub_pattern
+## In state 249, spurious reduction of production pattern -> sub_pattern CONS tail
##
-interactive_expr: Match True With WILD CONS With
+interactive_expr: Match Verbatim With WILD CONS With
##
-## Ends in an error in state: 246.
+## Ends in an error in state: 248.
##
## pattern -> sub_pattern CONS . tail [ ARROW ]
##
@@ -3348,9 +3357,9 @@ interactive_expr: Match True With WILD CONS With
-interactive_expr: Match True With WILD With
+interactive_expr: Match Verbatim With WILD With
##
-## Ends in an error in state: 402.
+## Ends in an error in state: 404.
##
## pattern -> core_pattern . [ ARROW ]
## sub_pattern -> core_pattern . [ CONS COMMA ]
@@ -3361,7 +3370,7 @@ interactive_expr: Match True With WILD With
-interactive_expr: Match True With With
+interactive_expr: Match Verbatim With With
##
## Ends in an error in state: 571.
##
@@ -3375,7 +3384,7 @@ interactive_expr: Match True With With
interactive_expr: Match With
##
-## Ends in an error in state: 166.
+## Ends in an error in state: 168.
##
## match_expr(base_cond) -> Match . expr With option(VBAR) cases(base_cond) [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
##
@@ -3387,7 +3396,7 @@ interactive_expr: Match With
interactive_expr: Not With
##
-## Ends in an error in state: 162.
+## Ends in an error in state: 164.
##
## unary_expr_level -> Not . call_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
##
@@ -3397,9 +3406,9 @@ interactive_expr: Not With
-interactive_expr: True BOOL_AND With
+interactive_expr: Verbatim BOOL_AND With
##
-## Ends in an error in state: 317.
+## Ends in an error in state: 319.
##
## bin_op(conj_expr_level,BOOL_AND,comp_expr_level) -> conj_expr_level BOOL_AND . comp_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In End Else EOF COMMA COLON BOOL_OR BOOL_AND Attr ]
##
@@ -3409,9 +3418,9 @@ interactive_expr: True BOOL_AND With
-interactive_expr: True BOOL_OR With
+interactive_expr: Verbatim BOOL_OR With
##
-## Ends in an error in state: 348.
+## Ends in an error in state: 350.
##
## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level BOOL_OR . conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In End Else EOF COMMA COLON BOOL_OR Attr ]
##
@@ -3421,9 +3430,9 @@ interactive_expr: True BOOL_OR With
-interactive_expr: True CAT With
+interactive_expr: Verbatim CAT With
##
-## Ends in an error in state: 300.
+## Ends in an error in state: 302.
##
## bin_op(cons_expr_level,CAT,cat_expr_level) -> cons_expr_level CAT . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ]
##
@@ -3433,9 +3442,9 @@ interactive_expr: True CAT With
-interactive_expr: True COMMA True COMMA With
+interactive_expr: Verbatim COMMA Verbatim COMMA With
##
-## Ends in an error in state: 343.
+## Ends in an error in state: 345.
##
## nsepseq(disj_expr_level,COMMA) -> disj_expr_level COMMA . nsepseq(disj_expr_level,COMMA) [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In Else EOF COLON Attr ]
##
@@ -3445,9 +3454,9 @@ interactive_expr: True COMMA True COMMA With
-interactive_expr: True COMMA True End
+interactive_expr: Verbatim COMMA Verbatim End
##
-## Ends in an error in state: 342.
+## Ends in an error in state: 344.
##
## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In Else EOF COMMA COLON BOOL_OR Attr ]
## bin_op(disj_expr_level,Or,conj_expr_level) -> disj_expr_level . Or conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In Else EOF COMMA COLON BOOL_OR Attr ]
@@ -3461,22 +3470,22 @@ interactive_expr: True COMMA True End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
##
-interactive_expr: True COMMA With
+interactive_expr: Verbatim COMMA With
##
-## Ends in an error in state: 340.
+## Ends in an error in state: 342.
##
## tuple(disj_expr_level) -> disj_expr_level COMMA . nsepseq(disj_expr_level,COMMA) [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Let In Else EOF COLON Attr ]
##
@@ -3486,9 +3495,9 @@ interactive_expr: True COMMA With
-interactive_expr: True CONS With
+interactive_expr: Verbatim CONS With
##
-## Ends in an error in state: 314.
+## Ends in an error in state: 316.
##
## bin_op(add_expr_level,CONS,cons_expr_level) -> add_expr_level CONS . cons_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
##
@@ -3498,12 +3507,12 @@ interactive_expr: True CONS With
-interactive_expr: True Constr With
+interactive_expr: Verbatim Constr With
##
-## Ends in an error in state: 200.
+## Ends in an error in state: 202.
##
-## module_field -> Constr . DOT module_fun [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
-## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## module_field -> Constr . DOT module_fun [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
+## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With Verbatim VBAR Type True Then TIMES String SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Nat NE Mutez Mod MINUS Let LT LPAR LE LBRACKET LBRACE Int In Ident GT GE False End Else EQ EOF Constr CONS COMMA COLON CAT Bytes Begin BOOL_OR BOOL_AND Attr ]
##
## The known suffix of the stack is as follows:
## Constr
@@ -3511,9 +3520,9 @@ interactive_expr: True Constr With
-interactive_expr: True EQ With
+interactive_expr: Verbatim EQ With
##
-## Ends in an error in state: 329.
+## Ends in an error in state: 331.
##
## bin_op(comp_expr_level,EQ,cat_expr_level) -> comp_expr_level EQ . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ]
##
@@ -3523,9 +3532,9 @@ interactive_expr: True EQ With
-interactive_expr: True GE With
+interactive_expr: Verbatim GE With
##
-## Ends in an error in state: 327.
+## Ends in an error in state: 329.
##
## bin_op(comp_expr_level,GE,cat_expr_level) -> comp_expr_level GE . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ]
##
@@ -3535,9 +3544,9 @@ interactive_expr: True GE With
-interactive_expr: True GT With
+interactive_expr: Verbatim GT With
##
-## Ends in an error in state: 325.
+## Ends in an error in state: 327.
##
## bin_op(comp_expr_level,GT,cat_expr_level) -> comp_expr_level GT . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ]
##
@@ -3547,9 +3556,9 @@ interactive_expr: True GT With
-interactive_expr: True LE With
+interactive_expr: Verbatim LE With
##
-## Ends in an error in state: 323.
+## Ends in an error in state: 325.
##
## bin_op(comp_expr_level,LE,cat_expr_level) -> comp_expr_level LE . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ]
##
@@ -3559,9 +3568,9 @@ interactive_expr: True LE With
-interactive_expr: True LT With
+interactive_expr: Verbatim LT With
##
-## Ends in an error in state: 321.
+## Ends in an error in state: 323.
##
## bin_op(comp_expr_level,LT,cat_expr_level) -> comp_expr_level LT . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ]
##
@@ -3571,9 +3580,9 @@ interactive_expr: True LT With
-interactive_expr: True MINUS C_None WILD
+interactive_expr: Verbatim MINUS C_None WILD
##
-## Ends in an error in state: 313.
+## Ends in an error in state: 315.
##
## bin_op(add_expr_level,MINUS,mult_expr_level) -> add_expr_level MINUS mult_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level . Mod unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
@@ -3586,9 +3595,9 @@ interactive_expr: True MINUS C_None WILD
-interactive_expr: True MINUS With
+interactive_expr: Verbatim MINUS With
##
-## Ends in an error in state: 312.
+## Ends in an error in state: 314.
##
## bin_op(add_expr_level,MINUS,mult_expr_level) -> add_expr_level MINUS . mult_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
##
@@ -3598,9 +3607,9 @@ interactive_expr: True MINUS With
-interactive_expr: True Mod With
+interactive_expr: Verbatim Mod With
##
-## Ends in an error in state: 233.
+## Ends in an error in state: 235.
##
## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level Mod . unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
##
@@ -3610,9 +3619,9 @@ interactive_expr: True Mod With
-interactive_expr: True NE With
+interactive_expr: Verbatim NE With
##
-## Ends in an error in state: 319.
+## Ends in an error in state: 321.
##
## bin_op(comp_expr_level,NE,cat_expr_level) -> comp_expr_level NE . cat_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or NE Let LT LE In GT GE End Else EQ EOF COMMA COLON BOOL_OR BOOL_AND Attr ]
##
@@ -3622,9 +3631,9 @@ interactive_expr: True NE With
-interactive_expr: True Or With
+interactive_expr: Verbatim Or With
##
-## Ends in an error in state: 298.
+## Ends in an error in state: 300.
##
## bin_op(disj_expr_level,Or,conj_expr_level) -> disj_expr_level Or . conj_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE Or Let In End Else EOF COMMA COLON BOOL_OR Attr ]
##
@@ -3634,9 +3643,9 @@ interactive_expr: True Or With
-interactive_expr: True PLUS C_None WILD
+interactive_expr: Verbatim PLUS C_None WILD
##
-## Ends in an error in state: 311.
+## Ends in an error in state: 313.
##
## bin_op(add_expr_level,PLUS,mult_expr_level) -> add_expr_level PLUS mult_expr_level . [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
## bin_op(mult_expr_level,Mod,unary_expr_level) -> mult_expr_level . Mod unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
@@ -3649,9 +3658,9 @@ interactive_expr: True PLUS C_None WILD
-interactive_expr: True PLUS With
+interactive_expr: Verbatim PLUS With
##
-## Ends in an error in state: 310.
+## Ends in an error in state: 312.
##
## bin_op(add_expr_level,PLUS,mult_expr_level) -> add_expr_level PLUS . mult_expr_level [ With VBAR Type Then SEMI RPAR RBRACKET RBRACE PLUS Or NE MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
##
@@ -3661,9 +3670,9 @@ interactive_expr: True PLUS With
-interactive_expr: True SLASH With
+interactive_expr: Verbatim SLASH With
##
-## Ends in an error in state: 231.
+## Ends in an error in state: 233.
##
## bin_op(mult_expr_level,SLASH,unary_expr_level) -> mult_expr_level SLASH . unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
##
@@ -3673,9 +3682,9 @@ interactive_expr: True SLASH With
-interactive_expr: True TIMES With
+interactive_expr: Verbatim TIMES With
##
-## Ends in an error in state: 220.
+## Ends in an error in state: 222.
##
## bin_op(mult_expr_level,TIMES,unary_expr_level) -> mult_expr_level TIMES . unary_expr_level [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
##
@@ -3685,33 +3694,9 @@ interactive_expr: True TIMES With
-interactive_expr: True True True WILD
+interactive_expr: Verbatim VBAR
##
-## Ends in an error in state: 226.
-##
-## seq(core_expr) -> core_expr . seq(core_expr) [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
-##
-## The known suffix of the stack is as follows:
-## core_expr
-##
-
-
-
-interactive_expr: True True WILD
-##
-## Ends in an error in state: 224.
-##
-## nseq(core_expr) -> core_expr . seq(core_expr) [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
-##
-## The known suffix of the stack is as follows:
-## core_expr
-##
-
-
-
-interactive_expr: True VBAR
-##
-## Ends in an error in state: 366.
+## Ends in an error in state: 368.
##
## base_expr(expr) -> disj_expr_level . [ With Type Then SEMI RPAR RBRACKET RBRACE Let In EOF COLON Attr ]
## bin_op(disj_expr_level,BOOL_OR,conj_expr_level) -> disj_expr_level . BOOL_OR conj_expr_level [ With Type Then SEMI RPAR RBRACKET RBRACE Or Let In EOF COMMA COLON BOOL_OR Attr ]
@@ -3725,22 +3710,46 @@ interactive_expr: True VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
##
-interactive_expr: True WILD
+interactive_expr: Verbatim Verbatim Verbatim WILD
##
-## Ends in an error in state: 222.
+## Ends in an error in state: 228.
+##
+## seq(core_expr) -> core_expr . seq(core_expr) [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
+##
+## The known suffix of the stack is as follows:
+## core_expr
+##
+
+
+
+interactive_expr: Verbatim Verbatim WILD
+##
+## Ends in an error in state: 226.
+##
+## nseq(core_expr) -> core_expr . seq(core_expr) [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
+##
+## The known suffix of the stack is as follows:
+## core_expr
+##
+
+
+
+interactive_expr: Verbatim WILD
+##
+## Ends in an error in state: 224.
##
## call_expr -> core_expr . nseq(core_expr) [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
## call_expr_level -> core_expr . [ With VBAR Type Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or NE Mod MINUS Let LT LE In GT GE End Else EQ EOF CONS COMMA COLON CAT BOOL_OR BOOL_AND Attr ]
@@ -3751,9 +3760,9 @@ interactive_expr: True WILD
-interactive_expr: True With
+interactive_expr: Verbatim With
##
-## Ends in an error in state: 597.
+## Ends in an error in state: 598.
##
## interactive_expr -> expr . EOF [ # ]
##
@@ -3764,25 +3773,25 @@ interactive_expr: True With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
##
interactive_expr: With
##
-## Ends in an error in state: 595.
+## Ends in an error in state: 596.
##
## interactive_expr' -> . interactive_expr [ # ]
##
@@ -3794,7 +3803,7 @@ interactive_expr: With
contract: Let Ident WILD COLON String VBAR
##
-## Ends in an error in state: 158.
+## Ends in an error in state: 159.
##
## let_binding -> Ident nseq(sub_irrefutable) option(type_annotation) . EQ expr [ Type Let In EOF Attr ]
##
@@ -3808,15 +3817,15 @@ contract: Let Ident WILD COLON String VBAR
## In state 28, spurious reduction of production cartesian -> core_type
## In state 36, spurious reduction of production fun_type -> cartesian
## In state 27, spurious reduction of production type_expr -> fun_type
-## In state 156, spurious reduction of production type_annotation -> COLON type_expr
-## In state 157, spurious reduction of production option(type_annotation) -> type_annotation
+## In state 157, spurious reduction of production type_annotation -> COLON type_expr
+## In state 158, spurious reduction of production option(type_annotation) -> type_annotation
##
contract: Let Ident WILD EQ With
##
-## Ends in an error in state: 159.
+## Ends in an error in state: 160.
##
## let_binding -> Ident nseq(sub_irrefutable) option(type_annotation) EQ . expr [ Type Let In EOF Attr ]
##
@@ -3828,7 +3837,7 @@ contract: Let Ident WILD EQ With
contract: Let Ident WILD WILD With
##
-## Ends in an error in state: 151.
+## Ends in an error in state: 152.
##
## seq(sub_irrefutable) -> sub_irrefutable . seq(sub_irrefutable) [ EQ COLON ]
##
@@ -3840,7 +3849,7 @@ contract: Let Ident WILD WILD With
contract: Let Ident WILD With
##
-## Ends in an error in state: 150.
+## Ends in an error in state: 151.
##
## nseq(sub_irrefutable) -> sub_irrefutable . seq(sub_irrefutable) [ EQ COLON ]
##
@@ -3852,7 +3861,7 @@ contract: Let Ident WILD With
contract: Let Ident With
##
-## Ends in an error in state: 149.
+## Ends in an error in state: 150.
##
## let_binding -> Ident . nseq(sub_irrefutable) option(type_annotation) EQ expr [ Type Let In EOF Attr ]
## sub_irrefutable -> Ident . [ EQ COMMA COLON ]
@@ -3865,7 +3874,7 @@ contract: Let Ident With
contract: Let LBRACE Ident EQ Bytes SEMI Ident EQ Bytes SEMI With
##
-## Ends in an error in state: 127.
+## Ends in an error in state: 128.
##
## nsepseq(field_pattern,SEMI) -> field_pattern SEMI . nsepseq(field_pattern,SEMI) [ RBRACE ]
## seq(__anonymous_0(field_pattern,SEMI)) -> field_pattern SEMI . seq(__anonymous_0(field_pattern,SEMI)) [ RBRACE ]
@@ -3878,7 +3887,7 @@ contract: Let LBRACE Ident EQ Bytes SEMI Ident EQ Bytes SEMI With
contract: Let LBRACE Ident EQ Bytes SEMI Ident EQ Bytes With
##
-## Ends in an error in state: 126.
+## Ends in an error in state: 127.
##
## nsepseq(field_pattern,SEMI) -> field_pattern . [ RBRACE ]
## nsepseq(field_pattern,SEMI) -> field_pattern . SEMI nsepseq(field_pattern,SEMI) [ RBRACE ]
@@ -3892,7 +3901,7 @@ contract: Let LBRACE Ident EQ Bytes SEMI Ident EQ Bytes With
contract: Let LBRACE Ident EQ Bytes SEMI With
##
-## Ends in an error in state: 123.
+## Ends in an error in state: 124.
##
## nsepseq(field_pattern,SEMI) -> field_pattern SEMI . nsepseq(field_pattern,SEMI) [ RBRACE ]
## nseq(__anonymous_0(field_pattern,SEMI)) -> field_pattern SEMI . seq(__anonymous_0(field_pattern,SEMI)) [ RBRACE ]
@@ -3905,7 +3914,7 @@ contract: Let LBRACE Ident EQ Bytes SEMI With
contract: Let LBRACE Ident EQ Bytes With
##
-## Ends in an error in state: 122.
+## Ends in an error in state: 123.
##
## nsepseq(field_pattern,SEMI) -> field_pattern . [ RBRACE ]
## nsepseq(field_pattern,SEMI) -> field_pattern . SEMI nsepseq(field_pattern,SEMI) [ RBRACE ]
@@ -3955,7 +3964,7 @@ contract: Let LBRACE With
contract: Let LPAR Constr C_Some With
##
-## Ends in an error in state: 80.
+## Ends in an error in state: 81.
##
## constr_pattern -> C_Some . sub_pattern [ SEMI RPAR RBRACKET RBRACE CONS COMMA ARROW ]
##
@@ -3967,7 +3976,7 @@ contract: Let LPAR Constr C_Some With
contract: Let LPAR Constr Constr With
##
-## Ends in an error in state: 79.
+## Ends in an error in state: 80.
##
## constr_pattern -> Constr . [ SEMI RPAR RBRACKET RBRACE CONS COMMA ARROW ]
## constr_pattern -> Constr . sub_pattern [ SEMI RPAR RBRACKET RBRACE CONS COMMA ARROW ]
@@ -3980,7 +3989,7 @@ contract: Let LPAR Constr Constr With
contract: Let LPAR Constr LBRACKET WILD RPAR
##
-## Ends in an error in state: 92.
+## Ends in an error in state: 93.
##
## nsepseq(tail,SEMI) -> tail . [ RBRACKET ]
## nsepseq(tail,SEMI) -> tail . SEMI nsepseq(tail,SEMI) [ RBRACKET ]
@@ -3993,14 +4002,14 @@ contract: Let LPAR Constr LBRACKET WILD RPAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 96, spurious reduction of production tail -> sub_pattern
+## In state 97, spurious reduction of production tail -> sub_pattern
##
contract: Let LPAR Constr LBRACKET WILD SEMI WILD RPAR
##
-## Ends in an error in state: 94.
+## Ends in an error in state: 95.
##
## nsepseq(tail,SEMI) -> tail . [ RBRACKET ]
## nsepseq(tail,SEMI) -> tail . SEMI nsepseq(tail,SEMI) [ RBRACKET ]
@@ -4013,14 +4022,14 @@ contract: Let LPAR Constr LBRACKET WILD SEMI WILD RPAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 96, spurious reduction of production tail -> sub_pattern
+## In state 97, spurious reduction of production tail -> sub_pattern
##
contract: Let LPAR Constr LBRACKET WILD SEMI WILD SEMI With
##
-## Ends in an error in state: 95.
+## Ends in an error in state: 96.
##
## nsepseq(tail,SEMI) -> tail SEMI . nsepseq(tail,SEMI) [ RBRACKET ]
## seq(__anonymous_0(tail,SEMI)) -> tail SEMI . seq(__anonymous_0(tail,SEMI)) [ RBRACKET ]
@@ -4033,7 +4042,7 @@ contract: Let LPAR Constr LBRACKET WILD SEMI WILD SEMI With
contract: Let LPAR Constr LBRACKET WILD SEMI With
##
-## Ends in an error in state: 93.
+## Ends in an error in state: 94.
##
## nsepseq(tail,SEMI) -> tail SEMI . nsepseq(tail,SEMI) [ RBRACKET ]
## nseq(__anonymous_0(tail,SEMI)) -> tail SEMI . seq(__anonymous_0(tail,SEMI)) [ RBRACKET ]
@@ -4046,7 +4055,7 @@ contract: Let LPAR Constr LBRACKET WILD SEMI With
contract: Let LPAR Constr LBRACKET With
##
-## Ends in an error in state: 75.
+## Ends in an error in state: 76.
##
## list__(tail) -> LBRACKET . option(sep_or_term_list(tail,SEMI)) RBRACKET [ SEMI RPAR RBRACKET RBRACE CONS COMMA ARROW ]
##
@@ -4058,7 +4067,7 @@ contract: Let LPAR Constr LBRACKET With
contract: Let LPAR Constr LPAR WILD COMMA WILD COMMA With
##
-## Ends in an error in state: 112.
+## Ends in an error in state: 113.
##
## nsepseq(tail,COMMA) -> tail COMMA . nsepseq(tail,COMMA) [ RPAR ]
##
@@ -4070,7 +4079,7 @@ contract: Let LPAR Constr LPAR WILD COMMA WILD COMMA With
contract: Let LPAR Constr LPAR WILD COMMA WILD SEMI
##
-## Ends in an error in state: 111.
+## Ends in an error in state: 112.
##
## nsepseq(tail,COMMA) -> tail . [ RPAR ]
## nsepseq(tail,COMMA) -> tail . COMMA nsepseq(tail,COMMA) [ RPAR ]
@@ -4082,14 +4091,14 @@ contract: Let LPAR Constr LPAR WILD COMMA WILD SEMI
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 96, spurious reduction of production tail -> sub_pattern
+## In state 97, spurious reduction of production tail -> sub_pattern
##
contract: Let LPAR Constr LPAR WILD COMMA With
##
-## Ends in an error in state: 110.
+## Ends in an error in state: 111.
##
## tuple(tail) -> tail COMMA . nsepseq(tail,COMMA) [ RPAR ]
##
@@ -4101,7 +4110,7 @@ contract: Let LPAR Constr LPAR WILD COMMA With
contract: Let LPAR Constr LPAR WILD CONS With
##
-## Ends in an error in state: 97.
+## Ends in an error in state: 98.
##
## tail -> sub_pattern CONS . tail [ SEMI RPAR RBRACKET COMMA ARROW ]
##
@@ -4113,7 +4122,7 @@ contract: Let LPAR Constr LPAR WILD CONS With
contract: Let LPAR Constr LPAR WILD SEMI
##
-## Ends in an error in state: 108.
+## Ends in an error in state: 109.
##
## par(tail) -> LPAR tail . RPAR [ SEMI RPAR RBRACKET RBRACE CONS COMMA ARROW ]
## tuple(tail) -> tail . COMMA nsepseq(tail,COMMA) [ RPAR ]
@@ -4125,14 +4134,14 @@ contract: Let LPAR Constr LPAR WILD SEMI
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 96, spurious reduction of production tail -> sub_pattern
+## In state 97, spurious reduction of production tail -> sub_pattern
##
contract: Let LPAR Constr LPAR WILD With
##
-## Ends in an error in state: 96.
+## Ends in an error in state: 97.
##
## tail -> sub_pattern . [ SEMI RPAR RBRACKET COMMA ARROW ]
## tail -> sub_pattern . CONS tail [ SEMI RPAR RBRACKET COMMA ARROW ]
@@ -4145,7 +4154,7 @@ contract: Let LPAR Constr LPAR WILD With
contract: Let LPAR Constr LPAR With
##
-## Ends in an error in state: 74.
+## Ends in an error in state: 75.
##
## par(ptuple) -> LPAR . ptuple RPAR [ SEMI RPAR RBRACKET RBRACE CONS COMMA ARROW ]
## par(tail) -> LPAR . tail RPAR [ SEMI RPAR RBRACKET RBRACE CONS COMMA ARROW ]
@@ -4159,7 +4168,7 @@ contract: Let LPAR Constr LPAR With
contract: Let LPAR Constr WILD With
##
-## Ends in an error in state: 147.
+## Ends in an error in state: 148.
##
## par(closed_irrefutable) -> LPAR closed_irrefutable . RPAR [ WILD RPAR LPAR LBRACE Ident EQ Constr COMMA COLON ARROW ]
##
@@ -4171,7 +4180,7 @@ contract: Let LPAR Constr WILD With
contract: Let LPAR Constr With
##
-## Ends in an error in state: 130.
+## Ends in an error in state: 131.
##
## closed_irrefutable -> Constr . sub_pattern [ RPAR ]
## sub_irrefutable -> Constr . [ RPAR COMMA COLON ]
@@ -4184,7 +4193,7 @@ contract: Let LPAR Constr With
contract: Let LPAR WILD COLON With
##
-## Ends in an error in state: 145.
+## Ends in an error in state: 146.
##
## typed_pattern -> irrefutable COLON . type_expr [ RPAR ]
##
@@ -4196,7 +4205,7 @@ contract: Let LPAR WILD COLON With
contract: Let LPAR WILD WILD
##
-## Ends in an error in state: 144.
+## Ends in an error in state: 145.
##
## closed_irrefutable -> irrefutable . [ RPAR ]
## typed_pattern -> irrefutable . COLON type_expr [ RPAR ]
@@ -4208,7 +4217,7 @@ contract: Let LPAR WILD WILD
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 135, spurious reduction of production irrefutable -> sub_irrefutable
+## In state 136, spurious reduction of production irrefutable -> sub_irrefutable
##
@@ -4228,7 +4237,7 @@ contract: Let LPAR With
contract: Let Rec WILD EQ Bytes With
##
-## Ends in an error in state: 584.
+## Ends in an error in state: 585.
##
## let_declaration -> Let Rec let_binding . seq(Attr) [ Type Let EOF ]
##
@@ -4239,19 +4248,19 @@ contract: Let Rec WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
@@ -4270,7 +4279,7 @@ contract: Let Rec With
contract: Let WILD COLON Ident VBAR
##
-## Ends in an error in state: 373.
+## Ends in an error in state: 375.
##
## let_binding -> irrefutable option(type_annotation) . EQ expr [ Type Let In EOF Attr ]
##
@@ -4284,15 +4293,15 @@ contract: Let WILD COLON Ident VBAR
## In state 28, spurious reduction of production cartesian -> core_type
## In state 36, spurious reduction of production fun_type -> cartesian
## In state 27, spurious reduction of production type_expr -> fun_type
-## In state 156, spurious reduction of production type_annotation -> COLON type_expr
-## In state 157, spurious reduction of production option(type_annotation) -> type_annotation
+## In state 157, spurious reduction of production type_annotation -> COLON type_expr
+## In state 158, spurious reduction of production option(type_annotation) -> type_annotation
##
contract: Let WILD COLON With
##
-## Ends in an error in state: 155.
+## Ends in an error in state: 156.
##
## type_annotation -> COLON . type_expr [ EQ ]
##
@@ -4304,7 +4313,7 @@ contract: Let WILD COLON With
contract: Let WILD COMMA WILD COMMA With
##
-## Ends in an error in state: 139.
+## Ends in an error in state: 140.
##
## nsepseq(sub_irrefutable,COMMA) -> sub_irrefutable COMMA . nsepseq(sub_irrefutable,COMMA) [ WILD RPAR LPAR LBRACE Ident EQ Constr COLON ARROW ]
##
@@ -4316,7 +4325,7 @@ contract: Let WILD COMMA WILD COMMA With
contract: Let WILD COMMA WILD With
##
-## Ends in an error in state: 138.
+## Ends in an error in state: 139.
##
## nsepseq(sub_irrefutable,COMMA) -> sub_irrefutable . [ WILD RPAR LPAR LBRACE Ident EQ Constr COLON ARROW ]
## nsepseq(sub_irrefutable,COMMA) -> sub_irrefutable . COMMA nsepseq(sub_irrefutable,COMMA) [ WILD RPAR LPAR LBRACE Ident EQ Constr COLON ARROW ]
@@ -4329,7 +4338,7 @@ contract: Let WILD COMMA WILD With
contract: Let WILD COMMA With
##
-## Ends in an error in state: 136.
+## Ends in an error in state: 137.
##
## tuple(sub_irrefutable) -> sub_irrefutable COMMA . nsepseq(sub_irrefutable,COMMA) [ WILD RPAR LPAR LBRACE Ident EQ Constr COLON ARROW ]
##
@@ -4341,7 +4350,7 @@ contract: Let WILD COMMA With
contract: Let WILD EQ Bytes Attr With
##
-## Ends in an error in state: 172.
+## Ends in an error in state: 174.
##
## seq(Attr) -> Attr . seq(Attr) [ Type Let In EOF ]
##
@@ -4353,7 +4362,7 @@ contract: Let WILD EQ Bytes Attr With
contract: Let WILD EQ Bytes With
##
-## Ends in an error in state: 586.
+## Ends in an error in state: 587.
##
## let_declaration -> Let let_binding . seq(Attr) [ Type Let EOF ]
##
@@ -4364,26 +4373,26 @@ contract: Let WILD EQ Bytes With
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 222, spurious reduction of production call_expr_level -> core_expr
-## In state 229, spurious reduction of production unary_expr_level -> call_expr_level
-## In state 216, spurious reduction of production mult_expr_level -> unary_expr_level
-## In state 219, spurious reduction of production add_expr_level -> mult_expr_level
-## In state 309, spurious reduction of production cons_expr_level -> add_expr_level
-## In state 299, spurious reduction of production cat_expr_level -> cons_expr_level
-## In state 331, spurious reduction of production comp_expr_level -> cat_expr_level
-## In state 338, spurious reduction of production conj_expr_level -> comp_expr_level
-## In state 345, spurious reduction of production disj_expr_level -> conj_expr_level
-## In state 366, spurious reduction of production base_expr(expr) -> disj_expr_level
-## In state 368, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
-## In state 369, spurious reduction of production expr -> base_cond__open(expr)
-## In state 375, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
+## In state 224, spurious reduction of production call_expr_level -> core_expr
+## In state 231, spurious reduction of production unary_expr_level -> call_expr_level
+## In state 218, spurious reduction of production mult_expr_level -> unary_expr_level
+## In state 221, spurious reduction of production add_expr_level -> mult_expr_level
+## In state 311, spurious reduction of production cons_expr_level -> add_expr_level
+## In state 301, spurious reduction of production cat_expr_level -> cons_expr_level
+## In state 333, spurious reduction of production comp_expr_level -> cat_expr_level
+## In state 340, spurious reduction of production conj_expr_level -> comp_expr_level
+## In state 347, spurious reduction of production disj_expr_level -> conj_expr_level
+## In state 368, spurious reduction of production base_expr(expr) -> disj_expr_level
+## In state 370, spurious reduction of production base_cond__open(expr) -> base_expr(expr)
+## In state 371, spurious reduction of production expr -> base_cond__open(expr)
+## In state 377, spurious reduction of production let_binding -> irrefutable option(type_annotation) EQ expr
##
contract: Let WILD EQ With
##
-## Ends in an error in state: 374.
+## Ends in an error in state: 376.
##
## let_binding -> irrefutable option(type_annotation) EQ . expr [ Type Let In EOF Attr ]
##
@@ -4395,7 +4404,7 @@ contract: Let WILD EQ With
contract: Let WILD WILD
##
-## Ends in an error in state: 372.
+## Ends in an error in state: 374.
##
## let_binding -> irrefutable . option(type_annotation) EQ expr [ Type Let In EOF Attr ]
##
@@ -4406,14 +4415,14 @@ contract: Let WILD WILD
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 135, spurious reduction of production irrefutable -> sub_irrefutable
+## In state 136, spurious reduction of production irrefutable -> sub_irrefutable
##
contract: Let WILD With
##
-## Ends in an error in state: 135.
+## Ends in an error in state: 136.
##
## irrefutable -> sub_irrefutable . [ WILD RPAR LPAR LBRACE Ident EQ Constr COLON ARROW ]
## tuple(sub_irrefutable) -> sub_irrefutable . COMMA nsepseq(sub_irrefutable,COMMA) [ WILD RPAR LPAR LBRACE Ident EQ Constr COLON ARROW ]
@@ -4489,7 +4498,7 @@ contract: Type Ident EQ Constr With
contract: Type Ident EQ Ident VBAR
##
-## Ends in an error in state: 592.
+## Ends in an error in state: 593.
##
## declarations -> declaration . [ EOF ]
## declarations -> declaration . declarations [ EOF ]
@@ -4505,7 +4514,7 @@ contract: Type Ident EQ Ident VBAR
## In state 36, spurious reduction of production fun_type -> cartesian
## In state 27, spurious reduction of production type_expr -> fun_type
## In state 61, spurious reduction of production type_decl -> Type Ident EQ type_expr
-## In state 588, spurious reduction of production declaration -> type_decl
+## In state 589, spurious reduction of production declaration -> type_decl
##
diff --git a/src/passes/01-parser/pascaligo.ml b/src/passes/01-parser/pascaligo.ml
index 02b8f462e..b2c6ab9f4 100644
--- a/src/passes/01-parser/pascaligo.ml
+++ b/src/passes/01-parser/pascaligo.ml
@@ -19,7 +19,8 @@ module SubIO =
ext : string; (* ".ligo" *)
mode : [`Byte | `Point];
cmd : EvalOpt.command;
- mono : bool
+ mono : bool;
+ pretty : bool
>
let options : options =
@@ -34,6 +35,7 @@ module SubIO =
method mode = `Point
method cmd = EvalOpt.Quiet
method mono = false
+ method pretty = false
end
let make =
@@ -46,6 +48,7 @@ module SubIO =
~mode:options#mode
~cmd:options#cmd
~mono:options#mono
+ ~pretty:options#pretty
end
module Parser =
diff --git a/src/passes/01-parser/pascaligo/.links b/src/passes/01-parser/pascaligo/.links
index 45c9a4602..aca47d8ff 100644
--- a/src/passes/01-parser/pascaligo/.links
+++ b/src/passes/01-parser/pascaligo/.links
@@ -21,5 +21,3 @@ $HOME/git/OCaml-build/Makefile
../shared/ParserUnit.mli
../shared/ParserUnit.ml
../shared/LexerLib.ml
-
-$HOME/git/ligo/_build/default/src/passes/1-parser/pascaligo/ParErr.ml
diff --git a/src/passes/01-parser/pascaligo/AST.ml b/src/passes/01-parser/pascaligo/AST.ml
index 076bbe0fd..ad5e8be7e 100644
--- a/src/passes/01-parser/pascaligo/AST.ml
+++ b/src/passes/01-parser/pascaligo/AST.ml
@@ -106,14 +106,15 @@ type eof = Region.t
(* Literals *)
-type variable = string reg
-type fun_name = string reg
-type type_name = string reg
-type field_name = string reg
-type map_name = string reg
-type set_name = string reg
-type constr = string reg
-type attribute = string reg
+type variable = string reg
+type fun_name = string reg
+type type_name = string reg
+type type_constr = string reg
+type field_name = string reg
+type map_name = string reg
+type set_name = string reg
+type constr = string reg
+type attribute = string reg
(* Parentheses *)
@@ -181,11 +182,11 @@ and type_expr =
TProd of cartesian
| TSum of (variant reg, vbar) nsepseq reg
| TRecord of field_decl reg ne_injection reg
-| TApp of (type_name * type_tuple) reg
+| TApp of (type_constr * type_tuple) reg
| TFun of (type_expr * arrow * type_expr) reg
| TPar of type_expr par reg
| TVar of variable
-| TStringLiteral of Lexer.lexeme reg
+| TString of Lexer.lexeme reg
and cartesian = (type_expr, times) nsepseq reg
@@ -205,7 +206,6 @@ and type_tuple = (type_expr, comma) nsepseq par reg
(* Function and procedure declarations *)
and fun_expr = {
- kwd_recursive: kwd_recursive option;
kwd_function : kwd_function;
param : parameters;
colon : colon;
@@ -215,17 +215,17 @@ and fun_expr = {
}
and fun_decl = {
- kwd_recursive: kwd_recursive option;
- kwd_function : kwd_function;
- fun_name : variable;
- param : parameters;
- colon : colon;
- ret_type : type_expr;
- kwd_is : kwd_is;
- block_with : (block reg * kwd_with) option;
- return : expr;
- terminator : semi option;
- attributes : attr_decl option
+ kwd_recursive : kwd_recursive option;
+ kwd_function : kwd_function;
+ fun_name : variable;
+ param : parameters;
+ colon : colon;
+ ret_type : type_expr;
+ kwd_is : kwd_is;
+ block_with : (block reg * kwd_with) option;
+ return : expr;
+ terminator : semi option;
+ attributes : attr_decl option
}
and parameters = (param_decl, semi) nsepseq par reg
@@ -249,19 +249,14 @@ and param_var = {
}
and block = {
- opening : block_opening;
+ enclosing : block_enclosing;
statements : statements;
- terminator : semi option;
- closing : block_closing
+ terminator : semi option
}
-and block_opening =
- Block of kwd_block * lbrace
-| Begin of kwd_begin
-
-and block_closing =
- Block of rbrace
-| End of kwd_end
+and block_enclosing =
+ Block of kwd_block * lbrace * rbrace
+| BeginEnd of kwd_begin * kwd_end
and statements = (statement, semi) nsepseq
@@ -378,10 +373,10 @@ and set_membership = {
and 'a case = {
kwd_case : kwd_case;
expr : expr;
- opening : opening;
+ kwd_of : kwd_of;
+ enclosing : enclosing;
lead_vbar : vbar option;
- cases : ('a case_clause reg, vbar) nsepseq reg;
- closing : closing
+ cases : ('a case_clause reg, vbar) nsepseq reg
}
and 'a case_clause = {
@@ -417,13 +412,12 @@ and for_loop =
| ForCollect of for_collect reg
and for_int = {
- kwd_for : kwd_for;
- assign : var_assign reg;
- kwd_to : kwd_to;
- bound : expr;
- kwd_step : kwd_step option;
- step : expr option;
- block : block reg
+ kwd_for : kwd_for;
+ assign : var_assign reg;
+ kwd_to : kwd_to;
+ bound : expr;
+ step : (kwd_step * expr) option;
+ block : block reg
}
and var_assign = {
@@ -452,7 +446,7 @@ and collection =
and expr =
ECase of expr case reg
| ECond of cond_expr reg
-| EAnnot of annot_expr reg
+| EAnnot of annot_expr par reg
| ELogic of logic_expr
| EArith of arith_expr
| EString of string_expr
@@ -471,34 +465,12 @@ and expr =
| EPar of expr par reg
| EFun of fun_expr reg
-and annot_expr = (expr * type_expr)
+and annot_expr = expr * colon * type_expr
and set_expr =
SetInj of expr injection reg
| SetMem of set_membership reg
-and 'a injection = {
- opening : opening;
- elements : ('a, semi) sepseq;
- terminator : semi option;
- closing : closing
-}
-
-and 'a ne_injection = {
- opening : opening;
- ne_elements : ('a, semi) nsepseq;
- terminator : semi option;
- closing : closing
-}
-
-and opening =
- Kwd of keyword
-| KwdBracket of keyword * lbracket
-
-and closing =
- End of kwd_end
-| RBracket of rbracket
-
and map_expr =
MapLookUp of map_lookup reg
| MapInj of binding reg injection reg
@@ -520,7 +492,7 @@ and logic_expr =
and bool_expr =
Or of kwd_or bin_op reg
| And of kwd_and bin_op reg
-| Not of kwd_not un_op reg
+| Not of kwd_not un_op reg
| False of c_False
| True of c_True
@@ -544,15 +516,15 @@ and comp_expr =
| Neq of neq bin_op reg
and arith_expr =
- Add of plus bin_op reg
-| Sub of minus bin_op reg
-| Mult of times bin_op reg
-| Div of slash bin_op reg
-| Mod of kwd_mod bin_op reg
-| Neg of minus un_op reg
-| Int of (Lexer.lexeme * Z.t) reg
-| Nat of (Lexer.lexeme * Z.t) reg
-| Mutez of (Lexer.lexeme * Z.t) reg
+ Add of plus bin_op reg
+| Sub of minus bin_op reg
+| Mult of times bin_op reg
+| Div of slash bin_op reg
+| Mod of kwd_mod bin_op reg
+| Neg of minus un_op reg
+| Int of (Lexer.lexeme * Z.t) reg
+| Nat of (Lexer.lexeme * Z.t) reg
+| Mutez of (Lexer.lexeme * Z.t) reg
and string_expr =
Cat of cat bin_op reg
@@ -569,13 +541,13 @@ and constr_expr =
| NoneExpr of c_None
| ConstrApp of (constr * arguments option) reg
-and field_assign = {
+and field_assignment = {
field_name : field_name;
- equal : equal;
+ assignment : equal;
field_expr : expr
}
-and record = field_assign reg ne_injection
+and record = field_assignment reg ne_injection
and projection = {
struct_name : variable;
@@ -584,14 +556,14 @@ and projection = {
}
and update = {
- record : path;
+ record : path;
kwd_with : kwd_with;
- updates : field_path_assign reg ne_injection reg
+ updates : field_path_assignment reg ne_injection reg
}
-and field_path_assign = {
- field_path : (field_name, dot) nsepseq;
- equal : equal;
+and field_path_assignment = {
+ field_path : path;
+ assignment : equal;
field_expr : expr
}
@@ -605,6 +577,38 @@ and fun_call = (expr * arguments) reg
and arguments = tuple_expr
+(* Injections *)
+
+and 'a injection = {
+ kind : injection_kwd;
+ enclosing : enclosing;
+ elements : ('a, semi) sepseq;
+ terminator : semi option
+}
+
+and injection_kwd =
+ InjSet of keyword
+| InjMap of keyword
+| InjBigMap of keyword
+| InjList of keyword
+
+and enclosing =
+ Brackets of lbracket * rbracket
+| End of kwd_end
+
+and 'a ne_injection = {
+ kind : ne_injection_kwd;
+ enclosing : enclosing;
+ ne_elements : ('a, semi) nsepseq;
+ terminator : semi option
+}
+
+and ne_injection_kwd =
+ NEInjAttr of keyword
+| NEInjSet of keyword
+| NEInjMap of keyword
+| NEInjRecord of keyword
+
(* Patterns *)
and pattern =
@@ -635,7 +639,7 @@ and list_pattern =
| PCons of (pattern, cons) nsepseq reg
-(* Projecting regions *)
+(* PROJECTING REGIONS *)
let rec last to_region = function
[] -> Region.ghost
@@ -660,7 +664,7 @@ let type_expr_to_region = function
| TApp {region; _}
| TFun {region; _}
| TPar {region; _}
-| TStringLiteral {region; _}
+| TString {region; _}
| TVar {region; _} -> region
let rec expr_to_region = function
diff --git a/src/passes/01-parser/pascaligo/Parser.mly b/src/passes/01-parser/pascaligo/Parser.mly
index 668fb29e6..8052be9fc 100644
--- a/src/passes/01-parser/pascaligo/Parser.mly
+++ b/src/passes/01-parser/pascaligo/Parser.mly
@@ -122,7 +122,8 @@ attr_decl:
open_attr_decl ";"? { $1 }
open_attr_decl:
- ne_injection("attributes","") { $1 }
+ ne_injection("attributes","") {
+ $1 (fun region -> NEInjAttr region) }
(* Type declarations *)
@@ -160,9 +161,9 @@ cartesian:
in TProd {region; value} }
core_type:
- type_name { TVar $1 }
-| "" { TStringLiteral $1 }
-| par(type_expr) { TPar $1 }
+ type_name { TVar $1 }
+| "" { TString $1 }
+| par(type_expr) { TPar $1 }
| type_name type_tuple {
let region = cover $1.region $2.region
in TApp {region; value = $1,$2}
@@ -214,19 +215,19 @@ record_type:
let () = Utils.nsepseq_to_list ne_elements
|> Scoping.check_fields in
let region = cover $1 $3
- and value = {opening = Kwd $1;
+ and value = {kind = NEInjRecord $1;
+ enclosing = End $3;
ne_elements;
- terminator;
- closing = End $3}
+ terminator}
in TRecord {region; value}
}
| "record" "[" sep_or_term_list(field_decl,";") "]" {
let ne_elements, terminator = $3 in
let region = cover $1 $4
- and value = {opening = KwdBracket ($1,$2);
+ and value = {kind = NEInjRecord $1;
+ enclosing = Brackets ($2,$4);
ne_elements;
- terminator;
- closing = RBracket $4}
+ terminator}
in TRecord {region; value} }
field_decl:
@@ -238,16 +239,15 @@ field_decl:
fun_expr:
- | ioption ("recursive") "function" parameters ":" type_expr "is" expr {
- let stop = expr_to_region $7 in
- let region = cover $2 stop
- and value = {kwd_recursive= $1;
- kwd_function = $2;
- param = $3;
- colon = $4;
- ret_type = $5;
- kwd_is = $6;
- return = $7}
+ "function" parameters ":" type_expr "is" expr {
+ let stop = expr_to_region $6 in
+ let region = cover $1 stop
+ and value = {kwd_function = $1;
+ param = $2;
+ colon = $3;
+ ret_type = $4;
+ kwd_is = $5;
+ return = $6}
in {region; value} }
(* Function declarations *)
@@ -271,7 +271,8 @@ open_fun_decl:
attributes = None}
in {region; value}
}
-| ioption ("recursive") "function" fun_name parameters ":" type_expr "is" expr {
+| ioption ("recursive") "function" fun_name parameters ":" type_expr "is"
+ expr {
Scoping.check_reserved_name $3;
let stop = expr_to_region $8 in
let region = cover $2 stop
@@ -326,19 +327,17 @@ block:
"begin" sep_or_term_list(statement,";") "end" {
let statements, terminator = $2 in
let region = cover $1 $3
- and value = {opening = Begin $1;
+ and value = {enclosing = BeginEnd ($1,$3);
statements;
- terminator;
- closing = End $3}
+ terminator}
in {region; value}
}
| "block" "{" sep_or_term_list(statement,";") "}" {
let statements, terminator = $3 in
let region = cover $1 $4
- and value = {opening = Block ($1,$2);
+ and value = {enclosing = Block ($1,$2,$4);
statements;
- terminator;
- closing = Block $4}
+ terminator}
in {region; value} }
statement:
@@ -404,124 +403,122 @@ instruction:
set_remove:
"remove" expr "from" "set" path {
let region = cover $1 (path_to_region $5) in
- let value = {
- kwd_remove = $1;
- element = $2;
- kwd_from = $3;
- kwd_set = $4;
- set = $5}
+ let value = {kwd_remove = $1;
+ element = $2;
+ kwd_from = $3;
+ kwd_set = $4;
+ set = $5}
in {region; value} }
map_remove:
"remove" expr "from" "map" path {
let region = cover $1 (path_to_region $5) in
- let value = {
- kwd_remove = $1;
- key = $2;
- kwd_from = $3;
- kwd_map = $4;
- map = $5}
+ let value = {kwd_remove = $1;
+ key = $2;
+ kwd_from = $3;
+ kwd_map = $4;
+ map = $5}
in {region; value} }
set_patch:
"patch" path "with" ne_injection("set",expr) {
- let region = cover $1 $4.region in
- let value = {
- kwd_patch = $1;
- path = $2;
- kwd_with = $3;
- set_inj = $4}
+ let set_inj = $4 (fun region -> NEInjSet region) in
+ let region = cover $1 set_inj.region in
+ let value = {kwd_patch = $1;
+ path = $2;
+ kwd_with = $3;
+ set_inj}
in {region; value} }
map_patch:
"patch" path "with" ne_injection("map",binding) {
- let region = cover $1 $4.region in
- let value = {
- kwd_patch = $1;
- path = $2;
- kwd_with = $3;
- map_inj = $4}
+ let map_inj = $4 (fun region -> NEInjMap region) in
+ let region = cover $1 map_inj.region in
+ let value = {kwd_patch = $1;
+ path = $2;
+ kwd_with = $3;
+ map_inj}
in {region; value} }
injection(Kind,element):
Kind sep_or_term_list(element,";") "end" {
- let elements, terminator = $2 in
- let region = cover $1 $3
- and value = {
- opening = Kwd $1;
- elements = Some elements;
- terminator;
- closing = End $3}
- in {region; value}
+ fun mk_kwd ->
+ let elements, terminator = $2 in
+ let region = cover $1 $3
+ and value = {
+ kind = mk_kwd $1;
+ enclosing = End $3;
+ elements = Some elements;
+ terminator}
+ in {region; value}
}
| Kind "end" {
- let region = cover $1 $2
- and value = {
- opening = Kwd $1;
- elements = None;
- terminator = None;
- closing = End $2}
- in {region; value}
+ fun mk_kwd ->
+ let region = cover $1 $2
+ and value = {kind = mk_kwd $1;
+ enclosing = End $2;
+ elements = None;
+ terminator = None}
+ in {region; value}
}
| Kind "[" sep_or_term_list(element,";") "]" {
- let elements, terminator = $3 in
- let region = cover $1 $4
- and value = {
- opening = KwdBracket ($1,$2);
- elements = Some elements;
- terminator;
- closing = RBracket $4}
- in {region; value}
+ fun mk_kwd ->
+ let elements, terminator = $3 in
+ let region = cover $1 $4
+ and value = {kind = mk_kwd $1;
+ enclosing = Brackets ($2,$4);
+ elements = Some elements;
+ terminator}
+ in {region; value}
}
| Kind "[" "]" {
- let region = cover $1 $3
- and value = {
- opening = KwdBracket ($1,$2);
- elements = None;
- terminator = None;
- closing = RBracket $3}
- in {region; value} }
+ fun mk_kwd ->
+ let region = cover $1 $3
+ and value = {kind = mk_kwd $1;
+ enclosing = Brackets ($2,$3);
+ elements = None;
+ terminator = None}
+ in {region; value} }
ne_injection(Kind,element):
Kind sep_or_term_list(element,";") "end" {
- let ne_elements, terminator = $2 in
- let region = cover $1 $3
- and value = {
- opening = Kwd $1;
- ne_elements;
- terminator;
- closing = End $3}
- in {region; value}
+ fun mk_kwd ->
+ let ne_elements, terminator = $2 in
+ let region = cover $1 $3
+ and value = {kind = mk_kwd $1;
+ enclosing = End $3;
+ ne_elements;
+ terminator}
+ in {region; value}
}
| Kind "[" sep_or_term_list(element,";") "]" {
- let ne_elements, terminator = $3 in
- let region = cover $1 $4
- and value = {
- opening = KwdBracket ($1,$2);
- ne_elements;
- terminator;
- closing = RBracket $4}
- in {region; value} }
+ fun mk_kwd ->
+ let ne_elements, terminator = $3 in
+ let region = cover $1 $4
+ and value = {kind = mk_kwd $1;
+ enclosing = Brackets ($2,$4);
+ ne_elements;
+ terminator}
+ in {region; value} }
binding:
expr "->" expr {
let start = expr_to_region $1
and stop = expr_to_region $3 in
let region = cover start stop
- and value = {
- source = $1;
- arrow = $2;
- image = $3}
+ and value = {source = $1;
+ arrow = $2;
+ image = $3}
in {region; value} }
record_patch:
"patch" path "with" ne_injection("record",field_assignment) {
- let region = cover $1 $4.region in
- let value = {
- kwd_patch = $1;
- path = $2;
- kwd_with = $3;
- record_inj = $4}
+ let record_inj = $4 (fun region -> NEInjRecord region) in
+ let region = cover $1 record_inj.region in
+ let value = {kwd_patch = $1;
+ path = $2;
+ kwd_with = $3;
+ record_inj}
in {region; value} }
proc_call:
@@ -547,12 +544,9 @@ if_clause:
clause_block:
block { LongBlock $1 }
| "{" sep_or_term_list(statement,";") "}" {
- let statements, terminator = $2 in
let region = cover $1 $3 in
- let value = {lbrace = $1;
- inside = statements, terminator;
- rbrace = $3} in
- ShortBlock {value; region} }
+ let value = {lbrace=$1; inside=$2; rbrace=$3}
+ in ShortBlock {value; region} }
case_instr:
case(if_clause) { $1 if_clause_to_region }
@@ -563,10 +557,10 @@ case(rhs):
let region = cover $1 $6 in
let value = {kwd_case = $1;
expr = $2;
- opening = Kwd $3;
+ kwd_of = $3;
+ enclosing = End $6;
lead_vbar = $4;
- cases = $5 rhs_to_region;
- closing = End $6}
+ cases = $5 rhs_to_region}
in {region; value}
}
| "case" expr "of" "[" "|"? cases(rhs) "]" {
@@ -574,10 +568,10 @@ case(rhs):
let region = cover $1 $7 in
let value = {kwd_case = $1;
expr = $2;
- opening = KwdBracket ($3,$4);
+ kwd_of = $3;
+ enclosing = Brackets ($4,$7);
lead_vbar = $5;
- cases = $6 rhs_to_region;
- closing = RBracket $7}
+ cases = $6 rhs_to_region}
in {region; value} }
cases(rhs):
@@ -628,7 +622,6 @@ for_loop:
assign = $2;
kwd_to = $3;
bound = $4;
- kwd_step = None;
step = None;
block = $5}
in For (ForInt {region; value})
@@ -639,8 +632,7 @@ for_loop:
assign = $2;
kwd_to = $3;
bound = $4;
- kwd_step = Some $5;
- step = Some $6;
+ step = Some ($5, $6);
block = $7}
in For (ForInt {region; value})
}
@@ -854,7 +846,7 @@ core_expr:
| "False" { ELogic (BoolExpr (False $1)) }
| "True" { ELogic (BoolExpr (True $1)) }
| "Unit" { EUnit $1 }
-| annot_expr { EAnnot $1 }
+| par(annot_expr) { EAnnot $1 }
| tuple_expr { ETuple $1 }
| list_expr { EList $1 }
| "None" { EConstr (NoneExpr $1) }
@@ -896,20 +888,20 @@ fun_call_or_par_or_projection:
| fun_call { ECall $1 }
annot_expr:
- "(" disj_expr ":" type_expr ")" {
- let start = expr_to_region $2
- and stop = type_expr_to_region $4 in
- let region = cover start stop
- and value = $2, $4
- in {region; value} }
+ disj_expr ":" type_expr { $1,$2,$3 }
set_expr:
- injection("set",expr) { SetInj $1 }
+ injection("set",expr) { SetInj ($1 (fun region -> InjSet region)) }
map_expr:
- map_lookup { MapLookUp $1 }
-| injection("map",binding) { MapInj $1 }
-| injection("big_map",binding) { BigMapInj $1 }
+ map_lookup {
+ MapLookUp $1
+ }
+| injection("map",binding) {
+ MapInj ($1 (fun region -> InjMap region))
+ }
+| injection("big_map",binding) {
+ BigMapInj ($1 (fun region -> InjBigMap region)) }
map_lookup:
path brackets(expr) {
@@ -957,41 +949,40 @@ record_expr:
"record" sep_or_term_list(field_assignment,";") "end" {
let ne_elements, terminator = $2 in
let region = cover $1 $3
- and value : field_assign AST.reg ne_injection = {
- opening = Kwd $1;
+ and value : field_assignment AST.reg ne_injection = {
+ kind = NEInjRecord $1;
+ enclosing = End $3;
ne_elements;
- terminator;
- closing = End $3}
+ terminator}
in {region; value}
}
| "record" "[" sep_or_term_list(field_assignment,";") "]" {
- let ne_elements, terminator = $3 in
- let region = cover $1 $4
- and value : field_assign AST.reg ne_injection = {
- opening = KwdBracket ($1,$2);
- ne_elements;
- terminator;
- closing = RBracket $4}
- in {region; value} }
+ let ne_elements, terminator = $3 in
+ let region = cover $1 $4
+ and value : field_assignment AST.reg ne_injection = {
+ kind = NEInjRecord $1;
+ enclosing = Brackets ($2,$4);
+ ne_elements;
+ terminator}
+ in {region; value} }
update_record:
- path "with" ne_injection("record",field_path_assignment){
- let region = cover (path_to_region $1) $3.region in
- let value = {record=$1; kwd_with=$2; updates=$3}
+ path "with" ne_injection("record",field_path_assignment) {
+ let updates = $3 (fun region -> NEInjRecord region) in
+ let region = cover (path_to_region $1) updates.region in
+ let value = {record=$1; kwd_with=$2; updates}
in {region; value} }
field_assignment:
field_name "=" expr {
let region = cover $1.region (expr_to_region $3)
- and value = {field_name=$1; equal=$2; field_expr=$3}
+ and value = {field_name=$1; assignment=$2; field_expr=$3}
in {region; value} }
field_path_assignment:
- nsepseq(field_name,".") "=" expr {
- let start = nsepseq_to_region (fun x -> x.region) $1
- and stop = expr_to_region $3 in
- let region = cover start stop
- and value = {field_path=$1; equal=$2; field_expr=$3}
+ path "=" expr {
+ let region = cover (path_to_region $1) (expr_to_region $3)
+ and value = {field_path=$1; assignment=$2; field_expr=$3}
in {region; value} }
fun_call:
@@ -1010,8 +1001,8 @@ arguments:
par(nsepseq(expr,",")) { $1 }
list_expr:
- injection("list",expr) { EListComp $1 }
-| "nil" { ENil $1 }
+ injection("list",expr) { EListComp ($1 (fun region -> InjList region)) }
+| "nil" { ENil $1 }
(* Patterns *)
@@ -1034,9 +1025,10 @@ core_pattern:
| constr_pattern { PConstr $1 }
list_pattern:
- injection("list",core_pattern) { PListComp $1 }
-| "nil" { PNil $1 }
+ "nil" { PNil $1 }
| par(cons_pattern) { PParCons $1 }
+| injection("list",core_pattern) {
+ PListComp ($1 (fun region -> InjList region)) }
cons_pattern:
core_pattern "#" pattern { $1,$2,$3 }
diff --git a/src/passes/01-parser/pascaligo/ParserLog.ml b/src/passes/01-parser/pascaligo/ParserLog.ml
index ae6ca8511..3ae039e8e 100644
--- a/src/passes/01-parser/pascaligo/ParserLog.ml
+++ b/src/passes/01-parser/pascaligo/ParserLog.ml
@@ -27,11 +27,11 @@ let mk_state ~offsets ~mode ~buffer =
val pad_node = ""
method pad_node = pad_node
- (** The method [pad] updates the current padding, which is
- comprised of two components: the padding to reach the new node
- (space before reaching a subtree, then a vertical bar for it)
- and the padding for the new node itself (Is it the last child
- of its parent?).
+ (* The method [pad] updates the current padding, which is
+ comprised of two components: the padding to reach the new node
+ (space before reaching a subtree, then a vertical bar for it)
+ and the padding for the new node itself (Is it the last child
+ of its parent?).
*)
method pad arity rank =
{< pad_path =
@@ -44,7 +44,7 @@ let mk_state ~offsets ~mode ~buffer =
let compact state (region: Region.t) =
region#compact ~offsets:state#offsets state#mode
-(** {1 Printing the tokens with their source regions} *)
+(* Printing the tokens with their source regions *)
let print_nsepseq :
state -> string -> (state -> 'a -> unit) ->
@@ -117,7 +117,7 @@ let rec print_tokens state ast =
print_token state eof "EOF"
and print_attr_decl state =
- print_ne_injection state "attributes" print_string
+ print_ne_injection state print_string
and print_decl state = function
TypeDecl decl -> print_type_decl state decl
@@ -153,7 +153,7 @@ and print_type_expr state = function
| TFun type_fun -> print_type_fun state type_fun
| TPar par_type -> print_par_type state par_type
| TVar type_var -> print_var state type_var
-| TStringLiteral s -> print_string state s
+| TString str -> print_string state str
and print_cartesian state {value; _} =
print_nsepseq state "*" print_type_expr value
@@ -170,8 +170,8 @@ and print_variant state ({value; _}: variant reg) =
and print_sum_type state {value; _} =
print_nsepseq state "|" print_variant value
-and print_record_type state record_type =
- print_ne_injection state "record" print_field_decl record_type
+and print_record_type state =
+ print_ne_injection state print_field_decl
and print_type_app state {value; _} =
let type_name, type_tuple = value in
@@ -180,9 +180,9 @@ and print_type_app state {value; _} =
and print_type_fun state {value; _} =
let type_expr_a, arrow, type_expr_b = value in
- print_type_expr state type_expr_a;
- print_token state arrow "->";
- print_type_expr state type_expr_b
+ print_type_expr state type_expr_a;
+ print_token state arrow "->";
+ print_type_expr state type_expr_b
and print_par_type state {value; _} =
let {lpar; inside; rpar} = value in
@@ -206,12 +206,12 @@ and print_fun_decl state {value; _} =
let {kwd_function; fun_name; param; colon;
ret_type; kwd_is; block_with;
return; terminator; _} = value in
- print_token state kwd_function "function";
- print_var state fun_name;
- print_parameters state param;
- print_token state colon ":";
- print_type_expr state ret_type;
- print_token state kwd_is "is";
+ print_token state kwd_function "function";
+ print_var state fun_name;
+ print_parameters state param;
+ print_token state colon ":";
+ print_type_expr state ret_type;
+ print_token state kwd_is "is";
(match block_with with
None -> ()
| Some (block, kwd_with) ->
@@ -221,15 +221,14 @@ and print_fun_decl state {value; _} =
print_terminator state terminator;
and print_fun_expr state {value; _} =
- let {kwd_recursive; kwd_function; param; colon;
+ let {kwd_function; param; colon;
ret_type; kwd_is; return} : fun_expr = value in
- print_token_opt state kwd_recursive "recursive";
- print_token state kwd_function "function";
- print_parameters state param;
- print_token state colon ":";
- print_type_expr state ret_type;
- print_token state kwd_is "is";
- print_expr state return
+ print_token state kwd_function "function";
+ print_parameters state param;
+ print_token state colon ":";
+ print_type_expr state ret_type;
+ print_token state kwd_is "is";
+ print_expr state return
and print_parameters state {value; _} =
let {lpar; inside; rpar} = value in
@@ -256,22 +255,19 @@ and print_param_var state {value; _} =
print_type_expr state param_type
and print_block state block =
- let {opening; statements; terminator; closing} = block.value in
- print_block_opening state opening;
- print_statements state statements;
- print_terminator state terminator;
- print_block_closing state closing
-
-and print_block_opening state = function
- Block (kwd_block, lbrace) ->
- print_token state kwd_block "block";
- print_token state lbrace "{"
-| Begin kwd_begin ->
- print_token state kwd_begin "begin"
-
-and print_block_closing state = function
- Block rbrace -> print_token state rbrace "}"
-| End kwd_end -> print_token state kwd_end "end"
+ let {enclosing; statements; terminator} = block.value in
+ match enclosing with
+ Block (kwd_block, lbrace, rbrace) ->
+ print_token state kwd_block "block";
+ print_token state lbrace "{";
+ print_statements state statements;
+ print_terminator state terminator;
+ print_token state rbrace "}"
+ | BeginEnd (kwd_begin, kwd_end) ->
+ print_token state kwd_begin "begin";
+ print_statements state statements;
+ print_terminator state terminator;
+ print_token state kwd_end "end"
and print_data_decl state = function
LocalConst decl -> print_const_decl state decl
@@ -344,14 +340,20 @@ and print_clause_block state = function
print_token state rbrace "}"
and print_case_instr state (node : if_clause case) =
- let {kwd_case; expr; opening;
- lead_vbar; cases; closing} = node in
+ let {kwd_case; expr; kwd_of; enclosing; lead_vbar; cases} = node in
print_token state kwd_case "case";
print_expr state expr;
- print_opening state "of" opening;
- print_token_opt state lead_vbar "|";
- print_cases_instr state cases;
- print_closing state closing
+ print_token state kwd_of "of";
+ match enclosing with
+ Brackets (lbracket, rbracket) ->
+ print_token state lbracket "[";
+ print_token_opt state lead_vbar "|";
+ print_cases_instr state cases;
+ print_token state rbracket "]"
+ | End kwd_end ->
+ print_token_opt state lead_vbar "|";
+ print_cases_instr state cases;
+ print_token state kwd_end "end"
and print_token_opt state = function
None -> fun _ -> ()
@@ -393,19 +395,16 @@ and print_for_loop state = function
| ForCollect for_collect -> print_for_collect state for_collect
and print_for_int state ({value; _} : for_int reg) =
- let {kwd_for; assign; kwd_to; bound; kwd_step; step; block} = value in
+ let {kwd_for; assign; kwd_to; bound; step; block} = value in
print_token state kwd_for "for";
print_var_assign state assign;
print_token state kwd_to "to";
print_expr state bound;
- match kwd_step with
- | None -> ();
- | Some kwd_step ->
- print_token state kwd_step "step";
- match step with
- | None -> ();
- | Some step ->
- print_expr state step;
+ (match step with
+ None -> ();
+ | Some (kwd_step, expr) ->
+ print_token state kwd_step "step";
+ print_expr state expr);
print_block state block
and print_var_assign state {value; _} =
@@ -461,19 +460,27 @@ and print_expr state = function
| EPar e -> print_par_expr state e
| EFun e -> print_fun_expr state e
-and print_annot_expr state (expr , type_expr) =
+and print_annot_expr state node =
+ let {inside; _} : annot_expr par = node in
+ let expr, _, type_expr = inside in
print_expr state expr;
print_type_expr state type_expr
and print_case_expr state (node : expr case) =
- let {kwd_case; expr; opening;
- lead_vbar; cases; closing} = node in
+ let {kwd_case; expr; kwd_of; enclosing; lead_vbar; cases} = node in
print_token state kwd_case "case";
print_expr state expr;
- print_opening state "of" opening;
- print_token_opt state lead_vbar "|";
- print_cases_expr state cases;
- print_closing state closing
+ print_token state kwd_of "of";
+ match enclosing with
+ Brackets (lbracket, rbracket) ->
+ print_token state lbracket "[";
+ print_token_opt state lead_vbar "|";
+ print_cases_expr state cases;
+ print_token state rbracket "]"
+ | End kwd_end ->
+ print_token_opt state lead_vbar "|";
+ print_cases_expr state cases;
+ print_token state kwd_end "end"
and print_cases_expr state {value; _} =
print_nsepseq state "|" print_case_clause_expr value
@@ -486,11 +493,11 @@ and print_case_clause_expr state {value; _} =
and print_map_expr state = function
MapLookUp {value; _} -> print_map_lookup state value
-| MapInj inj -> print_injection state "map" print_binding inj
-| BigMapInj inj -> print_injection state "big_map" print_binding inj
+| MapInj inj -> print_injection state print_binding inj
+| BigMapInj inj -> print_injection state print_binding inj
and print_set_expr state = function
- SetInj inj -> print_injection state "set" print_expr inj
+ SetInj inj -> print_injection state print_expr inj
| SetMem mem -> print_set_membership state mem
and print_set_membership state {value; _} =
@@ -600,7 +607,7 @@ and print_list_expr state = function
print_expr state arg1;
print_token state op "#";
print_expr state arg2
-| EListComp e -> print_injection state "list" print_expr e
+| EListComp e -> print_injection state print_expr e
| ENil e -> print_nil state e
and print_constr_expr state = function
@@ -608,27 +615,26 @@ and print_constr_expr state = function
| NoneExpr e -> print_none_expr state e
| ConstrApp e -> print_constr_app state e
-and print_record_expr state e =
- print_ne_injection state "record" print_field_assign e
+and print_record_expr state =
+ print_ne_injection state print_field_assignment
-and print_field_assign state {value; _} =
- let {field_name; equal; field_expr} = value in
+and print_field_assignment state {value; _} =
+ let {field_name; assignment; field_expr} = value in
print_var state field_name;
- print_token state equal "=";
+ print_token state assignment "=";
print_expr state field_expr
-and print_field_path_assign state {value; _} =
- let {field_path; equal; field_expr} = value in
- print_nsepseq state "field_path" print_var field_path;
- print_token state equal "=";
+and print_field_path_assignment state {value; _} =
+ let {field_path; assignment; field_expr} = value in
+ print_path state field_path;
+ print_token state assignment "=";
print_expr state field_expr
and print_update_expr state {value; _} =
let {record; kwd_with; updates} = value in
print_path state record;
print_token state kwd_with "with";
- print_ne_injection state "updates field" print_field_path_assign updates
-
+ print_ne_injection state print_field_path_assignment updates
and print_projection state {value; _} =
let {struct_name; selector; field_path} = value in
@@ -648,21 +654,21 @@ and print_record_patch state node =
print_token state kwd_patch "patch";
print_path state path;
print_token state kwd_with "with";
- print_ne_injection state "record" print_field_assign record_inj
+ print_ne_injection state print_field_assignment record_inj
and print_set_patch state node =
let {kwd_patch; path; kwd_with; set_inj} = node in
print_token state kwd_patch "patch";
print_path state path;
print_token state kwd_with "with";
- print_ne_injection state "set" print_expr set_inj
+ print_ne_injection state print_expr set_inj
and print_map_patch state node =
let {kwd_patch; path; kwd_with; map_inj} = node in
print_token state kwd_patch "patch";
print_path state path;
print_token state kwd_with "with";
- print_ne_injection state "map" print_binding map_inj
+ print_ne_injection state print_binding map_inj
and print_map_remove state node =
let {kwd_remove; key; kwd_from; kwd_map; map} = node in
@@ -681,35 +687,48 @@ and print_set_remove state node =
print_path state set
and print_injection :
- 'a.state -> string -> (state -> 'a -> unit) ->
- 'a injection reg -> unit =
- fun state kwd print {value; _} ->
- let {opening; elements; terminator; closing} = value in
- print_opening state kwd opening;
- print_sepseq state ";" print elements;
- print_terminator state terminator;
- print_closing state closing
+ 'a.state -> (state -> 'a -> unit) -> 'a injection reg -> unit =
+ fun state print {value; _} ->
+ let {kind; enclosing; elements; terminator} = value in
+ print_injection_kwd state kind;
+ match enclosing with
+ Brackets (lbracket, rbracket) ->
+ print_token state lbracket "[";
+ print_sepseq state ";" print elements;
+ print_terminator state terminator;
+ print_token state rbracket "]"
+ | End kwd_end ->
+ print_sepseq state ";" print elements;
+ print_terminator state terminator;
+ print_token state kwd_end "end"
+
+and print_injection_kwd state = function
+ InjSet kwd_set -> print_token state kwd_set "set"
+| InjMap kwd_map -> print_token state kwd_map "map"
+| InjBigMap kwd_big_map -> print_token state kwd_big_map "big_map"
+| InjList kwd_list -> print_token state kwd_list "list"
and print_ne_injection :
- 'a.state -> string -> (state -> 'a -> unit) ->
- 'a ne_injection reg -> unit =
- fun state kwd print {value; _} ->
- let {opening; ne_elements; terminator; closing} = value in
- print_opening state kwd opening;
- print_nsepseq state ";" print ne_elements;
- print_terminator state terminator;
- print_closing state closing
+ 'a.state -> (state -> 'a -> unit) -> 'a ne_injection reg -> unit =
+ fun state print {value; _} ->
+ let {kind; enclosing; ne_elements; terminator} = value in
+ print_ne_injection_kwd state kind;
+ match enclosing with
+ Brackets (lbracket, rbracket) ->
+ print_token state lbracket "[";
+ print_nsepseq state ";" print ne_elements;
+ print_terminator state terminator;
+ print_token state rbracket "]"
+ | End kwd_end ->
+ print_nsepseq state ";" print ne_elements;
+ print_terminator state terminator;
+ print_token state kwd_end "end"
-and print_opening state lexeme = function
- Kwd kwd ->
- print_token state kwd lexeme
-| KwdBracket (kwd, lbracket) ->
- print_token state kwd lexeme;
- print_token state lbracket "["
-
-and print_closing state = function
- RBracket rbracket -> print_token state rbracket "]"
-| End kwd_end -> print_token state kwd_end "end"
+and print_ne_injection_kwd state = function
+ NEInjAttr kwd_attributes -> print_token state kwd_attributes "attributes"
+| NEInjSet kwd_set -> print_token state kwd_set "set"
+| NEInjMap kwd_map -> print_token state kwd_map "map"
+| NEInjRecord kwd_record -> print_token state kwd_record "record"
and print_binding state {value; _} =
let {source; arrow; image} = value in
@@ -787,7 +806,7 @@ and print_patterns state {value; _} =
and print_list_pattern state = function
PListComp comp ->
- print_injection state "list" print_pattern comp
+ print_injection state print_pattern comp
| PNil kwd_nil ->
print_token state kwd_nil "nil"
| PParCons cons ->
@@ -831,7 +850,7 @@ let pattern_to_string ~offsets ~mode =
let instruction_to_string ~offsets ~mode =
to_string ~offsets ~mode print_instruction
-(** {1 Pretty-printing the AST} *)
+(* Pretty-printing the AST *)
let pp_ident state {value=name; region} =
let reg = compact state region in
@@ -842,12 +861,20 @@ let pp_node state name =
let node = sprintf "%s%s\n" state#pad_path name
in Buffer.add_string state#buffer node
-let pp_string state = pp_ident state
+let pp_string state {value=name; region} =
+ let reg = compact state region in
+ let node = sprintf "%s%S (%s)\n" state#pad_path name reg
+ in Buffer.add_string state#buffer node
+
+let pp_verbatim state {value=name; region} =
+ let reg = compact state region in
+ let node = sprintf "%s{|%s|} (%s)\n" state#pad_path name reg
+ in Buffer.add_string state#buffer node
let pp_loc_node state name region =
pp_ident state {value=name; region}
-let rec pp_ast state {decl; _} =
+let rec pp_cst state {decl; _} =
let apply len rank =
pp_declaration (state#pad len rank) in
let decls = Utils.nseq_to_list decl in
@@ -943,9 +970,9 @@ and pp_type_expr state = function
field_decl.value in
let fields = Utils.nsepseq_to_list value.ne_elements in
List.iteri (List.length fields |> apply) fields
-| TStringLiteral s ->
- pp_node state "String";
- pp_string (state#pad 1 0) s
+| TString s ->
+ pp_node state "TString";
+ pp_string (state#pad 1 0) s
and pp_cartesian state {value; _} =
let apply len rank =
@@ -1244,8 +1271,8 @@ and pp_projection state proj =
List.iteri (apply len) selections
and pp_update state update =
- pp_path state update.record;
- pp_ne_injection pp_field_path_assign state update.updates.value
+ pp_path (state#pad 2 0) update.record;
+ pp_ne_injection pp_field_path_assignment state update.updates.value
and pp_selection state = function
FieldName name ->
@@ -1285,17 +1312,27 @@ and pp_for_loop state = function
pp_for_collect state value
and pp_for_int state for_int =
+ let {assign; bound; step; block; _} = for_int in
+ let arity =
+ match step with None -> 3 | Some _ -> 4 in
let () =
- let state = state#pad 3 0 in
+ let state = state#pad arity 0 in
pp_node state "";
- pp_var_assign state for_int.assign.value in
+ pp_var_assign state assign.value in
let () =
- let state = state#pad 3 1 in
+ let state = state#pad arity 1 in
pp_node state "";
- pp_expr (state#pad 1 0) for_int.bound in
+ pp_expr (state#pad 1 0) bound in
let () =
- let state = state#pad 3 2 in
- let statements = for_int.block.value.statements in
+ match step with
+ None -> ()
+ | Some (_, expr) ->
+ let state = state#pad arity 2 in
+ pp_node state "";
+ pp_expr (state#pad 1 0) expr in
+ let () =
+ let state = state#pad arity (arity-1) in
+ let statements = block.value.statements in
pp_node state "";
pp_statements state statements
in ()
@@ -1318,10 +1355,10 @@ and pp_for_collect state collect =
pp_collection (state#pad 2 0) collect.collection;
pp_expr (state#pad 1 0) collect.expr in
let () =
- let state = state#pad 3 2 in
- let statements = collect.block.value.statements in
- pp_node state "";
- pp_statements state statements
+ let state = state#pad 3 2 in
+ let statements = collect.block.value.statements in
+ pp_node state "";
+ pp_statements state statements
in ()
and pp_collection state = function
@@ -1343,18 +1380,18 @@ and pp_fun_call state (expr, args) =
and pp_record_patch state patch =
pp_path (state#pad 2 0) patch.path;
- pp_ne_injection pp_field_assign state patch.record_inj.value
+ pp_ne_injection pp_field_assignment state patch.record_inj.value
-and pp_field_assign state {value; _} =
+and pp_field_assignment state {value; _} =
pp_node state "";
pp_ident (state#pad 2 0) value.field_name;
pp_expr (state#pad 2 1) value.field_expr
-and pp_field_path_assign state {value; _} =
- pp_node state "";
- let path = Utils.nsepseq_to_list value.field_path in
- List.iter (pp_ident (state#pad 2 0)) path;
- pp_expr (state#pad 2 1) value.field_expr
+and pp_field_path_assignment state {value; _} =
+ let {field_path; field_expr; _} = value in
+ pp_node state "";
+ pp_path (state#pad 2 0) field_path;
+ pp_expr (state#pad 2 1) field_expr
and pp_map_patch state patch =
pp_path (state#pad 2 0) patch.path;
@@ -1403,7 +1440,7 @@ and pp_expr state = function
pp_cond_expr state value
| EAnnot {value; region} ->
pp_loc_node state "EAnnot" region;
- pp_annotated state value
+ pp_annotated state value.inside
| ELogic e_logic ->
pp_node state "ELogic";
pp_e_logic (state#pad 1 0) e_logic
@@ -1424,7 +1461,7 @@ and pp_expr state = function
pp_constr_expr (state#pad 1 0) e_constr
| ERecord {value; region} ->
pp_loc_node state "ERecord" region;
- pp_ne_injection pp_field_assign state value
+ pp_ne_injection pp_field_assignment state value
| EProj {value; region} ->
pp_loc_node state "EProj" region;
pp_projection state value
@@ -1576,9 +1613,9 @@ and pp_string_expr state = function
pp_string (state#pad 1 0) s
| Verbatim v ->
pp_node state "Verbatim";
- pp_string (state#pad 1 0) v
+ pp_verbatim (state#pad 1 0) v
-and pp_annotated state (expr, t_expr) =
+and pp_annotated state (expr, _, t_expr) =
pp_expr (state#pad 2 0) expr;
pp_type_expr (state#pad 2 1) t_expr
diff --git a/src/passes/01-parser/pascaligo/ParserLog.mli b/src/passes/01-parser/pascaligo/ParserLog.mli
index 955c1590b..7ae739571 100644
--- a/src/passes/01-parser/pascaligo/ParserLog.mli
+++ b/src/passes/01-parser/pascaligo/ParserLog.mli
@@ -33,5 +33,5 @@ val instruction_to_string :
(** {1 Pretty-printing of AST nodes} *)
-val pp_ast : state -> AST.t -> unit
+val pp_cst : state -> AST.t -> unit
val pp_expr : state -> AST.expr -> unit
diff --git a/src/passes/01-parser/pascaligo/ParserMain.ml b/src/passes/01-parser/pascaligo/ParserMain.ml
index beb0b4885..6158dc5da 100644
--- a/src/passes/01-parser/pascaligo/ParserMain.ml
+++ b/src/passes/01-parser/pascaligo/ParserMain.ml
@@ -22,7 +22,8 @@ module SubIO =
ext : string;
mode : [`Byte | `Point];
cmd : EvalOpt.command;
- mono : bool
+ mono : bool;
+ pretty : bool
>
let options : options =
@@ -36,6 +37,7 @@ module SubIO =
method mode = IO.options#mode
method cmd = IO.options#cmd
method mono = IO.options#mono
+ method pretty = IO.options#pretty
end
let make =
@@ -48,6 +50,7 @@ module SubIO =
~mode:options#mode
~cmd:options#cmd
~mono:options#mono
+ ~pretty:options#pretty
end
module Parser =
@@ -67,14 +70,28 @@ module ParserLog =
module Lexer = Lexer.Make (LexToken)
module Unit =
- ParserUnit.Make (Lexer)(AST)(Parser)(ParErr)(ParserLog)(SubIO)
+ ParserUnit.Make (Lexer)(AST)(Parser)(Parser_msg)(ParserLog)(SubIO)
(* Main *)
let wrap = function
- Stdlib.Ok _ -> flush_all ()
+ Stdlib.Ok ast ->
+ if IO.options#pretty then
+ begin
+ let doc = Pretty.print ast in
+ let width =
+ match Terminal_size.get_columns () with
+ None -> 60
+ | Some c -> c in
+ PPrint.ToChannel.pretty 1.0 width stdout doc;
+ print_newline ()
+ end;
+ flush_all ()
| Error msg ->
- (flush_all (); Printf.eprintf "\027[31m%s\027[0m%!" msg.Region.value)
+ begin
+ flush_all ();
+ Printf.eprintf "\027[31m%s\027[0m%!" msg.Region.value
+ end
let () =
match IO.options#input with
diff --git a/src/passes/01-parser/pascaligo/Pretty.ml b/src/passes/01-parser/pascaligo/Pretty.ml
new file mode 100644
index 000000000..4c52d071a
--- /dev/null
+++ b/src/passes/01-parser/pascaligo/Pretty.ml
@@ -0,0 +1,632 @@
+[@@@warning "-42"]
+[@@@warning "-27"]
+[@@@warning "-26"]
+
+open AST
+module Region = Simple_utils.Region
+open! Region
+open! PPrint
+
+let pp_par : ('a -> document) -> 'a par reg -> document =
+ fun printer {value; _} ->
+ string "(" ^^ nest 1 (printer value.inside ^^ string ")")
+
+let pp_brackets : ('a -> document) -> 'a brackets reg -> document =
+ fun printer {value; _} ->
+ string "[" ^^ nest 1 (printer value.inside ^^ string "]")
+
+let pp_braces : ('a -> document) -> 'a braces reg -> document =
+ fun printer {value; _} ->
+ string "{" ^^ nest 1 (printer value.inside ^^ string "}")
+
+let rec print ast =
+ let app decl = group (pp_declaration decl) in
+ let decl = Utils.nseq_to_list ast.decl in
+ separate_map (hardline ^^ hardline) app decl
+
+and pp_declaration = function
+ TypeDecl d -> pp_type_decl d
+| ConstDecl d -> pp_const_decl d
+| FunDecl d -> pp_fun_decl d
+| AttrDecl d -> pp_attr_decl d
+
+and pp_attr_decl decl = pp_ne_injection pp_string decl
+
+and pp_const_decl {value; _} =
+ let {name; const_type; init; attributes; _} = value in
+ let start = string ("const " ^ name.value) in
+ let t_expr = pp_type_expr const_type in
+ let attr = match attributes with
+ None -> empty
+ | Some a -> hardline ^^ pp_attr_decl a in
+ group (start ^/^ nest 2 (string ": " ^^ t_expr))
+ ^^ group (break 1 ^^ nest 2 (string "= " ^^ pp_expr init))
+ ^^ attr
+
+(* Type declarations *)
+
+and pp_type_decl decl =
+ let {name; type_expr; _} = decl.value in
+ string "type " ^^ string name.value ^^ string " is"
+ ^^ group (nest 2 (break 1 ^^ pp_type_expr type_expr))
+
+and pp_type_expr = function
+ TProd t -> pp_cartesian t
+| TSum t -> pp_variants t
+| TRecord t -> pp_fields t
+| TApp t -> pp_type_app t
+| TFun t -> pp_fun_type t
+| TPar t -> pp_type_par t
+| TVar t -> pp_ident t
+| TString s -> pp_string s
+
+and pp_cartesian {value; _} =
+ let head, tail = value in
+ let rec app = function
+ [] -> empty
+ | [e] -> group (break 1 ^^ pp_type_expr e)
+ | e::items ->
+ group (break 1 ^^ pp_type_expr e ^^ string " *") ^^ app items
+ in pp_type_expr head ^^ string " *" ^^ app (List.map snd tail)
+
+and pp_variants {value; _} =
+ let head, tail = value in
+ let head = pp_variant head in
+ let head = if tail = [] then head
+ else ifflat head (string " " ^^ head) in
+ let rest = List.map snd tail in
+ let app variant = break 1 ^^ string "| " ^^ pp_variant variant
+ in head ^^ concat_map app rest
+
+and pp_variant {value; _} =
+ let {constr; arg} = value in
+ match arg with
+ None -> pp_ident constr
+ | Some (_, e) ->
+ prefix 4 1 (pp_ident constr ^^ string " of") (pp_type_expr e)
+
+and pp_fields fields = pp_ne_injection pp_field_decl fields
+
+and pp_field_decl {value; _} =
+ let {field_name; field_type; _} = value in
+ let name = pp_ident field_name in
+ let t_expr = pp_type_expr field_type
+ in prefix 2 1 (name ^^ string " :") t_expr
+
+and pp_fun_type {value; _} =
+ let lhs, _, rhs = value in
+ group (pp_type_expr lhs ^^ string " ->" ^/^ pp_type_expr rhs)
+
+and pp_type_par t = pp_par pp_type_expr t
+
+and pp_type_app {value = ctor, tuple; _} =
+ prefix 2 1 (pp_type_constr ctor) (pp_type_tuple tuple)
+
+and pp_type_constr ctor = string ctor.value
+
+and pp_type_tuple {value; _} =
+ let head, tail = value.inside in
+ let rec app = function
+ [] -> empty
+ | [e] -> group (break 1 ^^ pp_type_expr e)
+ | e::items ->
+ group (break 1 ^^ pp_type_expr e ^^ string ",") ^^ app items in
+ let components =
+ if tail = []
+ then pp_type_expr head
+ else pp_type_expr head ^^ string "," ^^ app (List.map snd tail)
+ in string "(" ^^ nest 1 (components ^^ string ")")
+
+(* Function and procedure declarations *)
+
+and pp_fun_expr {value; _} =
+ let {param; ret_type; return; _} : fun_expr = value in
+ let start = string "function" in
+ let parameters = pp_par pp_parameters param in
+ let return_t = pp_type_expr ret_type in
+ let expr = pp_expr return in
+ group (start ^^ nest 2 (break 1 ^^ parameters))
+ ^^ group (break 1 ^^ nest 2 (string ": " ^^ return_t))
+ ^^ string " is" ^^ group (nest 4 (break 1 ^^ expr))
+
+and pp_fun_decl {value; _} =
+ let {kwd_recursive; fun_name; param;
+ ret_type; block_with; return; attributes; _} = value in
+ let start =
+ match kwd_recursive with
+ None -> string "function"
+ | Some _ -> string "recursive" ^/^ string "function" in
+ let start = start ^^ group (break 1 ^^ nest 2 (pp_ident fun_name)) in
+ let parameters = pp_par pp_parameters param in
+ let return_t = pp_type_expr ret_type in
+ let expr = pp_expr return in
+ let body =
+ match block_with with
+ None -> group (nest 2 (break 1 ^^ expr))
+ | Some (b,_) -> hardline ^^ pp_block b ^^ string " with"
+ ^^ group (nest 4 (break 1 ^^ expr))
+ and attr =
+ match attributes with
+ None -> empty
+ | Some a -> hardline ^^ pp_attr_decl a in
+ prefix 2 1 start parameters
+ ^^ group (nest 2 (break 1 ^^ string ": " ^^ nest 2 return_t ^^ string " is"))
+ ^^ body ^^ attr
+
+and pp_parameters p = pp_nsepseq ";" pp_param_decl p
+
+and pp_param_decl = function
+ ParamConst c -> pp_param_const c
+| ParamVar v -> pp_param_var v
+
+and pp_param_const {value; _} =
+ let {var; param_type; _} : param_const = value in
+ let name = string ("const " ^ var.value) in
+ let t_expr = pp_type_expr param_type
+ in prefix 2 1 (name ^^ string " :") t_expr
+
+and pp_param_var {value; _} =
+ let {var; param_type; _} : param_var = value in
+ let name = string ("var " ^ var.value) in
+ let t_expr = pp_type_expr param_type
+ in prefix 2 1 (name ^^ string " :") t_expr
+
+and pp_block {value; _} =
+ string "block {"
+ ^^ nest 2 (hardline ^^ pp_statements value.statements)
+ ^^ hardline ^^ string "}"
+
+and pp_statements s = pp_nsepseq ";" pp_statement s
+
+and pp_statement = function
+ Instr s -> pp_instruction s
+| Data s -> pp_data_decl s
+| Attr s -> pp_attr_decl s
+
+and pp_data_decl = function
+ LocalConst d -> pp_const_decl d
+| LocalVar d -> pp_var_decl d
+| LocalFun d -> pp_fun_decl d
+
+and pp_var_decl {value; _} =
+ let {name; var_type; init; _} = value in
+ let start = string ("var " ^ name.value) in
+ let t_expr = pp_type_expr var_type in
+ group (start ^/^ nest 2 (string ": " ^^ t_expr))
+ ^^ group (break 1 ^^ nest 2 (string ":= " ^^ pp_expr init))
+
+and pp_instruction = function
+ Cond i -> group (pp_conditional i)
+| CaseInstr i -> pp_case pp_if_clause i
+| Assign i -> pp_assignment i
+| Loop i -> pp_loop i
+| ProcCall i -> pp_fun_call i
+| Skip _ -> string "skip"
+| RecordPatch i -> pp_record_patch i
+| MapPatch i -> pp_map_patch i
+| SetPatch i -> pp_set_patch i
+| MapRemove i -> pp_map_remove i
+| SetRemove i -> pp_set_remove i
+
+and pp_set_remove {value; _} =
+ let {element; set; _} : set_remove = value in
+ string "remove" ^^ group (nest 2 (break 1 ^^ pp_expr element))
+ ^^ group (break 1 ^^ prefix 2 1 (string "from set") (pp_path set))
+
+and pp_map_remove {value; _} =
+ let {key; map; _} = value in
+ string "remove" ^^ group (nest 2 (break 1 ^^ pp_expr key))
+ ^^ group (break 1 ^^ prefix 2 1 (string "from map") (pp_path map))
+
+and pp_set_patch {value; _} =
+ let {path; set_inj; _} = value in
+ let inj = pp_ne_injection pp_expr set_inj in
+ string "patch"
+ ^^ group (nest 2 (break 1 ^^ pp_path path) ^/^ string "with")
+ ^^ group (nest 2 (break 1 ^^ inj))
+
+and pp_map_patch {value; _} =
+ let {path; map_inj; _} = value in
+ let inj = pp_ne_injection pp_binding map_inj in
+ string "patch"
+ ^^ group (nest 2 (break 1 ^^ pp_path path) ^/^ string "with")
+ ^^ group (nest 2 (break 1 ^^ inj))
+
+and pp_binding {value; _} =
+ let {source; image; _} = value in
+ pp_expr source
+ ^^ string " ->" ^^ group (nest 2 (break 1 ^^ pp_expr image))
+
+and pp_record_patch {value; _} =
+ let {path; record_inj; _} = value in
+ let inj = pp_record record_inj in
+ string "patch"
+ ^^ group (nest 2 (break 1 ^^ pp_path path) ^/^ string "with")
+ ^^ group (nest 2 (break 1 ^^ inj))
+
+and pp_cond_expr {value; _} =
+ let {test; ifso; ifnot; _} : cond_expr = value in
+ let test = string "if " ^^ group (nest 3 (pp_expr test))
+ and ifso = string "then" ^^ group (nest 2 (break 1 ^^ pp_expr ifso))
+ and ifnot = string "else" ^^ group (nest 2 (break 1 ^^ pp_expr ifnot))
+ in test ^/^ ifso ^/^ ifnot
+
+and pp_conditional {value; _} =
+ let {test; ifso; ifnot; _} : conditional = value in
+ let test = string "if " ^^ group (nest 3 (pp_expr test))
+ and ifso = match ifso with
+ ClauseInstr _ | ClauseBlock LongBlock _ ->
+ string "then"
+ ^^ group (nest 2 (break 1 ^^ pp_if_clause ifso))
+ | ClauseBlock ShortBlock _ ->
+ string "then {"
+ ^^ group (nest 2 (hardline ^^ pp_if_clause ifso))
+ ^^ hardline ^^ string "}"
+ and ifnot = match ifnot with
+ ClauseInstr _ | ClauseBlock LongBlock _ ->
+ string "else"
+ ^^ group (nest 2 (break 1 ^^ pp_if_clause ifnot))
+ | ClauseBlock ShortBlock _ ->
+ string "else {"
+ ^^ group (nest 2 (hardline ^^ pp_if_clause ifnot))
+ ^^ hardline ^^ string "}"
+ in test ^/^ ifso ^/^ ifnot
+
+and pp_if_clause = function
+ ClauseInstr i -> pp_instruction i
+| ClauseBlock b -> pp_clause_block b
+
+and pp_clause_block = function
+ LongBlock b -> pp_block b
+| ShortBlock b -> Utils.(pp_statements <@ fst) b.value.inside
+
+and pp_set_membership {value; _} =
+ let {set; element; _} : set_membership = value in
+ group (pp_expr set ^/^ string "contains" ^/^ pp_expr element)
+
+and pp_case : 'a.('a -> document) -> 'a case Region.reg -> document =
+ fun printer {value; _} ->
+ let {expr; cases; _} = value in
+ group (string "case " ^^ nest 5 (pp_expr expr) ^/^ string "of [")
+ ^^ hardline ^^ pp_cases printer cases
+ ^^ hardline ^^ string "]"
+
+and pp_cases :
+ 'a.('a -> document) ->
+ ('a case_clause reg, vbar) Utils.nsepseq Region.reg ->
+ document =
+ fun printer {value; _} ->
+ let head, tail = value in
+ let head = pp_case_clause printer head in
+ let head = blank 2 ^^ head in
+ let rest = List.map snd tail in
+ let app clause = break 1 ^^ string "| " ^^ pp_case_clause printer clause
+ in head ^^ concat_map app rest
+
+and pp_case_clause :
+ 'a.('a -> document) -> 'a case_clause Region.reg -> document =
+ fun printer {value; _} ->
+ let {pattern; rhs; _} = value in
+ pp_pattern pattern ^^ prefix 4 1 (string " ->") (printer rhs)
+
+and pp_assignment {value; _} =
+ let {lhs; rhs; _} = value in
+ prefix 2 1 (pp_lhs lhs ^^ string " :=") (pp_expr rhs)
+
+and pp_lhs : lhs -> document = function
+ Path p -> pp_path p
+| MapPath p -> pp_map_lookup p
+
+and pp_loop = function
+ While l -> pp_while_loop l
+| For f -> pp_for_loop f
+
+and pp_while_loop {value; _} =
+ let {cond; block; _} = value in
+ prefix 2 1 (string "while") (pp_expr cond) ^^ hardline ^^ pp_block block
+
+and pp_for_loop = function
+ ForInt l -> pp_for_int l
+| ForCollect l -> pp_for_collect l
+
+and pp_for_int {value; _} =
+ let {assign; bound; step; block; _} = value in
+ let step =
+ match step with
+ None -> empty
+ | Some (_, e) -> prefix 2 1 (string " step") (pp_expr e) in
+ prefix 2 1 (string "for") (pp_var_assign assign)
+ ^^ prefix 2 1 (string " to") (pp_expr bound)
+ ^^ step ^^ hardline ^^ pp_block block
+
+and pp_var_assign {value; _} =
+ let {name; expr; _} = value in
+ prefix 2 1 (pp_ident name ^^ string " :=") (pp_expr expr)
+
+and pp_for_collect {value; _} =
+ let {var; bind_to; collection; expr; block; _} = value in
+ let binding =
+ match bind_to with
+ None -> pp_ident var
+ | Some (_, dest) -> pp_ident var ^^ string " -> " ^^ pp_ident dest in
+ prefix 2 1 (string "for") binding
+ ^^ prefix 2 1 (string " in") (pp_collection collection ^/^ pp_expr expr)
+ ^^ hardline ^^ pp_block block
+
+and pp_collection = function
+ Map _ -> string "map"
+| Set _ -> string "set"
+| List _ -> string "list"
+
+(* Expressions *)
+
+and pp_expr = function
+ ECase e -> pp_case pp_expr e
+| ECond e -> group (pp_cond_expr e)
+| EAnnot e -> pp_annot_expr e
+| ELogic e -> group (pp_logic_expr e)
+| EArith e -> group (pp_arith_expr e)
+| EString e -> pp_string_expr e
+| EList e -> group (pp_list_expr e)
+| ESet e -> pp_set_expr e
+| EConstr e -> pp_constr_expr e
+| ERecord e -> pp_record e
+| EProj e -> pp_projection e
+| EUpdate e -> pp_update e
+| EMap e -> pp_map_expr e
+| EVar e -> pp_ident e
+| ECall e -> pp_fun_call e
+| EBytes e -> pp_bytes e
+| EUnit _ -> string "Unit"
+| ETuple e -> pp_tuple_expr e
+| EPar e -> pp_par pp_expr e
+| EFun e -> pp_fun_expr e
+
+and pp_annot_expr {value; _} =
+ let expr, _, type_expr = value.inside in
+ group (string "(" ^^ nest 1 (pp_expr expr ^/^ string ": "
+ ^^ pp_type_expr type_expr ^^ string ")"))
+
+and pp_set_expr = function
+ SetInj inj -> pp_injection pp_expr inj
+| SetMem mem -> pp_set_membership mem
+
+and pp_map_expr = function
+ MapLookUp fetch -> pp_map_lookup fetch
+| MapInj inj -> pp_injection pp_binding inj
+| BigMapInj inj -> pp_injection pp_binding inj
+
+and pp_map_lookup {value; _} =
+ prefix 2 1 (pp_path value.path) (pp_brackets pp_expr value.index)
+
+and pp_path = function
+ Name v -> pp_ident v
+| Path p -> pp_projection p
+
+and pp_logic_expr = function
+ BoolExpr e -> pp_bool_expr e
+| CompExpr e -> pp_comp_expr e
+
+and pp_bool_expr = function
+ Or e -> pp_bin_op "or" e
+| And e -> pp_bin_op "and" e
+| Not e -> pp_un_op "not" e
+| True _ -> string "True"
+| False _ -> string "False"
+
+and pp_bin_op op {value; _} =
+ let {arg1; arg2; _} = value
+ and length = String.length op + 1 in
+ pp_expr arg1 ^/^ string (op ^ " ") ^^ nest length (pp_expr arg2)
+
+and pp_un_op op {value; _} =
+ string (op ^ " ") ^^ pp_expr value.arg
+
+and pp_comp_expr = function
+ Lt e -> pp_bin_op "<" e
+| Leq e -> pp_bin_op "<=" e
+| Gt e -> pp_bin_op ">" e
+| Geq e -> pp_bin_op ">=" e
+| Equal e -> pp_bin_op "=" e
+| Neq e -> pp_bin_op "=/=" e
+
+and pp_arith_expr = function
+ Add e -> pp_bin_op "+" e
+| Sub e -> pp_bin_op "-" e
+| Mult e -> pp_bin_op "*" e
+| Div e -> pp_bin_op "/" e
+| Mod e -> pp_bin_op "mod" e
+| Neg e -> string "-" ^^ pp_expr e.value.arg
+| Int e -> pp_int e
+| Nat e -> pp_nat e
+| Mutez e -> pp_mutez e
+
+and pp_mutez {value; _} =
+ Z.to_string (snd value) ^ "mutez" |> string
+
+and pp_string_expr = function
+ Cat e -> pp_bin_op "^" e
+| String e -> pp_string e
+| Verbatim e -> pp_verbatim e
+
+and pp_ident {value; _} = string value
+
+and pp_string s = string "\"" ^^ pp_ident s ^^ string "\""
+
+and pp_verbatim s = string "{|" ^^ pp_ident s ^^ string "|}"
+
+and pp_list_expr = function
+ ECons e -> pp_bin_op "#" e
+| EListComp e -> pp_injection pp_expr e
+| ENil _ -> string "nil"
+
+and pp_constr_expr = function
+ SomeApp a -> pp_some_app a
+| NoneExpr _ -> string "None"
+| ConstrApp a -> pp_constr_app a
+
+and pp_some_app {value; _} =
+ prefix 4 1 (string "Some") (pp_arguments (snd value))
+
+and pp_constr_app {value; _} =
+ let constr, args = value in
+ let constr = string constr.value in
+ match args with
+ None -> constr
+ | Some tuple -> prefix 2 1 constr (pp_tuple_expr tuple)
+
+
+and pp_field_assign {value; _} =
+ let {field_name; field_expr; _} = value in
+ prefix 2 1 (pp_ident field_name ^^ string " =") (pp_expr field_expr)
+
+and pp_record ne_inj = group (pp_ne_injection pp_field_assign ne_inj)
+
+and pp_projection {value; _} =
+ let {struct_name; field_path; _} = value in
+ let fields = Utils.nsepseq_to_list field_path
+ and sep = string "." ^^ break 0 in
+ let fields = separate_map sep pp_selection fields in
+ group (pp_ident struct_name ^^ string "." ^^ break 0 ^^ fields)
+
+and pp_update {value; _} =
+ let {record; updates; _} = value in
+ let updates = group (pp_ne_injection pp_field_path_assign updates)
+ and record = pp_path record in
+ record ^^ string " with" ^^ nest 2 (break 1 ^^ updates)
+
+and pp_field_path_assign {value; _} =
+ let {field_path; field_expr; _} = value in
+ let path = pp_path field_path in
+ prefix 2 1 (path ^^ string " =") (pp_expr field_expr)
+
+and pp_selection = function
+ FieldName v -> string v.value
+| Component cmp -> cmp.value |> snd |> Z.to_string |> string
+
+and pp_tuple_expr {value; _} =
+ let head, tail = value.inside in
+ let rec app = function
+ [] -> empty
+ | [e] -> group (break 1 ^^ pp_expr e)
+ | e::items ->
+ group (break 1 ^^ pp_expr e ^^ string ",") ^^ app items in
+ let components =
+ if tail = []
+ then pp_expr head
+ else pp_expr head ^^ string "," ^^ app (List.map snd tail)
+ in string "(" ^^ nest 1 (components ^^ string ")")
+
+and pp_fun_call {value; _} =
+ let lambda, arguments = value in
+ let arguments = pp_tuple_expr arguments in
+ group (pp_expr lambda ^^ nest 2 (break 1 ^^ arguments))
+
+and pp_arguments v = pp_tuple_expr v
+
+(* Injections *)
+
+and pp_injection :
+ 'a.('a -> document) -> 'a injection reg -> document =
+ fun printer {value; _} ->
+ let {kind; elements; _} = value in
+ let sep = string ";" ^^ break 1 in
+ let elements = Utils.sepseq_to_list elements in
+ let elements = separate_map sep printer elements in
+ let kwd = pp_injection_kwd kind in
+ group (string (kwd ^ " [")
+ ^^ nest 2 (break 0 ^^ elements) ^^ break 0 ^^ string "]")
+
+and pp_injection_kwd = function
+ InjSet _ -> "set"
+| InjMap _ -> "map"
+| InjBigMap _ -> "big_map"
+| InjList _ -> "list"
+
+and pp_ne_injection :
+ 'a.('a -> document) -> 'a ne_injection reg -> document =
+ fun printer {value; _} ->
+ let {kind; ne_elements; _} = value in
+ let elements = pp_nsepseq ";" printer ne_elements in
+ let kwd = pp_ne_injection_kwd kind in
+ group (string (kwd ^ " [")
+ ^^ group (nest 2 (break 0 ^^ elements ))
+ ^^ break 0 ^^ string "]")
+
+and pp_ne_injection_kwd = function
+ NEInjAttr _ -> "attributes"
+| NEInjSet _ -> "set"
+| NEInjMap _ -> "map"
+| NEInjRecord _ -> "record"
+
+and pp_nsepseq :
+ 'a.string -> ('a -> document) -> ('a, t) Utils.nsepseq -> document =
+ fun sep printer elements ->
+ let elems = Utils.nsepseq_to_list elements
+ and sep = string sep ^^ break 1
+ in separate_map sep printer elems
+
+(* Patterns *)
+
+and pp_pattern = function
+ PConstr p -> pp_constr_pattern p
+| PVar v -> pp_ident v
+| PWild _ -> string "_"
+| PInt i -> pp_int i
+| PNat n -> pp_nat n
+| PBytes b -> pp_bytes b
+| PString s -> pp_string s
+| PList l -> pp_list_pattern l
+| PTuple t -> pp_tuple_pattern t
+
+and pp_int {value; _} =
+ string (Z.to_string (snd value))
+
+and pp_nat {value; _} =
+ string (Z.to_string (snd value) ^ "n")
+
+and pp_bytes {value; _} =
+ string ("0x" ^ Hex.show (snd value))
+
+and pp_constr_pattern = function
+ PUnit _ -> string "Unit"
+| PFalse _ -> string "False"
+| PTrue _ -> string "True"
+| PNone _ -> string "None"
+| PSomeApp a -> pp_psome a
+| PConstrApp a -> pp_pconstr_app a
+
+and pp_psome {value=_, p; _} =
+ prefix 4 1 (string "Some") (pp_par pp_pattern p)
+
+and pp_pconstr_app {value; _} =
+ match value with
+ constr, None -> pp_ident constr
+ | constr, Some ptuple ->
+ prefix 4 1 (pp_ident constr) (pp_tuple_pattern ptuple)
+
+and pp_tuple_pattern {value; _} =
+ let head, tail = value.inside in
+ let rec app = function
+ [] -> empty
+ | [e] -> group (break 1 ^^ pp_pattern e)
+ | e::items ->
+ group (break 1 ^^ pp_pattern e ^^ string ",") ^^ app items in
+ let components =
+ if tail = []
+ then pp_pattern head
+ else pp_pattern head ^^ string "," ^^ app (List.map snd tail)
+ in string "(" ^^ nest 1 (components ^^ string ")")
+
+and pp_list_pattern = function
+ PListComp cmp -> pp_list_comp cmp
+| PNil _ -> string "nil"
+| PParCons p -> pp_ppar_cons p
+| PCons p -> nest 4 (pp_nsepseq " #" pp_pattern p.value)
+
+and pp_list_comp e = pp_injection pp_pattern e
+
+and pp_ppar_cons {value; _} =
+ let patt1, _, patt2 = value.inside in
+ let comp = prefix 2 1 (pp_pattern patt1 ^^ string " ::") (pp_pattern patt2)
+ in string "(" ^^ nest 1 (comp ^^ string ")")
diff --git a/src/passes/01-parser/pascaligo/Tests/pp.ligo b/src/passes/01-parser/pascaligo/Tests/pp.ligo
index 2cd411592..2dd2563df 100644
--- a/src/passes/01-parser/pascaligo/Tests/pp.ligo
+++ b/src/passes/01-parser/pascaligo/Tests/pp.ligo
@@ -1,19 +1,23 @@
+function incr_map (const l : list (int)) : list (int) is
+ List.map (function (const i : int) : int is i + 1, l)
+
type t is timestamp * nat -> map (string, address)
type u is A | B of t * int | C of int -> (string -> int)
-type v is record a : t; b : record c : string end end
+type v is record aaaaaa : ttttttt; bbbbbb : record ccccccccc : string end end
function back (var store : store) : list (operation) * store is
begin
- var operations : list (operation) := list [];
- const a : nat = 0n;
- x0 := record foo = "1"; bar = 4n end;
- x1 := nil;
- x2 := list end;
+ var operations : list (operation) := list [];
+ const operations : list (operation) = list [];
+ const a : nat = 0n;
+ x0 := record foo = "1"; bar = 4n end;
+ x1 := nil;
+ x2 := list end;
x3 := 3#4# list [5; 6];
case foo of
10n -> skip
end;
- if s contains x then skip else skip;
+if saaa.0.1.2.a.b.b.x contains xxxxxxxxxxxxxxx[123] then skip else skip;
s := set [3_000mutez; -2; 1n];
a := A;
b := B (a);
@@ -21,12 +25,12 @@ function back (var store : store) : list (operation) * store is
d := None;
e := Some (a, B (b));
z := z.1.2;
- x := map [1 -> "1"; 2 -> "2"];
+x := if true then map [1 -> "1"; 2 -> "2"; 3 -> "3"; 4 -> "4"; 5 -> "5555555555555555"] else Unit;
y := a.b.c[3];
a := "hello " ^ "world" ^ "!";
- r := record a = 0 end;
- r := r with record a = 42 end;
- patch store.backers with set [(1); f(2*3)];
+ r := record aaaaaaaaaaaa = 100000000; bbbbbbb = ffffff (2, aa, x, y) + 1 end;
+ r := r with record aaaaaaaaaaa = 444442; bbbbbbbbb = 43 + f (z) / 234 end;
+ patch store.backers.8.aa.33333.5 with set [(1); f(2*3); 123124234/2345];
remove (1,2,3) from set foo.bar;
remove 3 from map foo.bar;
patch store.backers with map [sender -> amount];
@@ -39,7 +43,7 @@ function back (var store : store) : list (operation) * store is
begin
acc := 2 - (if toggle then f(x) else Unit);
end;
- for i := 1n to 10n
+ for i := 1n to 10n step 2n
begin
acc := acc + i;
end;
@@ -52,27 +56,32 @@ function back (var store : store) : list (operation) * store is
| B (x, C (y,z)) -> skip
| False#True#Unit#0xAA#"hi"#4#nil -> skip
]
- end with (operations, store)
+ end with (operations, store, (more_stuff, and_here_too))
-function claim (var store : store) : list (operation) * store is
+ function claim (var store : store; const bar : t; const baz : u; var z : operations * store * (more_stuff * and_here_too)) : list (operation) * store * timestamp * nat -> map (string, address) is
begin
- var operations : list (operation) := nil;
+ const operations : list (operation * map (address, map (longname, domain))) = nilllllllllll;
+var operations : list (operation * map (address, map (longname, domain))) := nilllllllllll;
+ attributes ["foo"; "inline"];
if now <= store.deadline then
failwith ("Too soon.")
else
case store.backers[sender] of
None ->
failwith ("Not a backer.")
+ | Some (0) -> skip
| Some (quantity) ->
if balance >= store.goal or store.funded then
failwith ("Goal reached: no refund.")
else
begin
- operations.0.foo := list [transaction (unit, sender, quantity)];
- remove sender from map store.backers
+ operations.0.foo := list [transaction (unit, sender, quantity); transaction (foo, bar, bazzzzzzzzzzzzzzz)];
+ remove sender.0099999.fffff [fiar (abaxxasfdf)] from map store.backers.foooooo.barrrrr.01.bazzzzzzz
end
end
- end with (operations, store)
+ end with long_function_name (operations, store, (more_stuff, (and_here_too, well_in_here_too), hello))
+
+attributes ["inline"; "foo"]
function withdraw (var store : store) : list (operation) * store is
begin
diff --git a/src/passes/01-parser/pascaligo/dune b/src/passes/01-parser/pascaligo/dune
index ca4865ae9..5b2f099ca 100644
--- a/src/passes/01-parser/pascaligo/dune
+++ b/src/passes/01-parser/pascaligo/dune
@@ -15,8 +15,10 @@
(name parser_pascaligo)
(public_name ligo.parser.pascaligo)
(modules
- Scoping AST pascaligo Parser ParserLog LexToken ParErr)
+ Scoping AST pascaligo Parser ParserLog LexToken ParErr Pretty)
(libraries
+ pprint
+ terminal_size
menhirLib
parser_shared
hex
diff --git a/src/passes/01-parser/pascaligo/error.messages.checked-in b/src/passes/01-parser/pascaligo/error.messages.checked-in
index 45dbffc55..3cad43084 100644
--- a/src/passes/01-parser/pascaligo/error.messages.checked-in
+++ b/src/passes/01-parser/pascaligo/error.messages.checked-in
@@ -1,6 +1,6 @@
-interactive_expr: BigMap LBRACKET Unit ARROW Bytes End
+interactive_expr: BigMap LBRACKET Verbatim ARROW Bytes End
##
-## Ends in an error in state: 151.
+## Ends in an error in state: 147.
##
## injection(BigMap,binding) -> BigMap LBRACKET sep_or_term_list(binding,SEMI) . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -11,16 +11,16 @@ interactive_expr: BigMap LBRACKET Unit ARROW Bytes End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 197, spurious reduction of production unary_expr -> core_expr
-## In state 147, spurious reduction of production mult_expr -> unary_expr
-## In state 173, spurious reduction of production add_expr -> mult_expr
-## In state 203, spurious reduction of production cons_expr -> add_expr
-## In state 200, spurious reduction of production cat_expr -> cons_expr
-## In state 223, spurious reduction of production comp_expr -> cat_expr
-## In state 210, spurious reduction of production set_membership -> comp_expr
-## In state 149, spurious reduction of production conj_expr -> set_membership
-## In state 227, spurious reduction of production disj_expr -> conj_expr
-## In state 195, spurious reduction of production expr -> disj_expr
+## In state 195, spurious reduction of production unary_expr -> core_expr
+## In state 143, spurious reduction of production mult_expr -> unary_expr
+## In state 172, spurious reduction of production add_expr -> mult_expr
+## In state 201, spurious reduction of production cons_expr -> add_expr
+## In state 198, spurious reduction of production cat_expr -> cons_expr
+## In state 221, spurious reduction of production comp_expr -> cat_expr
+## In state 208, spurious reduction of production set_membership -> comp_expr
+## In state 145, spurious reduction of production conj_expr -> set_membership
+## In state 225, spurious reduction of production disj_expr -> conj_expr
+## In state 193, spurious reduction of production expr -> disj_expr
## In state 248, spurious reduction of production binding -> expr ARROW expr
## In state 249, spurious reduction of production nsepseq(binding,SEMI) -> binding
## In state 245, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
@@ -30,7 +30,7 @@ interactive_expr: BigMap LBRACKET Unit ARROW Bytes End
interactive_expr: BigMap LBRACKET With
##
-## Ends in an error in state: 144.
+## Ends in an error in state: 140.
##
## injection(BigMap,binding) -> BigMap LBRACKET . sep_or_term_list(binding,SEMI) RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## injection(BigMap,binding) -> BigMap LBRACKET . RBRACKET [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -41,7 +41,7 @@ interactive_expr: BigMap LBRACKET With
-interactive_expr: BigMap Unit ARROW Bytes RBRACKET
+interactive_expr: BigMap Verbatim ARROW Bytes RBRACKET
##
## Ends in an error in state: 257.
##
@@ -54,16 +54,16 @@ interactive_expr: BigMap Unit ARROW Bytes RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 197, spurious reduction of production unary_expr -> core_expr
-## In state 147, spurious reduction of production mult_expr -> unary_expr
-## In state 173, spurious reduction of production add_expr -> mult_expr
-## In state 203, spurious reduction of production cons_expr -> add_expr
-## In state 200, spurious reduction of production cat_expr -> cons_expr
-## In state 223, spurious reduction of production comp_expr -> cat_expr
-## In state 210, spurious reduction of production set_membership -> comp_expr
-## In state 149, spurious reduction of production conj_expr -> set_membership
-## In state 227, spurious reduction of production disj_expr -> conj_expr
-## In state 195, spurious reduction of production expr -> disj_expr
+## In state 195, spurious reduction of production unary_expr -> core_expr
+## In state 143, spurious reduction of production mult_expr -> unary_expr
+## In state 172, spurious reduction of production add_expr -> mult_expr
+## In state 201, spurious reduction of production cons_expr -> add_expr
+## In state 198, spurious reduction of production cat_expr -> cons_expr
+## In state 221, spurious reduction of production comp_expr -> cat_expr
+## In state 208, spurious reduction of production set_membership -> comp_expr
+## In state 145, spurious reduction of production conj_expr -> set_membership
+## In state 225, spurious reduction of production disj_expr -> conj_expr
+## In state 193, spurious reduction of production expr -> disj_expr
## In state 248, spurious reduction of production binding -> expr ARROW expr
## In state 249, spurious reduction of production nsepseq(binding,SEMI) -> binding
## In state 245, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
@@ -73,7 +73,7 @@ interactive_expr: BigMap Unit ARROW Bytes RBRACKET
interactive_expr: BigMap With
##
-## Ends in an error in state: 143.
+## Ends in an error in state: 139.
##
## injection(BigMap,binding) -> BigMap . sep_or_term_list(binding,SEMI) End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## injection(BigMap,binding) -> BigMap . End [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -88,7 +88,7 @@ interactive_expr: BigMap With
interactive_expr: C_Some With
##
-## Ends in an error in state: 139.
+## Ends in an error in state: 135.
##
## core_expr -> C_Some . arguments [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -98,7 +98,7 @@ interactive_expr: C_Some With
-interactive_expr: Case Unit Of C_Some LPAR WILD With
+interactive_expr: Case Verbatim Of C_Some LPAR WILD With
##
## Ends in an error in state: 285.
##
@@ -110,7 +110,7 @@ interactive_expr: Case Unit Of C_Some LPAR WILD With
-interactive_expr: Case Unit Of C_Some LPAR With
+interactive_expr: Case Verbatim Of C_Some LPAR With
##
## Ends in an error in state: 277.
##
@@ -122,7 +122,7 @@ interactive_expr: Case Unit Of C_Some LPAR With
-interactive_expr: Case Unit Of C_Some With
+interactive_expr: Case Verbatim Of C_Some With
##
## Ends in an error in state: 276.
##
@@ -134,7 +134,7 @@ interactive_expr: Case Unit Of C_Some With
-interactive_expr: Case Unit Of Constr LPAR WILD With
+interactive_expr: Case Verbatim Of Constr LPAR WILD With
##
## Ends in an error in state: 291.
##
@@ -147,7 +147,7 @@ interactive_expr: Case Unit Of Constr LPAR WILD With
-interactive_expr: Case Unit Of Constr LPAR With
+interactive_expr: Case Verbatim Of Constr LPAR With
##
## Ends in an error in state: 275.
##
@@ -159,7 +159,7 @@ interactive_expr: Case Unit Of Constr LPAR With
-interactive_expr: Case Unit Of Constr With
+interactive_expr: Case Verbatim Of Constr With
##
## Ends in an error in state: 274.
##
@@ -172,7 +172,7 @@ interactive_expr: Case Unit Of Constr With
-interactive_expr: Case Unit Of LBRACKET VBAR Block
+interactive_expr: Case Verbatim Of LBRACKET VBAR Block
##
## Ends in an error in state: 262.
##
@@ -184,7 +184,7 @@ interactive_expr: Case Unit Of LBRACKET VBAR Block
-interactive_expr: Case Unit Of LBRACKET WILD ARROW Bytes End
+interactive_expr: Case Verbatim Of LBRACKET WILD ARROW Bytes End
##
## Ends in an error in state: 326.
##
@@ -197,16 +197,16 @@ interactive_expr: Case Unit Of LBRACKET WILD ARROW Bytes End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 197, spurious reduction of production unary_expr -> core_expr
-## In state 147, spurious reduction of production mult_expr -> unary_expr
-## In state 173, spurious reduction of production add_expr -> mult_expr
-## In state 203, spurious reduction of production cons_expr -> add_expr
-## In state 200, spurious reduction of production cat_expr -> cons_expr
-## In state 223, spurious reduction of production comp_expr -> cat_expr
-## In state 210, spurious reduction of production set_membership -> comp_expr
-## In state 149, spurious reduction of production conj_expr -> set_membership
-## In state 227, spurious reduction of production disj_expr -> conj_expr
-## In state 195, spurious reduction of production expr -> disj_expr
+## In state 195, spurious reduction of production unary_expr -> core_expr
+## In state 143, spurious reduction of production mult_expr -> unary_expr
+## In state 172, spurious reduction of production add_expr -> mult_expr
+## In state 201, spurious reduction of production cons_expr -> add_expr
+## In state 198, spurious reduction of production cat_expr -> cons_expr
+## In state 221, spurious reduction of production comp_expr -> cat_expr
+## In state 208, spurious reduction of production set_membership -> comp_expr
+## In state 145, spurious reduction of production conj_expr -> set_membership
+## In state 225, spurious reduction of production disj_expr -> conj_expr
+## In state 193, spurious reduction of production expr -> disj_expr
## In state 324, spurious reduction of production case_clause(expr) -> pattern ARROW expr
## In state 328, spurious reduction of production nsepseq(case_clause(expr),VBAR) -> case_clause(expr)
## In state 325, spurious reduction of production cases(expr) -> nsepseq(case_clause(expr),VBAR)
@@ -214,7 +214,7 @@ interactive_expr: Case Unit Of LBRACKET WILD ARROW Bytes End
-interactive_expr: Case Unit Of LBRACKET With
+interactive_expr: Case Verbatim Of LBRACKET With
##
## Ends in an error in state: 261.
##
@@ -226,7 +226,7 @@ interactive_expr: Case Unit Of LBRACKET With
-interactive_expr: Case Unit Of LPAR WILD COMMA With
+interactive_expr: Case Verbatim Of LPAR WILD COMMA With
##
## Ends in an error in state: 292.
##
@@ -238,7 +238,7 @@ interactive_expr: Case Unit Of LPAR WILD COMMA With
-interactive_expr: Case Unit Of LPAR WILD CONS Bytes ARROW
+interactive_expr: Case Verbatim Of LPAR WILD CONS Bytes ARROW
##
## Ends in an error in state: 304.
##
@@ -257,7 +257,7 @@ interactive_expr: Case Unit Of LPAR WILD CONS Bytes ARROW
-interactive_expr: Case Unit Of LPAR WILD CONS With
+interactive_expr: Case Verbatim Of LPAR WILD CONS With
##
## Ends in an error in state: 296.
##
@@ -269,7 +269,7 @@ interactive_expr: Case Unit Of LPAR WILD CONS With
-interactive_expr: Case Unit Of LPAR WILD With
+interactive_expr: Case Verbatim Of LPAR WILD With
##
## Ends in an error in state: 295.
##
@@ -283,7 +283,7 @@ interactive_expr: Case Unit Of LPAR WILD With
-interactive_expr: Case Unit Of LPAR With
+interactive_expr: Case Verbatim Of LPAR With
##
## Ends in an error in state: 270.
##
@@ -296,7 +296,7 @@ interactive_expr: Case Unit Of LPAR With
-interactive_expr: Case Unit Of List LBRACKET WILD End
+interactive_expr: Case Verbatim Of List LBRACKET WILD End
##
## Ends in an error in state: 308.
##
@@ -315,7 +315,7 @@ interactive_expr: Case Unit Of List LBRACKET WILD End
-interactive_expr: Case Unit Of List LBRACKET With
+interactive_expr: Case Verbatim Of List LBRACKET With
##
## Ends in an error in state: 306.
##
@@ -328,7 +328,7 @@ interactive_expr: Case Unit Of List LBRACKET With
-interactive_expr: Case Unit Of List WILD RBRACKET
+interactive_expr: Case Verbatim Of List WILD RBRACKET
##
## Ends in an error in state: 320.
##
@@ -347,7 +347,7 @@ interactive_expr: Case Unit Of List WILD RBRACKET
-interactive_expr: Case Unit Of List WILD SEMI WILD SEMI With
+interactive_expr: Case Verbatim Of List WILD SEMI WILD SEMI With
##
## Ends in an error in state: 317.
##
@@ -360,7 +360,7 @@ interactive_expr: Case Unit Of List WILD SEMI WILD SEMI With
-interactive_expr: Case Unit Of List WILD SEMI WILD With
+interactive_expr: Case Verbatim Of List WILD SEMI WILD With
##
## Ends in an error in state: 316.
##
@@ -374,7 +374,7 @@ interactive_expr: Case Unit Of List WILD SEMI WILD With
-interactive_expr: Case Unit Of List WILD SEMI With
+interactive_expr: Case Verbatim Of List WILD SEMI With
##
## Ends in an error in state: 313.
##
@@ -387,7 +387,7 @@ interactive_expr: Case Unit Of List WILD SEMI With
-interactive_expr: Case Unit Of List WILD With
+interactive_expr: Case Verbatim Of List WILD With
##
## Ends in an error in state: 312.
##
@@ -401,7 +401,7 @@ interactive_expr: Case Unit Of List WILD With
-interactive_expr: Case Unit Of List With
+interactive_expr: Case Verbatim Of List With
##
## Ends in an error in state: 269.
##
@@ -416,7 +416,7 @@ interactive_expr: Case Unit Of List With
-interactive_expr: Case Unit Of VBAR Block
+interactive_expr: Case Verbatim Of VBAR Block
##
## Ends in an error in state: 331.
##
@@ -428,7 +428,7 @@ interactive_expr: Case Unit Of VBAR Block
-interactive_expr: Case Unit Of WILD ARROW Bytes RBRACKET
+interactive_expr: Case Verbatim Of WILD ARROW Bytes RBRACKET
##
## Ends in an error in state: 332.
##
@@ -441,16 +441,16 @@ interactive_expr: Case Unit Of WILD ARROW Bytes RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 197, spurious reduction of production unary_expr -> core_expr
-## In state 147, spurious reduction of production mult_expr -> unary_expr
-## In state 173, spurious reduction of production add_expr -> mult_expr
-## In state 203, spurious reduction of production cons_expr -> add_expr
-## In state 200, spurious reduction of production cat_expr -> cons_expr
-## In state 223, spurious reduction of production comp_expr -> cat_expr
-## In state 210, spurious reduction of production set_membership -> comp_expr
-## In state 149, spurious reduction of production conj_expr -> set_membership
-## In state 227, spurious reduction of production disj_expr -> conj_expr
-## In state 195, spurious reduction of production expr -> disj_expr
+## In state 195, spurious reduction of production unary_expr -> core_expr
+## In state 143, spurious reduction of production mult_expr -> unary_expr
+## In state 172, spurious reduction of production add_expr -> mult_expr
+## In state 201, spurious reduction of production cons_expr -> add_expr
+## In state 198, spurious reduction of production cat_expr -> cons_expr
+## In state 221, spurious reduction of production comp_expr -> cat_expr
+## In state 208, spurious reduction of production set_membership -> comp_expr
+## In state 145, spurious reduction of production conj_expr -> set_membership
+## In state 225, spurious reduction of production disj_expr -> conj_expr
+## In state 193, spurious reduction of production expr -> disj_expr
## In state 324, spurious reduction of production case_clause(expr) -> pattern ARROW expr
## In state 328, spurious reduction of production nsepseq(case_clause(expr),VBAR) -> case_clause(expr)
## In state 325, spurious reduction of production cases(expr) -> nsepseq(case_clause(expr),VBAR)
@@ -458,7 +458,7 @@ interactive_expr: Case Unit Of WILD ARROW Bytes RBRACKET
-interactive_expr: Case Unit Of WILD ARROW Bytes Type
+interactive_expr: Case Verbatim Of WILD ARROW Bytes Type
##
## Ends in an error in state: 328.
##
@@ -472,22 +472,22 @@ interactive_expr: Case Unit Of WILD ARROW Bytes Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 197, spurious reduction of production unary_expr -> core_expr
-## In state 147, spurious reduction of production mult_expr -> unary_expr
-## In state 173, spurious reduction of production add_expr -> mult_expr
-## In state 203, spurious reduction of production cons_expr -> add_expr
-## In state 200, spurious reduction of production cat_expr -> cons_expr
-## In state 223, spurious reduction of production comp_expr -> cat_expr
-## In state 210, spurious reduction of production set_membership -> comp_expr
-## In state 149, spurious reduction of production conj_expr -> set_membership
-## In state 227, spurious reduction of production disj_expr -> conj_expr
-## In state 195, spurious reduction of production expr -> disj_expr
+## In state 195, spurious reduction of production unary_expr -> core_expr
+## In state 143, spurious reduction of production mult_expr -> unary_expr
+## In state 172, spurious reduction of production add_expr -> mult_expr
+## In state 201, spurious reduction of production cons_expr -> add_expr
+## In state 198, spurious reduction of production cat_expr -> cons_expr
+## In state 221, spurious reduction of production comp_expr -> cat_expr
+## In state 208, spurious reduction of production set_membership -> comp_expr
+## In state 145, spurious reduction of production conj_expr -> set_membership
+## In state 225, spurious reduction of production disj_expr -> conj_expr
+## In state 193, spurious reduction of production expr -> disj_expr
## In state 324, spurious reduction of production case_clause(expr) -> pattern ARROW expr
##
-interactive_expr: Case Unit Of WILD ARROW Bytes VBAR With
+interactive_expr: Case Verbatim Of WILD ARROW Bytes VBAR With
##
## Ends in an error in state: 329.
##
@@ -499,7 +499,7 @@ interactive_expr: Case Unit Of WILD ARROW Bytes VBAR With
-interactive_expr: Case Unit Of WILD ARROW With
+interactive_expr: Case Verbatim Of WILD ARROW With
##
## Ends in an error in state: 323.
##
@@ -511,7 +511,7 @@ interactive_expr: Case Unit Of WILD ARROW With
-interactive_expr: Case Unit Of WILD CONS WILD CONS With
+interactive_expr: Case Verbatim Of WILD CONS WILD CONS With
##
## Ends in an error in state: 302.
##
@@ -523,7 +523,7 @@ interactive_expr: Case Unit Of WILD CONS WILD CONS With
-interactive_expr: Case Unit Of WILD CONS WILD With
+interactive_expr: Case Verbatim Of WILD CONS WILD With
##
## Ends in an error in state: 301.
##
@@ -536,7 +536,7 @@ interactive_expr: Case Unit Of WILD CONS WILD With
-interactive_expr: Case Unit Of WILD CONS With
+interactive_expr: Case Verbatim Of WILD CONS With
##
## Ends in an error in state: 299.
##
@@ -548,7 +548,7 @@ interactive_expr: Case Unit Of WILD CONS With
-interactive_expr: Case Unit Of WILD RPAR
+interactive_expr: Case Verbatim Of WILD RPAR
##
## Ends in an error in state: 322.
##
@@ -566,7 +566,7 @@ interactive_expr: Case Unit Of WILD RPAR
-interactive_expr: Case Unit Of WILD With
+interactive_expr: Case Verbatim Of WILD With
##
## Ends in an error in state: 298.
##
@@ -579,7 +579,7 @@ interactive_expr: Case Unit Of WILD With
-interactive_expr: Case Unit Of With
+interactive_expr: Case Verbatim Of With
##
## Ends in an error in state: 260.
##
@@ -592,7 +592,7 @@ interactive_expr: Case Unit Of With
-interactive_expr: Case Unit VBAR
+interactive_expr: Case Verbatim VBAR
##
## Ends in an error in state: 259.
##
@@ -606,23 +606,23 @@ interactive_expr: Case Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 197, spurious reduction of production unary_expr -> core_expr
-## In state 147, spurious reduction of production mult_expr -> unary_expr
-## In state 173, spurious reduction of production add_expr -> mult_expr
-## In state 203, spurious reduction of production cons_expr -> add_expr
-## In state 200, spurious reduction of production cat_expr -> cons_expr
-## In state 223, spurious reduction of production comp_expr -> cat_expr
-## In state 210, spurious reduction of production set_membership -> comp_expr
-## In state 149, spurious reduction of production conj_expr -> set_membership
-## In state 227, spurious reduction of production disj_expr -> conj_expr
-## In state 195, spurious reduction of production expr -> disj_expr
+## In state 195, spurious reduction of production unary_expr -> core_expr
+## In state 143, spurious reduction of production mult_expr -> unary_expr
+## In state 172, spurious reduction of production add_expr -> mult_expr
+## In state 201, spurious reduction of production cons_expr -> add_expr
+## In state 198, spurious reduction of production cat_expr -> cons_expr
+## In state 221, spurious reduction of production comp_expr -> cat_expr
+## In state 208, spurious reduction of production set_membership -> comp_expr
+## In state 145, spurious reduction of production conj_expr -> set_membership
+## In state 225, spurious reduction of production disj_expr -> conj_expr
+## In state 193, spurious reduction of production expr -> disj_expr
##
interactive_expr: Case With
##
-## Ends in an error in state: 138.
+## Ends in an error in state: 134.
##
## case(expr) -> Case . expr Of option(VBAR) cases(expr) End [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
## case(expr) -> Case . expr Of LBRACKET option(VBAR) cases(expr) RBRACKET [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
@@ -635,7 +635,7 @@ interactive_expr: Case With
interactive_expr: Constr DOT And With
##
-## Ends in an error in state: 176.
+## Ends in an error in state: 175.
##
## core_expr -> module_field . [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## fun_call -> module_field . arguments [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -648,7 +648,7 @@ interactive_expr: Constr DOT And With
interactive_expr: Constr DOT Ident DOT With
##
-## Ends in an error in state: 127.
+## Ends in an error in state: 123.
##
## projection -> Constr DOT Ident DOT . nsepseq(selection,DOT) [ With VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
##
@@ -660,7 +660,7 @@ interactive_expr: Constr DOT Ident DOT With
interactive_expr: Constr DOT Ident With
##
-## Ends in an error in state: 126.
+## Ends in an error in state: 122.
##
## module_fun -> Ident . [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
@@ -673,7 +673,7 @@ interactive_expr: Constr DOT Ident With
interactive_expr: Constr DOT With
##
-## Ends in an error in state: 122.
+## Ends in an error in state: 118.
##
## module_field -> Constr DOT . module_fun [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
@@ -686,7 +686,7 @@ interactive_expr: Constr DOT With
interactive_expr: Constr With
##
-## Ends in an error in state: 121.
+## Ends in an error in state: 117.
##
## core_expr -> Constr . arguments [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## core_expr -> Constr . [ VBAR Type To Then TIMES Step SLASH SEMI Recursive RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -699,9 +699,9 @@ interactive_expr: Constr With
-interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON Ident Is With
+interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON String Is With
##
-## Ends in an error in state: 119.
+## Ends in an error in state: 115.
##
## fun_expr -> Function parameters COLON type_expr Is . expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -711,9 +711,9 @@ interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON Ident Is With
-interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON Ident VBAR
+interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON String VBAR
##
-## Ends in an error in state: 118.
+## Ends in an error in state: 114.
##
## fun_expr -> Function parameters COLON type_expr . Is expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -724,17 +724,16 @@ interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON Ident VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 15, spurious reduction of production core_type -> Ident
-## In state 29, spurious reduction of production cartesian -> core_type
-## In state 35, spurious reduction of production fun_type -> cartesian
-## In state 43, spurious reduction of production type_expr -> fun_type
+## In state 30, spurious reduction of production cartesian -> core_type
+## In state 36, spurious reduction of production fun_type -> cartesian
+## In state 44, spurious reduction of production type_expr -> fun_type
##
interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON With
##
-## Ends in an error in state: 117.
+## Ends in an error in state: 113.
##
## fun_expr -> Function parameters COLON . type_expr Is expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -746,7 +745,7 @@ interactive_expr: Function LPAR Const Ident COLON Ident RPAR COLON With
interactive_expr: Function LPAR Const Ident COLON Ident RPAR With
##
-## Ends in an error in state: 116.
+## Ends in an error in state: 112.
##
## fun_expr -> Function parameters . COLON type_expr Is expr [ VBAR Type To Then Step SEMI Recursive RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -758,7 +757,7 @@ interactive_expr: Function LPAR Const Ident COLON Ident RPAR With
interactive_expr: Function LPAR Const Ident COLON With
##
-## Ends in an error in state: 78.
+## Ends in an error in state: 79.
##
## param_decl -> Const Ident COLON . param_type [ SEMI RPAR ]
##
@@ -770,7 +769,7 @@ interactive_expr: Function LPAR Const Ident COLON With
interactive_expr: Function LPAR Const Ident With
##
-## Ends in an error in state: 77.
+## Ends in an error in state: 78.
##
## param_decl -> Const Ident . COLON param_type [ SEMI RPAR ]
##
@@ -782,7 +781,7 @@ interactive_expr: Function LPAR Const Ident With
interactive_expr: Function LPAR Const With
##
-## Ends in an error in state: 76.
+## Ends in an error in state: 77.
##
## param_decl -> Const . Ident COLON param_type [ SEMI RPAR ]
##
@@ -794,7 +793,7 @@ interactive_expr: Function LPAR Const With
interactive_expr: Function LPAR Var Ident COLON Ident SEMI With
##
-## Ends in an error in state: 81.
+## Ends in an error in state: 82.
##
## nsepseq(param_decl,SEMI) -> param_decl SEMI . nsepseq(param_decl,SEMI) [ RPAR ]
##
@@ -806,7 +805,7 @@ interactive_expr: Function LPAR Var Ident COLON Ident SEMI With
interactive_expr: Function LPAR Var Ident COLON Ident VBAR
##
-## Ends in an error in state: 80.
+## Ends in an error in state: 81.
##
## nsepseq(param_decl,SEMI) -> param_decl . [ RPAR ]
## nsepseq(param_decl,SEMI) -> param_decl . SEMI nsepseq(param_decl,SEMI) [ RPAR ]
@@ -818,18 +817,18 @@ interactive_expr: Function LPAR Var Ident COLON Ident VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 15, spurious reduction of production core_type -> Ident
-## In state 29, spurious reduction of production cartesian -> core_type
-## In state 35, spurious reduction of production fun_type -> cartesian
-## In state 75, spurious reduction of production param_type -> fun_type
-## In state 74, spurious reduction of production param_decl -> Var Ident COLON param_type
+## In state 16, spurious reduction of production core_type -> Ident
+## In state 30, spurious reduction of production cartesian -> core_type
+## In state 36, spurious reduction of production fun_type -> cartesian
+## In state 76, spurious reduction of production param_type -> fun_type
+## In state 75, spurious reduction of production param_decl -> Var Ident COLON param_type
##