branch: externals/yaml
commit 79a6bbc1e16955736299e162972e849cf2de0ae3
Author: Zachary Romero <zacrom...@posteo.net>
Commit: Zachary Romero <zacrom...@posteo.net>

    Fix various parsing bugs; reduce stack usage of parsing strings
---
 yaml-tests.el |   89 +-
 yaml.el       | 2730 +++++++++++++++++++++++++++++----------------------------
 2 files changed, 1462 insertions(+), 1357 deletions(-)

diff --git a/yaml-tests.el b/yaml-tests.el
index 65252affb6..1bc0196bf9 100644
--- a/yaml-tests.el
+++ b/yaml-tests.el
@@ -131,6 +131,16 @@
   strip")
                  ["literal\n" " folded\n" "keep\n\n" " strip"]))
 
+  ;; Example 8.5
+  (should (equal (yaml-parse-string " # Strip
+  # Comments:
+strip: |-
+   # text
+\s\s
+ # Clip
+  # comments:" :object-type 'alist)
+                 '(("strip" . "# text"))))
+
   (should (equal (yaml-parse-string ">
 
  folded
@@ -149,6 +159,7 @@
 # Comment")
 
                  "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * 
lines\n\nlast line\n"))
+
   (should (equal (yaml-parse-string "- # Empty
 - abc")
                  [:null "abc"]))
@@ -259,7 +270,68 @@ Document
 { matches
 % : 20 }
 ..." :object-type 'alist)
-                 '(("matches %" . 20)))))
+                 '(("matches %" . 20))))
+
+  (should (equal (yaml-parse-string "strip: |-
+   beep
+  # text" :object-type 'alist)
+                 '(("strip" . "beep"))))
+
+  (should (equal (yaml-parse-string "
+- one: |
+   hey
+- two" :object-type 'alist)
+                 [(("one" . "hey\n"))
+                  "two"]))
+
+  (should (equal (yaml-parse-string "
+one:
+     note: |-
+      this is a note
+     two: three" :object-type 'alist)
+                 '(("one" . (("note" . "this is a note")
+                             ("two" . "three"))))))
+
+  (should (equal (yaml-parse-string "key: |-
+   # not
+   # a
+   # comment
+  # these
+ # are
+# all
+# comments" :object-type 'alist)
+                 '(("key" . "# not\n# a\n# comment"))))
+  (should (equal (yaml-parse-string "
+abc:
+  key-1: |-
+   # not
+   # a
+   # comment
+  key-2: [1, 2, \"three\"]
+  key-3:
+      - deeply
+      - |
+         nested
+  # these
+ # are
+# all
+# comments" :object-type 'alist)
+                 '(("abc" ("key-1" . "# not
+# a
+# comment") ("key-2" . [1 2 "three"]) ("key-3" . ["deeply" "nested
+"])))))
+
+  (should (equal (yaml-parse-string "
+key-1: |-2
+    ---
+    ---
+key-2: |2-
+    ---
+    ---"
+                                    :object-type 'alist)
+                 '(("key-1" . "  ---\n  ---")
+                   ("key-2" . "  ---\n  ---")))))
+
 
 (ert-deftest yaml-parsing-completes ()
   "Tests that the yaml parses."
@@ -272,7 +344,7 @@ Document
   (should (yaml-parse-string "{ ? !!str : !!str }"))
   (should (yaml-parse-string "{ ? : }"))
   (should (yaml-parse-string "{ ? !!str \"one\" : \"two\"}"))
-  (should (let ((max-lisp-eval-depth 1000))
+  (should (let ((max-lisp-eval-depth 1050))
             (yaml-parse-string
              "apiVersion: apps/v1
 kind: Deployment
@@ -371,8 +443,17 @@ keep: |+
   - one
   - two : three"))
   (should (yaml-parse-string "- # Empty
-- abc")))
-
+- abc"))
+
+  ;; The following tests make sure long strings don't blow up the stack when 
trying to traverse the tree.
+  (should (yaml-parse-string 
"oarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoir
 [...]
+# beep" :object-type 'alist))
+  (should (yaml-parse-string 
"'oarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoi
 [...]
+# beep" :object-type 'alist))
+  (should (yaml-parse-string 
"\"oarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnao
 [...]
+# beep" :object-type 'alist))
+  (should (yaml-parse-string "|\n 
oarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretnaoirsetnaorsentaorsentoaroarsietnaorsetnaorstnearsotnarsoitneiaosretn
 [...]
+# beep" :object-type 'alist)))
 
 
 (provide 'yaml-tests)
diff --git a/yaml.el b/yaml.el
index 18bd94574a..8468d717bc 100644
--- a/yaml.el
+++ b/yaml.el
@@ -33,6 +33,13 @@
 ;; YAML Projects JSON version of the grammar spec
 ;; (https://github.com/yaml/yaml-grammar) via the 'grammargen.bb'
 ;; script.
+;;
+;; The main function which parses YAML is `yaml-parse-string'.  The following
+;; are some examples of its usage:
+;;
+;; (yaml-parse-string "key1: value1\nkey2: value2")
+;; (yaml-parse-string "key1: value1\nkey2: value2" :object-type 'alist)
+;; (yaml-parse-string "numbers: [1, 2, 3]" :sequence-type 'list)
 
 ;;; Code:
 
@@ -207,19 +214,21 @@ This flag is intended for development purposes.")
   (let* ((pos 0)
          (chomp-indicator :clip)
          (indentation-indicator nil)
-         (char (and (< pos (length header)) (aref header pos))))
+         (char (and (< pos (length header)) (aref header pos)))
+         (process-char (lambda (char)
+                         (when char
+                          (cond
+                           ((< ?0 char ?9)
+                            (progn (setq indentation-indicator (- char ?0))))
+                           ((equal char ?\-) (setq chomp-indicator :strip))
+                           ((equal char ?\+) (setq chomp-indicator :keep)))
+                          (setq pos (1+ pos))))))
     (when (or (eq char ?\|) (eq char ?\>))
       (setq pos (1+ pos))
       (setq char (and (< pos (length header)) (aref header pos))))
-    (when char
-      (cond
-       ((< ?0 char ?9)
-        (progn (setq indentation-indicator (- char ?0)) (setq pos (1+ pos))))))
+    (funcall process-char char)
     (let ((char (and (< pos (length header)) (aref header pos)))) ;
-      (when char
-        (cond
-         ((equal char ?\-) (progn (setq chomp-indicator :strip)))
-         ((equal char ?\+) (progn (setq chomp-indicator :keep)))))
+      (funcall process-char char)
       (list chomp-indicator indentation-indicator))))
 
 (defun yaml--chomp-text (text-body chomp)
@@ -247,13 +256,12 @@ This flag is intended for development purposes.")
          (text-body (substring text (1+ (string-match "\n" text))))
          (parsed-header (yaml--parse-block-header header-line))
          (chomp (car parsed-header))
-         (starting-spaces (or (and (cadr parsed-header)
-                                   (make-string (cadr parsed-header) ?\s))
-                              (let ((_ (string-match "^\n*\\( *\\)" 
text-body)))
-                                (match-string 1 text-body))))
+         (starting-spaces-ct (or (cadr parsed-header)
+                                 (let ((_ (string-match "^\n*\\( *\\)" 
text-body)))
+                                   (length (match-string 1 text-body)))))
          (lines (split-string text-body "\n"))
          (striped-lines (seq-map (lambda (l)
-                                   (string-remove-prefix starting-spaces l))
+                                   (replace-regexp-in-string (format "\\` 
\\{0,%d\\}" starting-spaces-ct) "" l))
                                  lines))
          (text-body (string-join striped-lines "\n")))
     (yaml--chomp-text text-body chomp)))
@@ -413,8 +421,7 @@ This flag is intended for development purposes.")
       (let ((comment-text (pop yaml--object-stack)))
         (unless (stringp value)
           (error "Trail-comments can't be nested under non-string"))
-        (yaml--scalar-event style (replace-regexp-in-string (concat 
(regexp-quote comment-text) "\n*\\'") "" value )))
-      (pop yaml--state-stack))
+        (yaml--scalar-event style (replace-regexp-in-string (concat 
(regexp-quote comment-text) "\n*\\'") "" value ))))
      ((equal top-state nil))))
   '(:scalar))
 
@@ -595,6 +602,10 @@ reverse order."
                                   (replaced (substring replaced 1 (1- (length 
replaced)))))
                              (yaml--scalar-event "double" replaced))))
     ("c-l+literal" . (lambda (text)
+                       (when (equal (car yaml--state-stack) :trail-comments)
+                         (pop yaml--state-stack)
+                         (let ((comment-text (pop yaml--object-stack)))
+                           (setq text (replace-regexp-in-string (concat 
(regexp-quote comment-text) "\n*\\'") "" text))))
                        (let* ((processed-text (yaml--process-literal-text 
text)))
                          (yaml--scalar-event "folded" processed-text))))
     ("c-l+folded" . (lambda (text)
@@ -617,6 +628,10 @@ reverse order."
                            (yaml--alias-event (substring text 1)))))
   "List of functions for matched rules that run on the exiting of a rule.")
 
+(defconst yaml--terminal-rules
+  '( "l-nb-literal-text" "l-nb-diff-lines" "ns-plain" "c-single-quoted" 
"c-double-quoted")
+  "List of rules that indicate that the parse tree should end at and children 
ignored.")
+
 (defun yaml--walk-events (tree)
   "Event walker iterates over the parse TREE and signals events based off of 
the parsed rules."
   (when (consp tree)
@@ -645,7 +660,7 @@ reverse order."
                          (make-string (- 70 (length yaml--states)) ?\s)
                          ,name
                          args
-                         (yaml--slice yaml--parsing-position))))
+                         (replace-regexp-in-string "\n" "↓" (yaml--slice 
yaml--parsing-position)))))
            (_ (yaml--push-state ,name))
            (,res-symbol ,rule))
       (when (and yaml--parse-debug ,res-symbol (not (member ,name 
yaml--tracing-ignore)))
@@ -653,11 +668,14 @@ reverse order."
                  (make-string (length yaml--states) ?-)
                  (make-string (- 70 (length yaml--states)) ?\s)
                  ,name
-                 (substring yaml--parsing-input beg yaml--parsing-position)))
+                 (replace-regexp-in-string "\n" "↓" (substring 
yaml--parsing-input beg yaml--parsing-position))))
       (yaml--pop-state)
       (if (not ,res-symbol)
           nil
-        (let ((res-type (cdr (assoc ,name yaml--grammar-resolution-rules))))
+        (let ((res-type (cdr (assoc ,name yaml--grammar-resolution-rules)))
+              (,res-symbol (if (member ,name yaml--terminal-rules)
+                               t ;; Ignore children if at-rule is indicated to 
be terminal.
+                             ,res-symbol)))
           (cond
            ((or (assoc ,name yaml--grammar-events-in)
                 (assoc ,name yaml--grammar-events-out))
@@ -974,1341 +992,1347 @@ value.  It defaults to the symbol :false."
 
 Rules for this function are defined by the yaml-spec JSON file."
 
-  (cond
-   ((eq state 'c-flow-sequence)
-    (let ((n (nth 0 args))
-          (c (nth 1 args)))
-      (yaml--frame "c-flow-sequence"
-        (yaml--all (yaml--chr ?\[)
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate n c)))
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'ns-s-flow-seq-entries n
-                                                                       
(yaml--parse-from-grammar 'in-flow c))))
-                   (yaml--chr ?\])))))
-
-   ((eq state 'c-indentation-indicator)
-    (let ((m (nth 0 args)))
-      (yaml--frame "c-indentation-indicator"
-        (yaml--any (when (yaml--parse-from-grammar 'ns-dec-digit)
-                     (yaml--set m (yaml--ord (lambda () (yaml--match)))) t)
-                   (when (yaml--empty)
-                     (yaml--set m (yaml--auto-detect m)) t)))))
-
-   ((eq state 'ns-reserved-directive)
-    (yaml--frame "ns-reserved-directive"
-      (yaml--all (yaml--parse-from-grammar 'ns-directive-name)
-                 (yaml--rep2 0 nil (lambda () (yaml--all 
(yaml--parse-from-grammar 's-separate-in-line)
-                                                         
(yaml--parse-from-grammar 'ns-directive-parameter)))))))
-
-   ((eq state 'ns-flow-map-implicit-entry)
-    (let ((n (nth 0 args))
-          (c (nth 1 args)))
-      (yaml--frame "ns-flow-map-implicit-entry"
-        ;; NOTE: I ran into a bug with the order of these rules. It seems
-        ;; sometimes ns-flow-map-yaml-key-entry succeeds with an empty
-        ;; when the correct answer should be
-        ;; c-ns-flow-map-json-key-entry.  Changing the order seemed to
-        ;; have fix this but this seems like a bandage fix.
-        (yaml--any (yaml--parse-from-grammar 'c-ns-flow-map-json-key-entry n c)
-                   (yaml--parse-from-grammar 'ns-flow-map-yaml-key-entry n c)
-                   (yaml--parse-from-grammar 'c-ns-flow-map-empty-key-entry n 
c)))))
-
-   ((eq state 'ns-esc-double-quote)
-    (yaml--frame "ns-esc-double-quote"
-      (yaml--chr ?\")))
-
-   ((eq state 'c-mapping-start)
-    (yaml--frame "c-mapping-start" (yaml--chr ?\{)))
-
-   ((eq state 'ns-flow-seq-entry)
-    (let ((n (nth 0 args))
-          (c (nth 1 args)))
-      (yaml--frame "ns-flow-seq-entry"
-        (yaml--any (yaml--parse-from-grammar 'ns-flow-pair n c)
-                   (yaml--parse-from-grammar 'ns-flow-node n c)))))
-
-   ((eq state 'l-empty)
-    (let ((n (nth 0 args))
-          (c (nth 1 args)))
-      (yaml--frame "l-empty"
-        (yaml--all (yaml--any (yaml--parse-from-grammar 's-line-prefix n c)
-                              (yaml--parse-from-grammar 's-indent-lt n))
-                   (yaml--parse-from-grammar 'b-as-line-feed)))))
-
-   ((eq state 'c-primary-tag-handle)
-    (yaml--frame "c-primary-tag-handle" (yaml--chr ?\!)))
-
-   ((eq state 'ns-plain-safe-out)
-    (yaml--frame "ns-plain-safe-out"
-      (yaml--parse-from-grammar 'ns-char)))
-
-   ((eq state 'c-ns-shorthand-tag)
-    (yaml--frame "c-ns-shorthand-tag"
-      (yaml--all (yaml--parse-from-grammar 'c-tag-handle)
-                 (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-tag-char))))))
-
-   ((eq state 'nb-ns-single-in-line)
-    (yaml--frame "nb-ns-single-in-line"
-      (yaml--rep2 0 nil (lambda () (yaml--all (yaml--rep2 0 nil (lambda () 
(yaml--parse-from-grammar 's-white)))
-                                              (yaml--parse-from-grammar 
'ns-single-char))))))
-
-   ((eq state 'l-strip-empty)
-    (let ((n (nth 0 args)))
-      (yaml--frame "l-strip-empty"
-        (yaml--all (yaml--rep2 0 nil (lambda () (yaml--all 
(yaml--parse-from-grammar 's-indent-le n)
-                                                           
(yaml--parse-from-grammar 'b-non-content))))
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'l-trail-comments n)))))))
-
-   ((eq state 'c-indicator)
-    (yaml--frame "c-indicator"
-      (yaml--any (yaml--chr ?\-)
-                 (yaml--chr ?\?)
-                 (yaml--chr ?\:)
-                 (yaml--chr ?\,)
-                 (yaml--chr ?\[)
-                 (yaml--chr ?\])
-                 (yaml--chr ?\{)
-                 (yaml--chr ?\})
-                 (yaml--chr ?\#)
-                 (yaml--chr ?\&)
-                 (yaml--chr ?\*)
-                 (yaml--chr ?\!)
-                 (yaml--chr ?\|)
-                 (yaml--chr ?\>)
-                 (yaml--chr ?\')
-                 (yaml--chr ?\")
-                 (yaml--chr ?\%)
-                 (yaml--chr ?\@)
-                 (yaml--chr ?\`))))
-
-   ((eq state 'c-l+literal)
-    (let ((n (nth 0 args)))
-      (yaml--frame "c-l+literal"
-        (yaml--all (yaml--chr ?\|)
-                   (yaml--parse-from-grammar 'c-b-block-header 
(yaml--state-curr-m) (yaml--state-curr-t))
-                   (yaml--parse-from-grammar 'l-literal-content (+ n 
(yaml--state-curr-m)) (yaml--state-curr-t))))))
-
-   ((eq state 'c-single-quoted)
-    (let ((n (nth 0 args))
-          (c (nth 1 args)))
-      (yaml--frame "c-single-quoted"
-        (yaml--all (yaml--chr ?\')
-                   (yaml--parse-from-grammar 'nb-single-text n c)
-                   (yaml--chr ?\')))))
-
-   ((eq state 'c-forbidden)
-    (yaml--frame "c-forbidden"
-      (yaml--all (yaml--start-of-line)
-                 (yaml--any (yaml--parse-from-grammar 'c-directives-end)
-                            (yaml--parse-from-grammar 'c-document-end))
-                 (yaml--any (yaml--parse-from-grammar 'b-char) 
(yaml--parse-from-grammar 's-white) (yaml--end-of-stream)))))
-
-   ((eq state 'c-ns-alias-node)
-    (yaml--frame "c-ns-alias-node"
-      (yaml--all (yaml--chr ?\*)
-                 (yaml--parse-from-grammar 'ns-anchor-name))))
-
-   ((eq state 'c-secondary-tag-handle)
-    (yaml--frame "c-secondary-tag-handle"
-      (yaml--all (yaml--chr ?\!) (yaml--chr ?\!))))
-
-   ((eq state 'ns-esc-next-line)
-    (yaml--frame "ns-esc-next-line" (yaml--chr ?\n)))
-
-   ((eq state 'l-nb-same-lines)
-    (let ((n (nth 0 args)))
-      (yaml--frame "l-nb-same-lines"
-        (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-empty n "block-in")))
-                   (yaml--any (yaml--parse-from-grammar 'l-nb-folded-lines n)
-                              (yaml--parse-from-grammar 'l-nb-spaced-lines 
n))))))
-
-   ((eq state 'c-alias)
-    (yaml--frame "c-alias" (yaml--chr ?\*)))
-
-   ((eq state 'ns-single-char)
-    (yaml--frame "ns-single-char"
-      (yaml--but (lambda () (yaml--parse-from-grammar 'nb-single-char))
-                 (lambda () (yaml--parse-from-grammar 's-white)))))
-
-   ((eq state 'c-l-block-map-implicit-value)
-    (let ((n (nth 0 args)))
-      (yaml--frame "c-l-block-map-implicit-value"
-        (yaml--all (yaml--chr ?\:)
-                   (yaml--any (yaml--parse-from-grammar 's-l+block-node n 
"block-out")
-                              (yaml--all (yaml--parse-from-grammar 'e-node)
-                                         (yaml--parse-from-grammar 
's-l-comments)))))))
-
-   ((eq state 'ns-uri-char)
-    (yaml--frame "ns-uri-char"
-      (yaml--any (yaml--all (yaml--chr ?\%)
-                            (yaml--parse-from-grammar 'ns-hex-digit)
-                            (yaml--parse-from-grammar 'ns-hex-digit))
-                 (yaml--parse-from-grammar 'ns-word-char)
-                 (yaml--chr ?\#)
-                 (yaml--chr ?\;)
-                 (yaml--chr ?\/)
-                 (yaml--chr ?\?)
-                 (yaml--chr ?\:)
-                 (yaml--chr ?\@)
-                 (yaml--chr ?\&)
-                 (yaml--chr ?\=)
-                 (yaml--chr ?\+)
-                 (yaml--chr ?\$)
-                 (yaml--chr ?\,)
-                 (yaml--chr ?\_)
-                 (yaml--chr ?\.)
-                 (yaml--chr ?\!)
-                 (yaml--chr ?\~)
-                 (yaml--chr ?\*)
-                 (yaml--chr ?\')
-                 (yaml--chr ?\()
-                 (yaml--chr ?\))
-                 (yaml--chr ?\[)
-                 (yaml--chr ?\]))))
-
-   ((eq state 'ns-esc-16-bit)
-    (yaml--frame "ns-esc-16-bit"
-      (yaml--all (yaml--chr ?u)
-                 (yaml--rep 4 4 (lambda () (yaml--parse-from-grammar 
'ns-hex-digit))))))
-
-   ((eq state 'l-nb-spaced-lines)
-    (let ((n (nth 0 args)))
-      (yaml--frame "l-nb-spaced-lines"
-        (yaml--all (yaml--parse-from-grammar 's-nb-spaced-text n)
-                   (yaml--rep2 0 nil (lambda () (yaml--all 
(yaml--parse-from-grammar 'b-l-spaced n)
-                                                           
(yaml--parse-from-grammar 's-nb-spaced-text n))))))))
-
-   ((eq state 'ns-plain)
-    (let ((n (nth 0 args))
-          (c (nth 1 args)))
-      (yaml--frame "ns-plain"
-        (cond
-         ((equal c "block-key") (yaml--parse-from-grammar 'ns-plain-one-line 
c))
-         ((equal c "flow-in") (yaml--parse-from-grammar 'ns-plain-multi-line n 
c))
-         ((equal c "flow-key") (yaml--parse-from-grammar 'ns-plain-one-line c))
-         ((equal c "flow-out") (yaml--parse-from-grammar 'ns-plain-multi-line 
n c))))))
-
-   ((eq state 'c-printable)
-    (yaml--frame "c-printable"
-      (yaml--any (yaml--chr ?\x09)
-                 (yaml--chr ?\x0A)
-                 (yaml--chr ?\x0D)
-                 (yaml--chr-range ?\x20 ?\x7E)
-                 (yaml--chr ?\x85)
-                 (yaml--chr-range ?\xA0 ?\xD7FF)
-                 (yaml--chr-range ?\xE000 ?\xFFFD)
-                 (yaml--chr-range ?\x010000 ?\x10FFFF))))
-
-   ((eq state 'c-mapping-value)
-    (yaml--frame "c-mapping-value" (yaml--chr ?\:)))
-
-   ((eq state 'l-nb-literal-text)
-    (let ((n (nth 0 args)))
-      (yaml--frame "l-nb-literal-text"
-        (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-empty n "block-in")))
-                   (yaml--parse-from-grammar 's-indent n)
-                   (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'nb-char)))))))
-
-   ((eq state 'ns-plain-char)
-    (let ((c (nth 0 args)))
-      (yaml--frame "ns-plain-char"
-        (yaml--any (yaml--but (lambda () (yaml--parse-from-grammar 
'ns-plain-safe c))
-                              (lambda () (yaml--chr ?\:)) (lambda () 
(yaml--chr ?\#)))
-                   (yaml--all (yaml--chk "<=" (yaml--parse-from-grammar 
'ns-char))
-                              (yaml--chr ?\#))
-                   (yaml--all (yaml--chr ?\:)
-                              (yaml--chk "=" (yaml--parse-from-grammar 
'ns-plain-safe c)))))))
-
-   ((eq state 'ns-anchor-char)
-    (yaml--frame "ns-anchor-char"
-      (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
-                 (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))
-
-   ((eq state 's-l+block-scalar)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "s-l+block-scalar"
-        (yaml--all (yaml--parse-from-grammar 's-separate (+ n 1) c)
-                   (yaml--rep 0 1 (lambda ()
-                                    (yaml--all (yaml--parse-from-grammar 
'c-ns-properties (+ n 1) c)
-                                               (yaml--parse-from-grammar 
's-separate (+ n 1) c))))
-                   (yaml--any (yaml--parse-from-grammar 'c-l+literal n)
-                              (yaml--parse-from-grammar 'c-l+folded n))))))
-
-   ((eq state 'ns-plain-safe-in)
-    (yaml--frame "ns-plain-safe-in"
-      (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
-                 (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))
-
-   ((eq state 'nb-single-text)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "nb-single-text"
-        (cond ((equal c "block-key") (yaml--parse-from-grammar 
'nb-single-one-line))
-              ((equal c "flow-in") (yaml--parse-from-grammar 
'nb-single-multi-line n))
-              ((equal c "flow-key") (yaml--parse-from-grammar 
'nb-single-one-line))
-              ((equal c "flow-out") (yaml--parse-from-grammar 
'nb-single-multi-line n))))))
-
-   ((eq state 's-indent-le)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-indent-le"
-        (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
's-space)))
-                   (<= (length (yaml--match)) n)))))
-
-   ((eq state 'ns-esc-carriage-return)
-    (yaml--frame "ns-esc-carriage-return" (yaml--chr ?\r)))
-
-   ((eq state 'l-chomped-empty)
-    (let ((n (nth 0 args))
-          (tt (nth 1 args)))
-      (yaml--frame "l-chomped-empty"
-        (cond ((equal tt "clip") (yaml--parse-from-grammar 'l-strip-empty n))
-              ((equal tt "keep") (yaml--parse-from-grammar 'l-keep-empty n))
-              ((equal tt "strip") (yaml--parse-from-grammar 'l-strip-empty 
n))))))
-
-   ((eq state 'c-s-implicit-json-key)
-    (let ((c (nth 0 args)))
-      (yaml--frame "c-s-implicit-json-key"
-        (yaml--all (yaml--max 1024)
-                   (yaml--parse-from-grammar 'c-flow-json-node nil c)
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate-in-line)))))))
-
-   ((eq state 'b-as-space)
-    (yaml--frame "b-as-space"
-      (yaml--parse-from-grammar 'b-break)))
-
-   ((eq state 'ns-s-flow-seq-entries)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-s-flow-seq-entries"
-        (yaml--all (yaml--parse-from-grammar 'ns-flow-seq-entry n c)
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate n c)))
-                   (yaml--rep 0 1 (lambda () (yaml--all (yaml--chr ?\,)
-                                                        (yaml--rep 0 1 (lambda 
() (yaml--parse-from-grammar 's-separate n c)))
-                                                        (yaml--rep 0 1 (lambda 
() (yaml--parse-from-grammar 'ns-s-flow-seq-entries n c))))))))))
-
-   ((eq state 'l-block-map-explicit-value)
-    (let ((n (nth 0 args)))
-      (yaml--frame "l-block-map-explicit-value"
-        (yaml--all (yaml--parse-from-grammar 's-indent n)
-                   (yaml--chr ?\:)
-                   (yaml--parse-from-grammar 's-l+block-indented n 
"block-out")))))
-
-   ((eq state 'c-ns-flow-map-json-key-entry)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "c-ns-flow-map-json-key-entry"
-        (yaml--all (yaml--parse-from-grammar 'c-flow-json-node n c)
-                   (yaml--any (yaml--all (yaml--rep 0 1 (lambda () 
(yaml--parse-from-grammar 's-separate n c)))
-                                         (yaml--parse-from-grammar 
'c-ns-flow-map-adjacent-value n c))
-                              (yaml--parse-from-grammar 'e-node))))))
-
-   ((eq state 'c-sequence-entry)
-    (yaml--frame "c-sequence-entry" (yaml--chr ?\-)))
-
-   ((eq state 'l-bare-document)
-    (yaml--frame "l-bare-document"
-      (yaml--all (yaml--exclude "c-forbidden")
-                 (yaml--parse-from-grammar 's-l+block-node -1 "block-in"))))
-
-   ;; TODO: don't use the symbol t as a variable.
-   ((eq state 'b-chomped-last)
-    (let ((tt (nth 0 args)))
-      (yaml--frame "b-chomped-last"
-        (cond ((equal tt "clip")
-               ;; TODO: Fix this
-               (yaml--any (yaml--parse-from-grammar 'b-as-line-feed)
-                          (yaml--end-of-stream)))
-              ((equal tt "keep")
-               (yaml--any (yaml--parse-from-grammar 'b-as-line-feed)
-                          (yaml--end-of-stream)))
-              ((equal tt "strip")
-               (yaml--any (yaml--parse-from-grammar 'b-non-content)
-                          (yaml--end-of-stream)))))))
-
-   ((eq state 'l-trail-comments)
-    (let ((n (nth 0 args)))
-      (yaml--frame "l-trail-comments"
-        (yaml--all (yaml--parse-from-grammar 's-indent-lt n)
-                   (yaml--parse-from-grammar 'c-nb-comment-text)
-                   (yaml--parse-from-grammar 'b-comment)
-                   (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-comment)))))))
-
-   ((eq state 'ns-flow-map-yaml-key-entry)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-flow-map-yaml-key-entry"
-        (yaml--all (yaml--parse-from-grammar 'ns-flow-yaml-node n c)
-                   (yaml--any (yaml--all (yaml--rep 0 1 (lambda () 
(yaml--parse-from-grammar 's-separate n c)))
-                                         (yaml--parse-from-grammar 
'c-ns-flow-map-separate-value n c))
-                              (yaml--parse-from-grammar 'e-node))))))
-
-   ((eq state 's-indent)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-indent"
-        (yaml--rep n n (lambda () (yaml--parse-from-grammar 's-space))))))
-
-   ((eq state 'ns-esc-line-separator)
-    (yaml--frame "ns-esc-line-separator" (yaml--chr ?\L)))
-
-   ((eq state 'ns-flow-yaml-node)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-flow-yaml-node"
-        (yaml--any (yaml--parse-from-grammar 'c-ns-alias-node)
-                   (yaml--parse-from-grammar 'ns-flow-yaml-content n c)
-                   (yaml--all (yaml--parse-from-grammar 'c-ns-properties n c)
-                              (yaml--any (yaml--all (yaml--parse-from-grammar 
's-separate n c)
-                                                    (yaml--parse-from-grammar 
'ns-flow-yaml-content n c))
-                                         (yaml--parse-from-grammar 
'e-scalar)))))))
-
-   ((eq state 'ns-yaml-version)
-    (yaml--frame "ns-yaml-version"
-      (yaml--all (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-dec-digit)))
-                 (yaml--chr ?\.)
-                 (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-dec-digit))))))
-
-   ((eq state 'c-folded)
-    (yaml--frame "c-folded" (yaml--chr ?\>)))
-
-   ((eq state 'c-directives-end)
-    (yaml--frame "c-directives-end"
-      (yaml--all (yaml--chr ?\-) (yaml--chr ?\-) (yaml--chr ?\-))))
-
-   ((eq state 's-double-break)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-double-break"
-        (yaml--any (yaml--parse-from-grammar 's-double-escaped n)
-                   (yaml--parse-from-grammar 's-flow-folded n)))))
-
-   ((eq state 's-nb-spaced-text)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-nb-spaced-text"
-        (yaml--all (yaml--parse-from-grammar 's-indent n)
-                   (yaml--parse-from-grammar 's-white)
-                   (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-char)))))))
-
-   ((eq state 'l-folded-content)
-    (let ((n (nth 0 args))
-          (tt (nth 1 args)))
-      (yaml--frame "l-folded-content"
-        (yaml--all (yaml--rep 0 1 (lambda ()
-                                    (yaml--all (yaml--parse-from-grammar 
'l-nb-diff-lines n)
-                                               (yaml--parse-from-grammar 
'b-chomped-last tt))))
-                   (yaml--parse-from-grammar 'l-chomped-empty n tt))))) ;; 
TODO: don't use yaml--state-t here
-
-   ((eq state 'nb-ns-plain-in-line)
-    (let ((c (nth 0 args)))
-      (yaml--frame "nb-ns-plain-in-line"
+  (pcase state
+    ('c-flow-sequence
+     (let ((n (nth 0 args))
+           (c (nth 1 args)))
+       (yaml--frame "c-flow-sequence"
+         (yaml--all (yaml--chr ?\[)
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate n c)))
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'ns-s-flow-seq-entries n
+                                                                        
(yaml--parse-from-grammar 'in-flow c))))
+                    (yaml--chr ?\])))))
+
+    ('c-indentation-indicator
+     (let ((m (nth 0 args)))
+       (yaml--frame "c-indentation-indicator"
+         (yaml--any (when (yaml--parse-from-grammar 'ns-dec-digit)
+                      (yaml--set m (yaml--ord (lambda () (yaml--match)))) t)
+                    (when (yaml--empty)
+                      (let ((new-m (yaml--auto-detect m)))
+                        (yaml--set m new-m))
+                      t)))))
+
+    ('ns-reserved-directive
+     (yaml--frame "ns-reserved-directive"
+       (yaml--all (yaml--parse-from-grammar 'ns-directive-name)
+                  (yaml--rep2 0 nil (lambda () (yaml--all 
(yaml--parse-from-grammar 's-separate-in-line)
+                                                          
(yaml--parse-from-grammar 'ns-directive-parameter)))))))
+
+    ('ns-flow-map-implicit-entry
+     (let ((n (nth 0 args))
+           (c (nth 1 args)))
+       (yaml--frame "ns-flow-map-implicit-entry"
+         ;; NOTE: I ran into a bug with the order of these rules. It seems
+         ;; sometimes ns-flow-map-yaml-key-entry succeeds with an empty
+         ;; when the correct answer should be
+         ;; c-ns-flow-map-json-key-entry.  Changing the order seemed to
+         ;; have fix this but this seems like a bandage fix.
+         (yaml--any (yaml--parse-from-grammar 'c-ns-flow-map-json-key-entry n 
c)
+                    (yaml--parse-from-grammar 'ns-flow-map-yaml-key-entry n c)
+                    (yaml--parse-from-grammar 'c-ns-flow-map-empty-key-entry n 
c)))))
+
+    ('ns-esc-double-quote
+     (yaml--frame "ns-esc-double-quote"
+       (yaml--chr ?\")))
+
+    ('c-mapping-start
+     (yaml--frame "c-mapping-start" (yaml--chr ?\{)))
+
+    ('ns-flow-seq-entry
+     (let ((n (nth 0 args))
+           (c (nth 1 args)))
+       (yaml--frame "ns-flow-seq-entry"
+         (yaml--any (yaml--parse-from-grammar 'ns-flow-pair n c)
+                    (yaml--parse-from-grammar 'ns-flow-node n c)))))
+
+    ('l-empty
+     (let ((n (nth 0 args))
+           (c (nth 1 args)))
+       (yaml--frame "l-empty"
+         (yaml--all (yaml--any (yaml--parse-from-grammar 's-line-prefix n c)
+                               (yaml--parse-from-grammar 's-indent-lt n))
+                    (yaml--parse-from-grammar 'b-as-line-feed)))))
+
+    ('c-primary-tag-handle
+     (yaml--frame "c-primary-tag-handle" (yaml--chr ?\!)))
+
+    ('ns-plain-safe-out
+     (yaml--frame "ns-plain-safe-out"
+       (yaml--parse-from-grammar 'ns-char)))
+
+    ('c-ns-shorthand-tag
+     (yaml--frame "c-ns-shorthand-tag"
+       (yaml--all (yaml--parse-from-grammar 'c-tag-handle)
+                  (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-tag-char))))))
+
+    ('nb-ns-single-in-line
+     (yaml--frame "nb-ns-single-in-line"
+       (yaml--rep2 0 nil (lambda () (yaml--all (yaml--rep2 0 nil (lambda () 
(yaml--parse-from-grammar 's-white)))
+                                               (yaml--parse-from-grammar 
'ns-single-char))))))
+
+    ('l-strip-empty
+     (let ((n (nth 0 args)))
+       (yaml--frame "l-strip-empty"
+         (yaml--all (yaml--rep2 0 nil (lambda () (yaml--all 
(yaml--parse-from-grammar 's-indent-le n)
+                                                            
(yaml--parse-from-grammar 'b-non-content))))
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'l-trail-comments n)))))))
+
+    ('c-indicator
+     (yaml--frame "c-indicator"
+       (yaml--any (yaml--chr ?\-)
+                  (yaml--chr ?\?)
+                  (yaml--chr ?\:)
+                  (yaml--chr ?\,)
+                  (yaml--chr ?\[)
+                  (yaml--chr ?\])
+                  (yaml--chr ?\{)
+                  (yaml--chr ?\})
+                  (yaml--chr ?\#)
+                  (yaml--chr ?\&)
+                  (yaml--chr ?\*)
+                  (yaml--chr ?\!)
+                  (yaml--chr ?\|)
+                  (yaml--chr ?\>)
+                  (yaml--chr ?\')
+                  (yaml--chr ?\")
+                  (yaml--chr ?\%)
+                  (yaml--chr ?\@)
+                  (yaml--chr ?\`))))
+
+    ('c-l+literal
+     (let ((n (nth 0 args)))
+       (yaml--frame "c-l+literal"
+         (progn
+           (yaml--all (yaml--chr ?\|)
+                      (yaml--parse-from-grammar 'c-b-block-header n 
(yaml--state-curr-t))
+                      (yaml--parse-from-grammar 'l-literal-content (max (+ n 
(yaml--state-curr-m)) 1) (yaml--state-curr-t)))))))
+
+    ('c-single-quoted
+     (let ((n (nth 0 args))
+           (c (nth 1 args)))
+       (yaml--frame "c-single-quoted"
+         (yaml--all (yaml--chr ?\')
+                    (yaml--parse-from-grammar 'nb-single-text n c)
+                    (yaml--chr ?\')))))
+
+    ('c-forbidden
+     (yaml--frame "c-forbidden"
+       (yaml--all (yaml--start-of-line)
+                  (yaml--any (yaml--parse-from-grammar 'c-directives-end)
+                             (yaml--parse-from-grammar 'c-document-end))
+                  (yaml--any (yaml--parse-from-grammar 'b-char) 
(yaml--parse-from-grammar 's-white) (yaml--end-of-stream)))))
+
+    ('c-ns-alias-node
+     (yaml--frame "c-ns-alias-node"
+       (yaml--all (yaml--chr ?\*)
+                  (yaml--parse-from-grammar 'ns-anchor-name))))
+
+    ('c-secondary-tag-handle
+     (yaml--frame "c-secondary-tag-handle"
+       (yaml--all (yaml--chr ?\!) (yaml--chr ?\!))))
+
+    ('ns-esc-next-line
+     (yaml--frame "ns-esc-next-line" (yaml--chr ?\n)))
+
+    ('l-nb-same-lines
+     (let ((n (nth 0 args)))
+       (yaml--frame "l-nb-same-lines"
+         (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-empty n "block-in")))
+                    (yaml--any (yaml--parse-from-grammar 'l-nb-folded-lines n)
+                               (yaml--parse-from-grammar 'l-nb-spaced-lines 
n))))))
+
+    ('c-alias
+     (yaml--frame "c-alias" (yaml--chr ?\*)))
+
+    ('ns-single-char
+     (yaml--frame "ns-single-char"
+       (yaml--but (lambda () (yaml--parse-from-grammar 'nb-single-char))
+                  (lambda () (yaml--parse-from-grammar 's-white)))))
+
+    ('c-l-block-map-implicit-value
+     (let ((n (nth 0 args)))
+       (yaml--frame "c-l-block-map-implicit-value"
+         (yaml--all (yaml--chr ?\:)
+                    (yaml--any (yaml--parse-from-grammar 's-l+block-node n 
"block-out")
+                               (yaml--all (yaml--parse-from-grammar 'e-node)
+                                          (yaml--parse-from-grammar 
's-l-comments)))))))
+
+    ('ns-uri-char
+     (yaml--frame "ns-uri-char"
+       (yaml--any (yaml--all (yaml--chr ?\%)
+                             (yaml--parse-from-grammar 'ns-hex-digit)
+                             (yaml--parse-from-grammar 'ns-hex-digit))
+                  (yaml--parse-from-grammar 'ns-word-char)
+                  (yaml--chr ?\#)
+                  (yaml--chr ?\;)
+                  (yaml--chr ?\/)
+                  (yaml--chr ?\?)
+                  (yaml--chr ?\:)
+                  (yaml--chr ?\@)
+                  (yaml--chr ?\&)
+                  (yaml--chr ?\=)
+                  (yaml--chr ?\+)
+                  (yaml--chr ?\$)
+                  (yaml--chr ?\,)
+                  (yaml--chr ?\_)
+                  (yaml--chr ?\.)
+                  (yaml--chr ?\!)
+                  (yaml--chr ?\~)
+                  (yaml--chr ?\*)
+                  (yaml--chr ?\')
+                  (yaml--chr ?\()
+                  (yaml--chr ?\))
+                  (yaml--chr ?\[)
+                  (yaml--chr ?\]))))
+
+    ('ns-esc-16-bit
+     (yaml--frame "ns-esc-16-bit"
+       (yaml--all (yaml--chr ?u)
+                  (yaml--rep 4 4 (lambda () (yaml--parse-from-grammar 
'ns-hex-digit))))))
+
+    ('l-nb-spaced-lines
+     (let ((n (nth 0 args)))
+       (yaml--frame "l-nb-spaced-lines"
+         (yaml--all (yaml--parse-from-grammar 's-nb-spaced-text n)
+                    (yaml--rep2 0 nil (lambda () (yaml--all 
(yaml--parse-from-grammar 'b-l-spaced n)
+                                                            
(yaml--parse-from-grammar 's-nb-spaced-text n))))))))
+
+    ('ns-plain
+     (let ((n (nth 0 args))
+           (c (nth 1 args)))
+       (yaml--frame "ns-plain"
+         (cond
+          ((equal c "block-key") (yaml--parse-from-grammar 'ns-plain-one-line 
c))
+          ((equal c "flow-in") (yaml--parse-from-grammar 'ns-plain-multi-line 
n c))
+          ((equal c "flow-key") (yaml--parse-from-grammar 'ns-plain-one-line 
c))
+          ((equal c "flow-out") (yaml--parse-from-grammar 'ns-plain-multi-line 
n c))))))
+
+    ('c-printable
+     (yaml--frame "c-printable"
+       (yaml--any (yaml--chr ?\x09)
+                  (yaml--chr ?\x0A)
+                  (yaml--chr ?\x0D)
+                  (yaml--chr-range ?\x20 ?\x7E)
+                  (yaml--chr ?\x85)
+                  (yaml--chr-range ?\xA0 ?\xD7FF)
+                  (yaml--chr-range ?\xE000 ?\xFFFD)
+                  (yaml--chr-range ?\x010000 ?\x10FFFF))))
+
+    ('c-mapping-value
+     (yaml--frame "c-mapping-value" (yaml--chr ?\:)))
+
+    ('l-nb-literal-text
+     (let ((n (nth 0 args)))
+       (yaml--frame "l-nb-literal-text"
+         (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-empty n "block-in")))
+                    (yaml--parse-from-grammar 's-indent n)
+                    (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'nb-char)))))))
+
+    ('ns-plain-char
+     (let ((c (nth 0 args)))
+       (yaml--frame "ns-plain-char"
+         (yaml--any (yaml--but (lambda () (yaml--parse-from-grammar 
'ns-plain-safe c))
+                               (lambda () (yaml--chr ?\:)) (lambda () 
(yaml--chr ?\#)))
+                    (yaml--all (yaml--chk "<=" (yaml--parse-from-grammar 
'ns-char))
+                               (yaml--chr ?\#))
+                    (yaml--all (yaml--chr ?\:)
+                               (yaml--chk "=" (yaml--parse-from-grammar 
'ns-plain-safe c)))))))
+
+    ('ns-anchor-char
+     (yaml--frame "ns-anchor-char"
+       (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
+                  (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))
+
+    ('s-l+block-scalar
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "s-l+block-scalar"
+         (yaml--all (yaml--parse-from-grammar 's-separate (+ n 1) c)
+                    (yaml--rep 0 1 (lambda ()
+                                     (yaml--all (yaml--parse-from-grammar 
'c-ns-properties (+ n 1) c)
+                                                (yaml--parse-from-grammar 
's-separate (+ n 1) c))))
+                    (yaml--any (yaml--parse-from-grammar 'c-l+literal n)
+                               (yaml--parse-from-grammar 'c-l+folded n))))))
+
+    ('ns-plain-safe-in
+     (yaml--frame "ns-plain-safe-in"
+       (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
+                  (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))
+
+    ('nb-single-text
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "nb-single-text"
+         (cond ((equal c "block-key") (yaml--parse-from-grammar 
'nb-single-one-line))
+               ((equal c "flow-in") (yaml--parse-from-grammar 
'nb-single-multi-line n))
+               ((equal c "flow-key") (yaml--parse-from-grammar 
'nb-single-one-line))
+               ((equal c "flow-out") (yaml--parse-from-grammar 
'nb-single-multi-line n))))))
+
+    ('s-indent-le
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-indent-le"
+         (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
's-space)))
+                    (<= (length (yaml--match)) n)))))
+
+    ('ns-esc-carriage-return
+     (yaml--frame "ns-esc-carriage-return" (yaml--chr ?\r)))
+
+    ('l-chomped-empty
+     (let ((n (nth 0 args))
+           (tt (nth 1 args)))
+       (yaml--frame "l-chomped-empty"
+         (cond ((equal tt "clip") (yaml--parse-from-grammar 'l-strip-empty n))
+               ((equal tt "keep") (yaml--parse-from-grammar 'l-keep-empty n))
+               ((equal tt "strip") (yaml--parse-from-grammar 'l-strip-empty 
n))))))
+
+    ('c-s-implicit-json-key
+     (let ((c (nth 0 args)))
+       (yaml--frame "c-s-implicit-json-key"
+         (yaml--all (yaml--max 1024)
+                    (yaml--parse-from-grammar 'c-flow-json-node nil c)
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate-in-line)))))))
+
+    ('b-as-space
+     (yaml--frame "b-as-space"
+       (yaml--parse-from-grammar 'b-break)))
+
+    ('ns-s-flow-seq-entries
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-s-flow-seq-entries"
+         (yaml--all (yaml--parse-from-grammar 'ns-flow-seq-entry n c)
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate n c)))
+                    (yaml--rep 0 1 (lambda () (yaml--all (yaml--chr ?\,)
+                                                         (yaml--rep 0 1 
(lambda () (yaml--parse-from-grammar 's-separate n c)))
+                                                         (yaml--rep 0 1 
(lambda () (yaml--parse-from-grammar 'ns-s-flow-seq-entries n c))))))))))
+
+    ('l-block-map-explicit-value
+     (let ((n (nth 0 args)))
+       (yaml--frame "l-block-map-explicit-value"
+         (yaml--all (yaml--parse-from-grammar 's-indent n)
+                    (yaml--chr ?\:)
+                    (yaml--parse-from-grammar 's-l+block-indented n 
"block-out")))))
+
+    ('c-ns-flow-map-json-key-entry
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "c-ns-flow-map-json-key-entry"
+         (yaml--all (yaml--parse-from-grammar 'c-flow-json-node n c)
+                    (yaml--any (yaml--all (yaml--rep 0 1 (lambda () 
(yaml--parse-from-grammar 's-separate n c)))
+                                          (yaml--parse-from-grammar 
'c-ns-flow-map-adjacent-value n c))
+                               (yaml--parse-from-grammar 'e-node))))))
+
+    ('c-sequence-entry
+     (yaml--frame "c-sequence-entry" (yaml--chr ?\-)))
+
+    ('l-bare-document
+     (yaml--frame "l-bare-document"
+       (yaml--all (yaml--exclude "c-forbidden")
+                  (yaml--parse-from-grammar 's-l+block-node -1 "block-in"))))
+
+    ;; TODO: don't use the symbol t as a variable.
+    ('b-chomped-last
+     (let ((tt (nth 0 args)))
+       (yaml--frame "b-chomped-last"
+         (cond ((equal tt "clip")
+                ;; TODO: Fix this
+                (yaml--any (yaml--parse-from-grammar 'b-as-line-feed)
+                           (yaml--end-of-stream)))
+               ((equal tt "keep")
+                (yaml--any (yaml--parse-from-grammar 'b-as-line-feed)
+                           (yaml--end-of-stream)))
+               ((equal tt "strip")
+                (yaml--any (yaml--parse-from-grammar 'b-non-content)
+                           (yaml--end-of-stream)))))))
+
+    ('l-trail-comments
+     (let ((n (nth 0 args)))
+       (yaml--frame "l-trail-comments"
+         (yaml--all (yaml--parse-from-grammar 's-indent-lt n)
+                    (yaml--parse-from-grammar 'c-nb-comment-text)
+                    (yaml--parse-from-grammar 'b-comment)
+                    (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-comment)))))))
+
+    ('ns-flow-map-yaml-key-entry
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-flow-map-yaml-key-entry"
+         (yaml--all (yaml--parse-from-grammar 'ns-flow-yaml-node n c)
+                    (yaml--any (yaml--all (yaml--rep 0 1 (lambda () 
(yaml--parse-from-grammar 's-separate n c)))
+                                          (yaml--parse-from-grammar 
'c-ns-flow-map-separate-value n c))
+                               (yaml--parse-from-grammar 'e-node))))))
+
+    ('s-indent
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-indent"
+         (yaml--rep n n (lambda () (yaml--parse-from-grammar 's-space))))))
+
+    ('ns-esc-line-separator
+     (yaml--frame "ns-esc-line-separator" (yaml--chr ?\L)))
+
+    ('ns-flow-yaml-node
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-flow-yaml-node"
+         (yaml--any (yaml--parse-from-grammar 'c-ns-alias-node)
+                    (yaml--parse-from-grammar 'ns-flow-yaml-content n c)
+                    (yaml--all (yaml--parse-from-grammar 'c-ns-properties n c)
+                               (yaml--any (yaml--all (yaml--parse-from-grammar 
's-separate n c)
+                                                     (yaml--parse-from-grammar 
'ns-flow-yaml-content n c))
+                                          (yaml--parse-from-grammar 
'e-scalar)))))))
+
+    ('ns-yaml-version
+     (yaml--frame "ns-yaml-version"
+       (yaml--all (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-dec-digit)))
+                  (yaml--chr ?\.)
+                  (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-dec-digit))))))
+
+    ('c-folded
+     (yaml--frame "c-folded" (yaml--chr ?\>)))
+
+    ('c-directives-end
+     (yaml--frame "c-directives-end"
+       (yaml--all (yaml--chr ?\-) (yaml--chr ?\-) (yaml--chr ?\-))))
+
+    ('s-double-break
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-double-break"
+         (yaml--any (yaml--parse-from-grammar 's-double-escaped n)
+                    (yaml--parse-from-grammar 's-flow-folded n)))))
+
+    ('s-nb-spaced-text
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-nb-spaced-text"
+         (yaml--all (yaml--parse-from-grammar 's-indent n)
+                    (yaml--parse-from-grammar 's-white)
+                    (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-char)))))))
+
+    ('l-folded-content
+     (let ((n (nth 0 args))
+           (tt (nth 1 args)))
+       (yaml--frame "l-folded-content"
+         (yaml--all (yaml--rep 0 1 (lambda ()
+                                     (yaml--all (yaml--parse-from-grammar 
'l-nb-diff-lines n)
+                                                (yaml--parse-from-grammar 
'b-chomped-last tt))))
+                    (yaml--parse-from-grammar 'l-chomped-empty n tt))))) ;; 
TODO: don't use yaml--state-t here
+
+    ('nb-ns-plain-in-line
+     (let ((c (nth 0 args)))
+       (yaml--frame "nb-ns-plain-in-line"
+         (yaml--rep2 0 nil
+                     (lambda () (yaml--all
+                                 (yaml--rep2 0 nil (lambda () 
(yaml--parse-from-grammar 's-white)))
+                                 (yaml--parse-from-grammar 'ns-plain-char 
c)))))))
+
+    ('nb-single-multi-line
+     (let ((n (nth 0 args)))
+       (yaml--frame "nb-single-multi-line"
+         (yaml--all (yaml--parse-from-grammar 'nb-ns-single-in-line)
+                    (yaml--any (yaml--parse-from-grammar 's-single-next-line n)
+                               (yaml--rep2 0 nil (lambda () 
(yaml--parse-from-grammar 's-white))))))))
+
+    ('l-document-suffix
+     (yaml--frame "l-document-suffix"
+       (yaml--all (yaml--parse-from-grammar 'c-document-end)
+                  (yaml--parse-from-grammar 's-l-comments))))
+
+    ('c-sequence-start
+     (yaml--frame "c-sequence-start"
+       (yaml--chr ?\[)))
+
+    ('ns-l-block-map-entry
+     (yaml--frame "ns-l-block-map-entry"
+       (yaml--any (yaml--parse-from-grammar 'c-l-block-map-explicit-entry (nth 
0 args))
+                  (yaml--parse-from-grammar 'ns-l-block-map-implicit-entry 
(nth 0 args)))))
+
+    ('ns-l-compact-mapping
+     (yaml--frame "ns-l-compact-mapping"
+       (yaml--all (yaml--parse-from-grammar 'ns-l-block-map-entry (nth 0 args))
+                  (yaml--rep2 0 nil
+                              (lambda () (yaml--all (yaml--parse-from-grammar 
's-indent (nth 0 args))
+                                                    (yaml--parse-from-grammar 
'ns-l-block-map-entry (nth 0 args))))))))
+
+    ('ns-esc-space
+     (yaml--frame "ns-esc-space" (yaml--chr ?\x20)))
+    ('ns-esc-vertical-tab
+     (yaml--frame "ns-esc-vertical-tab" (yaml--chr ?\v)))
+
+    ('ns-s-implicit-yaml-key
+     (let ((c (nth 0 args)))
+       (yaml--frame "ns-s-implicit-yaml-key"
+         (yaml--all (yaml--max 1024)
+                    (yaml--parse-from-grammar 'ns-flow-yaml-node nil c)
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate-in-line)))))))
+
+    ('b-l-folded
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "b-l-folded"
+         (yaml--any (yaml--parse-from-grammar 'b-l-trimmed n c)
+                    (yaml--parse-from-grammar 'b-as-space)))))
+
+    ('s-l+block-collection
+     (yaml--frame "s-l+block-collection"
+       (yaml--all
+        (yaml--rep 0 1
+                   (lambda () (yaml--all
+                               (yaml--parse-from-grammar 's-separate (+ (nth 0 
args) 1) (nth 1 args))
+                               (yaml--parse-from-grammar 'c-ns-properties (+ 
(nth 0 args) 1) (nth 1 args)))))
+        (yaml--parse-from-grammar 's-l-comments)
+        (yaml--any
+         (yaml--parse-from-grammar 'l+block-sequence (yaml--parse-from-grammar 
'seq-spaces (nth 0 args) (nth 1 args)))
+         (yaml--parse-from-grammar 'l+block-mapping (nth 0 args))))))
+
+    ('c-quoted-quote
+     (yaml--frame "c-quoted-quote" (yaml--all (yaml--chr ?\') (yaml--chr 
?\'))))
+
+    ('l+block-sequence
+     (yaml--frame "l+block-sequence"
+       ;; NOTE: deviated from the spec example here by making new-m at least 
1.  The wording and examples lead me to believe this is how it's done.
+       ;; ie /* For some fixed auto-detected m > 0 */
+       (let ((new-m (max (yaml--auto-detect-indent (nth 0 args)) 1)))
+         (yaml--all (yaml--set m new-m)
+                    (yaml--rep 1 nil
+                               (lambda ()
+                                 (yaml--all
+                                  (yaml--parse-from-grammar 's-indent (+ (nth 
0 args) new-m))
+                                  (yaml--parse-from-grammar 
'c-l-block-seq-entry (+ (nth 0 args) new-m)))))))))
+
+    ('c-double-quote
+     (yaml--frame "c-double-quote"
+       (yaml--chr ?\")))
+
+    ('ns-esc-backspace
+     (yaml--frame "ns-esc-backspace"
+       (yaml--chr ?\b)))
+
+    ('c-flow-json-content
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "c-flow-json-content"
+         (yaml--any (yaml--parse-from-grammar 'c-flow-sequence n c)
+                    (yaml--parse-from-grammar 'c-flow-mapping n c)
+                    (yaml--parse-from-grammar 'c-single-quoted n c)
+                    (yaml--parse-from-grammar 'c-double-quoted n c)))))
+
+    ('c-mapping-end
+     (yaml--frame "c-mapping-end" (yaml--chr ?\})))
+
+    ('nb-single-char
+     (yaml--frame "nb-single-char"
+       (yaml--any (yaml--parse-from-grammar 'c-quoted-quote)
+                  (yaml--but (lambda () (yaml--parse-from-grammar 'nb-json))
+                             (lambda () (yaml--chr ?\'))))))
+
+    ('ns-flow-node
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-flow-node"
+         (yaml--any (yaml--parse-from-grammar 'c-ns-alias-node)
+                    (yaml--parse-from-grammar 'ns-flow-content n c)
+                    (yaml--all (yaml--parse-from-grammar 'c-ns-properties n c)
+                               (yaml--any (yaml--all (yaml--parse-from-grammar 
's-separate n c)
+                                                     (yaml--parse-from-grammar 
'ns-flow-content n c))
+                                          (yaml--parse-from-grammar 
'e-scalar)))))))
+
+    ('c-non-specific-tag
+     (yaml--frame "c-non-specific-tag" (yaml--chr ?\!)))
+
+    ('l-directive-document
+     (yaml--frame "l-directive-document"
+       (yaml--all (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'l-directive)))
+                  (yaml--parse-from-grammar 'l-explicit-document))))
+
+    ('c-l-block-map-explicit-entry
+     (let ((n (nth 0 args)))
+       (yaml--frame "c-l-block-map-explicit-entry"
+         (yaml--all (yaml--parse-from-grammar 'c-l-block-map-explicit-key n)
+                    (yaml--any (yaml--parse-from-grammar 
'l-block-map-explicit-value n)
+                               (yaml--parse-from-grammar 'e-node))))))
+
+    ('e-node
+     (yaml--frame "e-node"
+       (yaml--parse-from-grammar 'e-scalar)))
+
+    ('seq-spaces
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "seq-spaces"
+         (cond ((equal c "block-in") n)
+               ((equal c "block-out") (yaml--sub n 1))))))
+
+    ('l-yaml-stream
+     (yaml--frame "l-yaml-stream"
+       (yaml--all
+        (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-document-prefix)))
+        (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 'l-any-document)))
         (yaml--rep2 0 nil
-                    (lambda () (yaml--all
-                                (yaml--rep2 0 nil (lambda () 
(yaml--parse-from-grammar 's-white)))
-                                (yaml--parse-from-grammar 'ns-plain-char 
c)))))))
-
-   ((eq state 'nb-single-multi-line)
-    (let ((n (nth 0 args)))
-      (yaml--frame "nb-single-multi-line"
-        (yaml--all (yaml--parse-from-grammar 'nb-ns-single-in-line)
-                   (yaml--any (yaml--parse-from-grammar 's-single-next-line n)
-                              (yaml--rep2 0 nil (lambda () 
(yaml--parse-from-grammar 's-white))))))))
-
-   ((eq state 'l-document-suffix)
-    (yaml--frame "l-document-suffix"
-      (yaml--all (yaml--parse-from-grammar 'c-document-end)
-                 (yaml--parse-from-grammar 's-l-comments))))
-
-   ((eq state 'c-sequence-start)
-    (yaml--frame "c-sequence-start"
-      (yaml--chr ?\[)))
-
-   ((eq state 'ns-l-block-map-entry)
-    (yaml--frame "ns-l-block-map-entry"
-                 (yaml--any (yaml--parse-from-grammar 
'c-l-block-map-explicit-entry (nth 0 args))
-                            (yaml--parse-from-grammar 
'ns-l-block-map-implicit-entry (nth 0 args)))))
-
-   ((eq state 'ns-l-compact-mapping)
-    (yaml--frame "ns-l-compact-mapping"
-                 (yaml--all (yaml--parse-from-grammar 'ns-l-block-map-entry 
(nth 0 args))
-                            (yaml--rep2 0 nil
-                                        (lambda () (yaml--all 
(yaml--parse-from-grammar 's-indent (nth 0 args))
-                                                              
(yaml--parse-from-grammar 'ns-l-block-map-entry (nth 0 args))))))))
-
-   ((eq state 'ns-esc-space)
-    (yaml--frame "ns-esc-space" (yaml--chr ?\x20)))
-   ((eq state 'ns-esc-vertical-tab)
-    (yaml--frame "ns-esc-vertical-tab" (yaml--chr ?\v)))
-
-   ((eq state 'ns-s-implicit-yaml-key)
-    (let ((c (nth 0 args)))
-      (yaml--frame "ns-s-implicit-yaml-key"
-        (yaml--all (yaml--max 1024)
-                   (yaml--parse-from-grammar 'ns-flow-yaml-node nil c)
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate-in-line)))))))
-
-   ((eq state 'b-l-folded)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "b-l-folded"
-        (yaml--any (yaml--parse-from-grammar 'b-l-trimmed n c)
-                   (yaml--parse-from-grammar 'b-as-space)))))
-
-   ((eq state 's-l+block-collection)
-    (yaml--frame "s-l+block-collection"
-                 (yaml--all
-                  (yaml--rep 0 1
-                             (lambda () (yaml--all
-                                         (yaml--parse-from-grammar 's-separate 
(+ (nth 0 args) 1) (nth 1 args))
-                                         (yaml--parse-from-grammar 
'c-ns-properties (+ (nth 0 args) 1) (nth 1 args)))))
-                  (yaml--parse-from-grammar 's-l-comments)
-                  (yaml--any
-                   (yaml--parse-from-grammar 'l+block-sequence 
(yaml--parse-from-grammar 'seq-spaces (nth 0 args) (nth 1 args)))
-                   (yaml--parse-from-grammar 'l+block-mapping (nth 0 args))))))
-
-   ((eq state 'c-quoted-quote)
-    (yaml--frame "c-quoted-quote" (yaml--all (yaml--chr ?\') (yaml--chr ?\'))))
-
-   ((eq state 'l+block-sequence)
-    (yaml--frame "l+block-sequence"
-      ;; NOTE: deviated from the spec example here by making new-m at least 1. 
 The wording and examples lead me to believe this is how it's done.
-      ;; ie /* For some fixed auto-detected m > 0 */
-      (let ((new-m (max (yaml--auto-detect-indent (nth 0 args)) 1)))
-        (yaml--all (yaml--set m new-m)
-                   (yaml--rep 1 nil
-                              (lambda ()
-                                (yaml--all
-                                 (yaml--parse-from-grammar 's-indent (+ (nth 0 
args) new-m))
-                                 (yaml--parse-from-grammar 
'c-l-block-seq-entry (+ (nth 0 args) new-m)))))))))
-
-   ((eq state 'c-double-quote)
-    (yaml--frame "c-double-quote"
-      (yaml--chr ?\")))
-
-   ((eq state 'ns-esc-backspace)
-    (yaml--frame "ns-esc-backspace"
-      (yaml--chr ?\b)))
-
-   ((eq state 'c-flow-json-content)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "c-flow-json-content"
-        (yaml--any (yaml--parse-from-grammar 'c-flow-sequence n c)
-                   (yaml--parse-from-grammar 'c-flow-mapping n c)
-                   (yaml--parse-from-grammar 'c-single-quoted n c)
-                   (yaml--parse-from-grammar 'c-double-quoted n c)))))
-
-   ((eq state 'c-mapping-end)
-    (yaml--frame "c-mapping-end" (yaml--chr ?\})))
-
-   ((eq state 'nb-single-char)
-    (yaml--frame "nb-single-char"
-      (yaml--any (yaml--parse-from-grammar 'c-quoted-quote)
-                 (yaml--but (lambda () (yaml--parse-from-grammar 'nb-json))
-                            (lambda () (yaml--chr ?\'))))))
-
-   ((eq state 'ns-flow-node)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-flow-node"
-        (yaml--any (yaml--parse-from-grammar 'c-ns-alias-node)
-                   (yaml--parse-from-grammar 'ns-flow-content n c)
-                   (yaml--all (yaml--parse-from-grammar 'c-ns-properties n c)
-                              (yaml--any (yaml--all (yaml--parse-from-grammar 
's-separate n c)
-                                                    (yaml--parse-from-grammar 
'ns-flow-content n c))
-                                         (yaml--parse-from-grammar 
'e-scalar)))))))
-
-   ((eq state 'c-non-specific-tag)
-    (yaml--frame "c-non-specific-tag" (yaml--chr ?\!)))
-
-   ((eq state 'l-directive-document)
-    (yaml--frame "l-directive-document"
-      (yaml--all (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'l-directive)))
-                 (yaml--parse-from-grammar 'l-explicit-document))))
-
-   ((eq state 'c-l-block-map-explicit-entry)
-    (let ((n (nth 0 args)))
-      (yaml--frame "c-l-block-map-explicit-entry"
-        (yaml--all (yaml--parse-from-grammar 'c-l-block-map-explicit-key n)
-                   (yaml--any (yaml--parse-from-grammar 
'l-block-map-explicit-value n)
-                              (yaml--parse-from-grammar 'e-node))))))
-
-   ((eq state 'e-node)
-    (yaml--frame "e-node"
-      (yaml--parse-from-grammar 'e-scalar)))
-
-   ((eq state 'seq-spaces)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "seq-spaces"
-        (cond ((equal c "block-in") n)
-              ((equal c "block-out") (yaml--sub n 1))))))
-
-   ((eq state 'l-yaml-stream)
-    (yaml--frame "l-yaml-stream"
-      (yaml--all
-       (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-document-prefix)))
-       (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 'l-any-document)))
-       (yaml--rep2 0 nil
-                   (lambda ()
-                     (yaml--any (yaml--all
-                                 (yaml--rep 1 nil
-                                            (lambda () 
(yaml--parse-from-grammar 'l-document-suffix)))
-                                 (yaml--rep2 0 nil
-                                             (lambda () 
(yaml--parse-from-grammar 'l-document-prefix)))
-                                 (yaml--rep 0 1
-                                            (lambda () 
(yaml--parse-from-grammar 'l-any-document))))
-                                (yaml--all
-                                 (yaml--rep2 0 nil
-                                             (lambda () 
(yaml--parse-from-grammar 'l-document-prefix)))
-                                 (yaml--rep 0 1
-                                            (lambda () 
(yaml--parse-from-grammar 'l-explicit-document))))))))))
-
-   ((eq state 'nb-double-one-line)
-    (yaml--frame "nb-double-one-line"
-      (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-double-char)))))
-
-   ((eq state 's-l-comments)
-    (yaml--frame "s-l-comments"
-      (yaml--all (yaml--any (yaml--parse-from-grammar 's-b-comment)
-                            (yaml--start-of-line))
-                 (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-comment))))))
-
-   ((eq state 'nb-char)
-    (yaml--frame "nb-char"
-      (yaml--but (lambda () (yaml--parse-from-grammar 'c-printable))
-                 (lambda () (yaml--parse-from-grammar 'b-char))
-                 (lambda () (yaml--parse-from-grammar 'c-byte-order-mark)))))
-
-   ((eq state 'ns-plain-first)
-    (let ((c (nth 0 args)))
-      (yaml--frame "ns-plain-first"
-        (yaml--any (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
-                              (lambda () (yaml--parse-from-grammar 
'c-indicator)))
-                   (yaml--all (yaml--any (yaml--chr ?\?)
-                                         (yaml--chr ?\:)
-                                         (yaml--chr ?\-))
-                              (yaml--chk "=" (yaml--parse-from-grammar 
'ns-plain-safe c)))))))
-
-   ((eq state 'c-ns-esc-char)
-    (yaml--frame "c-ns-esc-char"
-      (yaml--all (yaml--chr ?\\)
-                 (yaml--any (yaml--parse-from-grammar 'ns-esc-null)
-                            (yaml--parse-from-grammar 'ns-esc-bell)
-                            (yaml--parse-from-grammar 'ns-esc-backspace)
-                            (yaml--parse-from-grammar 'ns-esc-horizontal-tab)
-                            (yaml--parse-from-grammar 'ns-esc-line-feed)
-                            (yaml--parse-from-grammar 'ns-esc-vertical-tab)
-                            (yaml--parse-from-grammar 'ns-esc-form-feed)
-                            (yaml--parse-from-grammar 'ns-esc-carriage-return)
-                            (yaml--parse-from-grammar 'ns-esc-escape)
-                            (yaml--parse-from-grammar 'ns-esc-space)
-                            (yaml--parse-from-grammar 'ns-esc-double-quote)
-                            (yaml--parse-from-grammar 'ns-esc-slash)
-                            (yaml--parse-from-grammar 'ns-esc-backslash)
-                            (yaml--parse-from-grammar 'ns-esc-next-line)
-                            (yaml--parse-from-grammar 
'ns-esc-non-breaking-space)
-                            (yaml--parse-from-grammar 'ns-esc-line-separator)
-                            (yaml--parse-from-grammar 
'ns-esc-paragraph-separator)
-                            (yaml--parse-from-grammar 'ns-esc-8-bit)
-                            (yaml--parse-from-grammar 'ns-esc-16-bit)
-                            (yaml--parse-from-grammar 'ns-esc-32-bit)))))
-
-   ((eq state 'ns-flow-map-entry)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-flow-map-entry"
-        (yaml--any (yaml--all (yaml--chr ?\?)
-                              (yaml--parse-from-grammar 's-separate n c)
-                              (yaml--parse-from-grammar 
'ns-flow-map-explicit-entry n c))
-                   (yaml--parse-from-grammar 'ns-flow-map-implicit-entry n 
c)))))
-
-   ((eq state 'l-explicit-document)
-    (yaml--frame "l-explicit-document"
-      (yaml--all (yaml--parse-from-grammar 'c-directives-end)
-                 (yaml--any (yaml--parse-from-grammar 'l-bare-document)
-                            (yaml--all (yaml--parse-from-grammar 'e-node)
-                                       (yaml--parse-from-grammar 
's-l-comments))))))
-
-   ((eq state 's-white)
-    (yaml--frame "s-white"
-      (yaml--any (yaml--parse-from-grammar 's-space)
-                 (yaml--parse-from-grammar 's-tab))))
-
-   ((eq state 'l-keep-empty)
-    (let ((n (nth 0 args)))
-      (yaml--frame "l-keep-empty"
-        (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-empty n "block-in")))
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'l-trail-comments n)))))))
-
-   ((eq state 'ns-tag-prefix)
-    (yaml--frame "ns-tag-prefix"
-      (yaml--any (yaml--parse-from-grammar 'c-ns-local-tag-prefix)
-                 (yaml--parse-from-grammar 'ns-global-tag-prefix))))
-
-   ((eq state 'c-l+folded)
-    (let ((n (nth 0 args)))
-      (yaml--frame "c-l+folded"
-        (yaml--all (yaml--chr ?\>)
-                   (yaml--parse-from-grammar 'c-b-block-header 
(yaml--state-curr-m) (yaml--state-curr-t))
-                   (yaml--parse-from-grammar 'l-folded-content
-                                             (max (+ n (yaml--state-curr-m)) 1)
-                                             (yaml--state-curr-t))))))
-
-   ((eq state 'ns-directive-name)
-    (yaml--frame "ns-directive-name"
-      (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char)))))
-
-   ((eq state 'b-char)
-    (yaml--frame "b-char"
-      (yaml--any (yaml--parse-from-grammar 'b-line-feed)
-                 (yaml--parse-from-grammar 'b-carriage-return))))
-
-   ((eq state 'ns-plain-multi-line)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-plain-multi-line"
-        (yaml--all (yaml--parse-from-grammar 'ns-plain-one-line c)
-                   (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
's-ns-plain-next-line n c)))))))
-
-   ((eq state 'ns-char)
-    (yaml--frame "ns-char"
-      (yaml--but (lambda () (yaml--parse-from-grammar 'nb-char))
-                 (lambda () (yaml--parse-from-grammar 's-white)))))
-
-   ((eq state 's-space)
-    (yaml--frame "s-space" (yaml--chr ?\x20)))
-
-   ((eq state 'c-l-block-seq-entry)
-    (yaml--frame "c-l-block-seq-entry"
-                 (yaml--all (yaml--chr ?\-)
-                            (yaml--chk "!" (yaml--parse-from-grammar 'ns-char))
-                            (yaml--parse-from-grammar 's-l+block-indented (nth 
0 args) "block-in"))))
-
-   ((eq state 'c-ns-properties)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "c-ns-properties"
-        (yaml--any (yaml--all (yaml--parse-from-grammar 'c-ns-tag-property)
-                              (yaml--rep 0 1 (lambda () (yaml--all 
(yaml--parse-from-grammar 's-separate n c) (yaml--parse-from-grammar 
'c-ns-anchor-property)))))
-                   (yaml--all (yaml--parse-from-grammar 'c-ns-anchor-property)
-                              (yaml--rep 0 1 (lambda () (yaml--all
-                                                         
(yaml--parse-from-grammar 's-separate n c)
-                                                         
(yaml--parse-from-grammar 'c-ns-tag-property)))))))))
-
-   ((eq state 'ns-directive-parameter)
-    (yaml--frame "ns-directive-parameter"
-      (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char)))))
-
-   ((eq state 'c-chomping-indicator)
-    (yaml--frame "c-chomping-indicator"
-      (yaml--any (when (yaml--chr ?\-) (yaml--set t "strip") t)
-                 (when (yaml--chr ?\+) (yaml--set t "keep") t)
-                 (when (yaml--empty) (yaml--set t "clip") t))))
-
-   ((eq state 'ns-global-tag-prefix)
-    (yaml--frame "ns-global-tag-prefix"
-      (yaml--all (yaml--parse-from-grammar 'ns-tag-char)
-                 (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'ns-uri-char))))))
-
-   ((eq state 'c-ns-flow-pair-json-key-entry)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "c-ns-flow-pair-json-key-entry"
-        (yaml--all (yaml--parse-from-grammar 'c-s-implicit-json-key "flow-key")
-                   (yaml--parse-from-grammar 'c-ns-flow-map-adjacent-value n 
c)))))
-
-   ((eq state 'l-literal-content)
-    (let ((n (nth 0 args))
-          (tt (nth 1 args)))
-      (yaml--frame "l-literal-content"
-        (yaml--all (yaml--rep 0 1
-                              (lambda () (yaml--all (yaml--parse-from-grammar 
'l-nb-literal-text n)
-                                                    (yaml--rep2 0 nil (lambda 
() (yaml--parse-from-grammar 'b-nb-literal-next n)))
-                                                    (yaml--parse-from-grammar 
'b-chomped-last tt))))
-                   (yaml--parse-from-grammar 'l-chomped-empty n tt)))))
-
-   ((eq state 'c-document-end)
-    (yaml--frame "c-document-end"
-      (yaml--all (yaml--chr ?\.)
-                 (yaml--chr ?\.)
-                 (yaml--chr ?\.))))
-
-   ((eq state 'nb-double-text)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "nb-double-text"
-        (cond ((equal c "block-key") (yaml--parse-from-grammar 
'nb-double-one-line))
-              ((equal c "flow-in") (yaml--parse-from-grammar 
'nb-double-multi-line n))
-              ((equal c "flow-key") (yaml--parse-from-grammar 
'nb-double-one-line))
-              ((equal c "flow-out") (yaml--parse-from-grammar 
'nb-double-multi-line n))))))
-
-   ((eq state 's-b-comment)
-    (yaml--frame "s-b-comment"
-      (yaml--all (yaml--rep 0 1 (lambda () (yaml--all 
(yaml--parse-from-grammar 's-separate-in-line)
-                                                      (yaml--rep 0 1 (lambda 
() (yaml--parse-from-grammar 'c-nb-comment-text))))))
-                 (yaml--parse-from-grammar 'b-comment))))
-
-   ((eq state 's-block-line-prefix)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-block-line-prefix"
-        (yaml--parse-from-grammar 's-indent n))))
-
-   ((eq state 'c-tag-handle)
-    (yaml--frame "c-tag-handle"
-      (yaml--any (yaml--parse-from-grammar 'c-named-tag-handle)
-                 (yaml--parse-from-grammar 'c-secondary-tag-handle)
-                 (yaml--parse-from-grammar 'c-primary-tag-handle))))
-
-   ((eq state 'ns-plain-one-line)
-    (let ((c (nth 0 args)))
-      (yaml--frame "ns-plain-one-line"
-        (yaml--all (yaml--parse-from-grammar 'ns-plain-first c)
-                   (yaml--parse-from-grammar 'nb-ns-plain-in-line c)))))
-
-   ((eq state 'nb-json)
-    (yaml--frame "nb-json"
-      (yaml--any (yaml--chr ?\x09)
-                 (yaml--chr-range ?\x20 ?\x10FFFF))))
-
-   ((eq state 's-ns-plain-next-line)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "s-ns-plain-next-line"
-        (yaml--all (yaml--parse-from-grammar 's-flow-folded n)
-                   (yaml--parse-from-grammar 'ns-plain-char c)
-                   (yaml--parse-from-grammar 'nb-ns-plain-in-line c)))))
-
-   ((eq state 'c-reserved)
-    (yaml--frame "c-reserved"
-      (yaml--any (yaml--chr ?\@) (yaml--chr ?\`))))
-
-   ((eq state 'b-l-trimmed)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "b-l-trimmed"
-        (yaml--all (yaml--parse-from-grammar 'b-non-content)
-                   (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'l-empty n c)))))))
-
-   ((eq state 'l-document-prefix)
-    (yaml--frame "l-document-prefix"
-      (yaml--all (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'c-byte-order-mark)))
-                 (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-comment))))))
-
-   ((eq state 'c-byte-order-mark)
-    (yaml--frame "c-byte-order-mark" (yaml--chr ?\xFEFF)))
-
-   ((eq state 'c-anchor)
-    (yaml--frame "c-anchor" (yaml--chr ?\&)))
-
-   ((eq state 's-double-escaped)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-double-escaped"
-        (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
's-white)))
-                   (yaml--chr ?\\)
-                   (yaml--parse-from-grammar 'b-non-content)
-                   (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-empty n "flow-in")))
-                   (yaml--parse-from-grammar 's-flow-line-prefix n)))))
-
-   ((eq state 'ns-esc-32-bit)
-    (yaml--frame "ns-esc-32-bit"
-      (yaml--all (yaml--chr ?U)
-                 (yaml--rep 8 8 (lambda () (yaml--parse-from-grammar 
'ns-hex-digit))))))
-
-
-   ((eq state 'b-non-content)
-    (yaml--frame "b-non-content" (yaml--parse-from-grammar 'b-break)))
-
-   ((eq state 'ns-tag-char)
-    (yaml--frame "ns-tag-char"
-      (yaml--but (lambda () (yaml--parse-from-grammar 'ns-uri-char))
-                 (lambda () (yaml--chr ?\!))
-                 (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))
-
-   ((eq state 'b-carriage-return)
-    (yaml--frame "b-carriage-return" (yaml--chr ?\x0D)))
-
-   ((eq state 's-double-next-line)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-double-next-line"
-        (yaml--all (yaml--parse-from-grammar 's-double-break n)
-                   (yaml--rep 0 1
-                              (lambda ()
-                                (yaml--all (yaml--parse-from-grammar 
'ns-double-char)
-                                           (yaml--parse-from-grammar 
'nb-ns-double-in-line)
-                                           (yaml--any 
(yaml--parse-from-grammar 's-double-next-line n)
-                                                      (yaml--rep2 0 nil 
(lambda () (yaml--parse-from-grammar 's-white)))))))))))
-
-   ((eq state 'ns-esc-non-breaking-space)
-    (yaml--frame "ns-esc-non-breaking-space" (yaml--chr ?\_)))
-
-   ((eq state 'l-nb-diff-lines)
-    (let ((n (nth 0 args)))
-      (yaml--frame "l-nb-diff-lines"
-        (yaml--all (yaml--parse-from-grammar 'l-nb-same-lines n)
-                   (yaml--rep2 0 nil (lambda ()
-                                       (yaml--all (yaml--parse-from-grammar 
'b-as-line-feed)
-                                                  (yaml--parse-from-grammar 
'l-nb-same-lines n))))))))
-
-   ((eq state 's-flow-folded)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-flow-folded"
-        (yaml--all (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate-in-line)))
-                   (yaml--parse-from-grammar 'b-l-folded n "flow-in")
-                   (yaml--parse-from-grammar 's-flow-line-prefix n)))))
-
-   ((eq state 'ns-flow-map-explicit-entry)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-flow-map-explicit-entry"
-        (yaml--any (yaml--parse-from-grammar 'ns-flow-map-implicit-entry n c)
-                   (yaml--all (yaml--parse-from-grammar 'e-node) 
(yaml--parse-from-grammar 'e-node))))))
-
-   ((eq state 'ns-l-block-map-implicit-entry)
-    (yaml--frame "ns-l-block-map-implicit-entry"
-                 (yaml--all (yaml--any (yaml--parse-from-grammar 
'ns-s-block-map-implicit-key)
-                                       (yaml--parse-from-grammar 'e-node))
-                            (yaml--parse-from-grammar 
'c-l-block-map-implicit-value (nth 0 args)))))
-
-   ((eq state 'l-nb-folded-lines)
-    (let ((n (nth 0 args)))
-      (yaml--frame "l-nb-folded-lines"
-        (yaml--all (yaml--parse-from-grammar 's-nb-folded-text n)
-                   (yaml--rep2 0 nil (lambda () (yaml--all 
(yaml--parse-from-grammar 'b-l-folded n "block-in")
-                                                           
(yaml--parse-from-grammar 's-nb-folded-text n))))))))
-
-   ((eq state 'c-l-block-map-explicit-key)
-    (let ((n (nth 0 args)))
-      (yaml--frame "c-l-block-map-explicit-key"
-        (yaml--all (yaml--chr ?\?)
-                   (yaml--parse-from-grammar 's-l+block-indented n 
"block-out")))))
-
-   ((eq state 's-separate)
-    (let ((n (nth 0 args))
-          (c (nth 1 args)))
-      (yaml--frame "s-separate"
-        (cond ((equal c "block-in") (yaml--parse-from-grammar 
's-separate-lines n))
-              ((equal c "block-key") (yaml--parse-from-grammar 
's-separate-in-line))
-              ((equal c "block-out") (yaml--parse-from-grammar 
's-separate-lines n))
-              ((equal c "flow-in") (yaml--parse-from-grammar 's-separate-lines 
n))
-              ((equal c "flow-key") (yaml--parse-from-grammar 
's-separate-in-line))
-              ((equal c "flow-out") (yaml--parse-from-grammar 
's-separate-lines n))))))
-
-   ((eq state 'ns-flow-pair-entry)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-flow-pair-entry"
-        (yaml--any (yaml--parse-from-grammar 'ns-flow-pair-yaml-key-entry n c)
-                   (yaml--parse-from-grammar 'c-ns-flow-map-empty-key-entry n 
c)
-                   (yaml--parse-from-grammar 'c-ns-flow-pair-json-key-entry n 
c)))))
-
-   ((eq state 'c-flow-indicator)
-    (yaml--frame "c-flow-indicator"
-      (yaml--any (yaml--chr ?\,)
-                 (yaml--chr ?\[)
-                 (yaml--chr ?\])
-                 (yaml--chr ?\{)
-                 (yaml--chr ?\}))))
-
-   ((eq state 'ns-flow-pair-yaml-key-entry)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-flow-pair-yaml-key-entry"
-        (yaml--all (yaml--parse-from-grammar 'ns-s-implicit-yaml-key 
"flow-key")
-                   (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n 
c)))))
-
-   ((eq state 'e-scalar)
-    (yaml--frame "e-scalar" (yaml--empty)))
-
-   ((eq state 's-indent-lt)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-indent-lt"
-        (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
's-space)))
-                   (< (length (yaml--match)) n)))))
-   ((eq state 'nb-single-one-line)
-    (yaml--frame "nb-single-one-line"
-      (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-single-char)))))
-
-   ((eq state 'c-collect-entry)
-    (yaml--frame "c-collect-entry" (yaml--chr ?\,)))
-
-   ((eq state 'ns-l-compact-sequence)
-    (let ((n (nth 0 args)))
-      (yaml--frame "ns-l-compact-sequence"
-        (yaml--all (yaml--parse-from-grammar 'c-l-block-seq-entry n)
-                   (yaml--rep2 0 nil (lambda () (yaml--all 
(yaml--parse-from-grammar 's-indent n) (yaml--parse-from-grammar 
'c-l-block-seq-entry n))))))))
-
-   ((eq state 'c-comment)
-    (yaml--frame "c-comment" (yaml--chr ?\#)))
-
-   ((eq state 's-line-prefix)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "s-line-prefix"
-        (cond ((equal c "block-in") (yaml--parse-from-grammar 
's-block-line-prefix n))
-              ((equal c "block-out") (yaml--parse-from-grammar 
's-block-line-prefix n))
-              ((equal c "flow-in") (yaml--parse-from-grammar 
's-flow-line-prefix n))
-              ((equal c "flow-out") (yaml--parse-from-grammar 
's-flow-line-prefix n))))))
-
-   ((eq state 's-tab)
-    (yaml--frame "s-tab" (yaml--chr ?\x09)))
-
-   ((eq state 'c-directive)
-    (yaml--frame "c-directive" (yaml--chr ?\%)))
-
-   ((eq state 'ns-flow-pair)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-flow-pair"
-        (yaml--any (yaml--all (yaml--chr ?\?)
-                              (yaml--parse-from-grammar 's-separate n c)
-                              (yaml--parse-from-grammar 
'ns-flow-map-explicit-entry n c))
-                   (yaml--parse-from-grammar 'ns-flow-pair-entry n c)))))
-
-   ((eq state 's-l+block-indented)
-    (yaml--frame "s-l+block-indented"
-      (let ((m (yaml--auto-detect-indent (nth 0 args))))
-        (yaml--any (yaml--all (yaml--parse-from-grammar 's-indent m)
-                              (yaml--any (yaml--parse-from-grammar 
'ns-l-compact-sequence (+ (nth 0 args) (+ 1 m)))
-                                         (yaml--parse-from-grammar 
'ns-l-compact-mapping (+ (nth 0 args) (+ 1 m)))))
-                   (yaml--parse-from-grammar 's-l+block-node (nth 0 args) (nth 
1 args))
-                   (yaml--all (yaml--parse-from-grammar 'e-node)
-                              (yaml--parse-from-grammar 's-l-comments))))))
-
-   ((eq state 'c-single-quote)
-    (yaml--frame "c-single-quote" (yaml--chr ?\')))
-
-   ((eq state 's-flow-line-prefix)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-flow-line-prefix"
-        (yaml--all (yaml--parse-from-grammar 's-indent n)
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate-in-line)))))))
-
-   ((eq state 'nb-double-char)
-    (yaml--frame "nb-double-char"
-      (yaml--any (yaml--parse-from-grammar 'c-ns-esc-char)
-                 (yaml--but (lambda () (yaml--parse-from-grammar 'nb-json))
-                            (lambda () (yaml--chr ?\\)) (lambda () (yaml--chr 
?\"))))))
-
-   ((eq state 'l-comment)
-    (yaml--frame "l-comment"
-      (yaml--all (yaml--parse-from-grammar 's-separate-in-line)
-                 (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'c-nb-comment-text)))
-                 (yaml--parse-from-grammar 'b-comment))))
-
-   ((eq state 'ns-hex-digit)
-    (yaml--frame "ns-hex-digit"
-      (yaml--any (yaml--parse-from-grammar 'ns-dec-digit)
-                 (yaml--chr-range ?\x41 ?\x46)
-                 (yaml--chr-range ?\x61 ?\x66))))
-
-   ((eq state 's-l+flow-in-block)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-l+flow-in-block"
-        (yaml--all (yaml--parse-from-grammar 's-separate (+ n 1) "flow-out")
-                   (yaml--parse-from-grammar 'ns-flow-node (+ n 1) "flow-out")
-                   (yaml--parse-from-grammar 's-l-comments)))))
-
-   ((eq state 'c-flow-json-node)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "c-flow-json-node"
-        (yaml--all (yaml--rep 0 1
-                              (lambda ()
-                                (yaml--all (yaml--parse-from-grammar 
'c-ns-properties n c)
-                                           (yaml--parse-from-grammar 
's-separate n c))))
-                   (yaml--parse-from-grammar 'c-flow-json-content n c)))))
-
-   ((eq state 'c-b-block-header)
-    (let ((m (nth 0 args))
-          (tt (nth 1 args)))
-      (yaml--frame "c-b-block-header"
-        (yaml--all (yaml--any
-                    (yaml--all
-                     (yaml--parse-from-grammar 'c-indentation-indicator m) ;; 
TODO: fix generator to not call state getter function
-                     (yaml--parse-from-grammar 'c-chomping-indicator tt))
-                    (yaml--all
-                     (yaml--parse-from-grammar 'c-chomping-indicator tt)
-                     (yaml--parse-from-grammar 'c-indentation-indicator m)))
-                   (yaml--parse-from-grammar 's-b-comment)))))
-
-   ((eq state 'ns-esc-8-bit)
-    (yaml--frame "ns-esc-8-bit"
-      (yaml--all (yaml--chr ?\x)
-                 (yaml--rep 2 2 (lambda () (yaml--parse-from-grammar 
'ns-hex-digit))))))
-
-   ((eq state 'ns-anchor-name)
-    (yaml--frame "ns-anchor-name"
-      (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-anchor-char)))))
-
-   ((eq state 'ns-esc-slash)
-    (yaml--frame "ns-esc-slash" (yaml--chr ?\/)))
-
-   ((eq state 's-nb-folded-text)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-nb-folded-text"
-        (yaml--all (yaml--parse-from-grammar 's-indent n)
-                   (yaml--parse-from-grammar 'ns-char)
-                   (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-char)))))))
-
-   ((eq state 'ns-word-char)
-    (yaml--frame "ns-word-char"
-      (yaml--any (yaml--parse-from-grammar 'ns-dec-digit)
-                 (yaml--parse-from-grammar 'ns-ascii-letter)
-                 (yaml--chr ?\-))))
-
-   ((eq state 'ns-esc-form-feed)
-    (yaml--frame "ns-esc-form-feed" (yaml--chr ?\f)))
-
-   ((eq state 'ns-s-block-map-implicit-key)
-    (yaml--frame "ns-s-block-map-implicit-key"
-      (yaml--any (yaml--parse-from-grammar 'c-s-implicit-json-key "block-key")
-                 (yaml--parse-from-grammar 'ns-s-implicit-yaml-key 
"block-key"))))
-
-   ((eq state 'ns-esc-null) (yaml--frame "ns-esc-null" (yaml--chr ?\0)))
-
-   ((eq state 'c-ns-tag-property)
-    (yaml--frame "c-ns-tag-property"
-      (yaml--any (yaml--parse-from-grammar 'c-verbatim-tag)
-                 (yaml--parse-from-grammar 'c-ns-shorthand-tag)
-                 (yaml--parse-from-grammar 'c-non-specific-tag))))
-
-   ((eq state 'c-ns-local-tag-prefix)
-    (yaml--frame "c-ns-local-tag-prefix"
-      (yaml--all (yaml--chr ?\!)
-                 (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'ns-uri-char))))))
-
-   ((eq state 'ns-tag-directive)
-    (yaml--frame "ns-tag-directive"
-      (yaml--all (yaml--chr ?T) (yaml--chr ?A) (yaml--chr ?G)
-                 (yaml--parse-from-grammar 's-separate-in-line) 
(yaml--parse-from-grammar 'c-tag-handle) (yaml--parse-from-grammar 
's-separate-in-line) (yaml--parse-from-grammar 'ns-tag-prefix))))
-
-   ((eq state 'c-flow-mapping)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "c-flow-mapping"
-        (yaml--all (yaml--chr ?\{)
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate n c)))
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'ns-s-flow-map-entries n (yaml--parse-from-grammar 'in-flow c))))
-                   (yaml--chr ?\})))))
-
-   ((eq state 'ns-double-char)
-    (yaml--frame "ns-double-char"
-      (yaml--but (lambda () (yaml--parse-from-grammar 'nb-double-char))
-                 (lambda () (yaml--parse-from-grammar 's-white)))))
-
-   ((eq state 'ns-ascii-letter)
-    (yaml--frame "ns-ascii-letter"
-      (yaml--any (yaml--chr-range ?\x41 ?\x5A)
-                 (yaml--chr-range ?\x61 ?\x7A))))
-
-   ((eq state 'b-break)
-    (yaml--frame "b-break"
-      (yaml--any (yaml--all (yaml--parse-from-grammar 'b-carriage-return)
-                            (yaml--parse-from-grammar 'b-line-feed))
-                 (yaml--parse-from-grammar 'b-carriage-return)
-                 (yaml--parse-from-grammar 'b-line-feed))))
-
-   ((eq state 'nb-ns-double-in-line)
-    (yaml--frame "nb-ns-double-in-line"
-      (yaml--rep2 0 nil (lambda ()
-                          (yaml--all (yaml--rep2 0 nil (lambda () 
(yaml--parse-from-grammar 's-white)))
-                                     (yaml--parse-from-grammar 
'ns-double-char))))))
-
-   ((eq state 's-l+block-node)
-    (yaml--frame "s-l+block-node"
-                 (yaml--any (yaml--parse-from-grammar 's-l+block-in-block (nth 
0 args) (nth 1 args))
-                            (yaml--parse-from-grammar 's-l+flow-in-block (nth 
0 args)))))
-
-   ((eq state 'ns-esc-bell)
-    (yaml--frame "ns-esc-bell" (yaml--chr ?\a)))
-
-   ((eq state 'c-named-tag-handle)
-    (yaml--frame "c-named-tag-handle"
-      (yaml--all (yaml--chr ?\!)
-                 (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-word-char)))
-                 (yaml--chr ?\!))))
-
-   ((eq state 's-separate-lines)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-separate-lines"
-        (yaml--any (yaml--all (yaml--parse-from-grammar 's-l-comments)
-                              (yaml--parse-from-grammar 's-flow-line-prefix n))
-                   (yaml--parse-from-grammar 's-separate-in-line)))))
-
-   ((eq state 'l-directive)
-    (yaml--frame "l-directive"
-      (yaml--all (yaml--chr ?\%)
-                 (yaml--any (yaml--parse-from-grammar 'ns-yaml-directive)
-                            (yaml--parse-from-grammar 'ns-tag-directive)
-                            (yaml--parse-from-grammar 'ns-reserved-directive))
-                 (yaml--parse-from-grammar 's-l-comments))))
-
-   ((eq state 'ns-esc-escape)
-    (yaml--frame "ns-esc-escape" (yaml--chr ?\e)))
-
-   ((eq state 'b-nb-literal-next)
-    (let ((n (nth 0 args)))
-      (yaml--frame "b-nb-literal-next"
-        (yaml--all (yaml--parse-from-grammar 'b-as-line-feed)
-                   (yaml--parse-from-grammar 'l-nb-literal-text n)))))
-
-   ((eq state 'ns-s-flow-map-entries)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-s-flow-map-entries"
-        (yaml--all (yaml--parse-from-grammar 'ns-flow-map-entry n c)
-                   (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate n c)))
-                   (yaml--rep 0 1
-                              (lambda ()
-                                (yaml--all (yaml--chr ?\,)
-                                           (yaml--rep 0 1 (lambda () 
(yaml--parse-from-grammar 's-separate n c)))
-                                           (yaml--rep 0 1 (lambda () 
(yaml--parse-from-grammar 'ns-s-flow-map-entries n c))))))))))
-
-   ((eq state 'c-nb-comment-text)
-    (yaml--frame "c-nb-comment-text"
-      (yaml--all (yaml--chr ?\#)
-                 (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-char))))))
-
-   ((eq state 'ns-dec-digit)
-    (yaml--frame "ns-dec-digit"
-      (yaml--chr-range ?\x30 ?\x39)))
-
-   ((eq state 'ns-yaml-directive)
-    (yaml--frame "ns-yaml-directive"
-      (yaml--all (yaml--chr ?Y) (yaml--chr ?A) (yaml--chr ?M) (yaml--chr ?L)
-                 (yaml--parse-from-grammar 's-separate-in-line)
-                 (yaml--parse-from-grammar 'ns-yaml-version))))
-
-   ((eq state 'c-mapping-key)
-    (yaml--frame "c-mapping-key" (yaml--chr ?\?)))
-
-   ((eq state 'b-as-line-feed)
-    (yaml--frame "b-as-line-feed"
-      (yaml--parse-from-grammar 'b-break)))
-
-   ((eq state 's-l+block-in-block)
-    (yaml--frame "s-l+block-in-block"
-                 (yaml--any (yaml--parse-from-grammar 's-l+block-scalar (nth 0 
args) (nth 1 args))
-                            (yaml--parse-from-grammar 's-l+block-collection 
(nth 0 args) (nth 1 args)))))
-
-   ((eq state 'ns-esc-paragraph-separator)
-    (yaml--frame "ns-esc-paragraph-separator" (yaml--chr ?\P)))
-
-   ((eq state 'c-double-quoted)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "c-double-quoted"
-        (yaml--all (yaml--chr ?\")
-                   (yaml--parse-from-grammar 'nb-double-text n c)
-                   (yaml--chr ?\")))))
-
-   ((eq state 'b-line-feed)
-    (yaml--frame "b-line-feed" (yaml--chr ?\x0A)))
-
-   ((eq state 'ns-esc-horizontal-tab)
-    (yaml--frame "ns-esc-horizontal-tab"
-      (yaml--any (yaml--chr ?\t) (yaml--chr ?\x09))))
-
-   ((eq state 'c-ns-flow-map-empty-key-entry)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "c-ns-flow-map-empty-key-entry"
-        (yaml--all (yaml--parse-from-grammar 'e-node)
-                   (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n 
c)))))
-
-   ((eq state 'l-any-document)
-    (yaml--frame "l-any-document"
-      (yaml--any (yaml--parse-from-grammar 'l-directive-document)
-                 (yaml--parse-from-grammar 'l-explicit-document)
-                 (yaml--parse-from-grammar 'l-bare-document))))
-
-   ((eq state 'c-tag) (yaml--frame "c-tag" (yaml--chr ?\!)))
-
-   ((eq state 'c-escape) (yaml--frame "c-escape" (yaml--chr ?\\)))
-
-   ((eq state 'c-sequence-end) (yaml--frame "c-sequence-end" (yaml--chr ?\])))
-
-   ((eq state 'l+block-mapping)
-    (yaml--frame "l+block-mapping"
-      (let ((new-m (yaml--auto-detect-indent (nth 0 args))))
-        (if (= 0 new-m)
-            nil ;; For some fixed auto-detected m > 0
-          (yaml--all (yaml--set m new-m)
-                     (yaml--rep 1 nil
-                                (lambda ()
-                                  (yaml--all
-                                   (yaml--parse-from-grammar 's-indent (+ (nth 
0 args) new-m))
-                                   (yaml--parse-from-grammar 
'ns-l-block-map-entry (+ (nth 0 args) new-m))))))))))
-
-   ((eq state 'c-ns-flow-map-adjacent-value)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "c-ns-flow-map-adjacent-value"
-        (yaml--all (yaml--chr ?\:)
-                   (yaml--any (yaml--all (yaml--rep 0 1 (lambda () 
(yaml--parse-from-grammar 's-separate n c)))
-                                         (yaml--parse-from-grammar 
'ns-flow-node n c))
-                              (yaml--parse-from-grammar 'e-node))))))
-
-   ((eq state 's-single-next-line)
-    (let ((n (nth 0 args)))
-      (yaml--frame "s-single-next-line"
-        (yaml--all (yaml--parse-from-grammar 's-flow-folded n)
-                   (yaml--rep 0 1
-                              (lambda ()
-                                (yaml--all (yaml--parse-from-grammar 
'ns-single-char)
-                                           (yaml--parse-from-grammar 
'nb-ns-single-in-line)
-                                           (yaml--any 
(yaml--parse-from-grammar 's-single-next-line n)
-                                                      (yaml--rep2 0 nil 
(lambda () (yaml--parse-from-grammar 's-white)))))))))))
-
-   ((eq state 's-separate-in-line)
-    (yaml--frame "s-separate-in-line"
-      (yaml--any (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
's-white)))
-                 (yaml--start-of-line))))
-
-   ((eq state 'b-comment)
-    (yaml--frame "b-comment"
-      (yaml--any (yaml--parse-from-grammar 'b-non-content)
-                 (yaml--end-of-stream))))
-
-   ((eq state 'ns-esc-backslash)
-    (yaml--frame "ns-esc-backslash" (yaml--chr ?\\)))
-
-   ((eq state 'c-ns-anchor-property)
-    (yaml--frame "c-ns-anchor-property"
-      (yaml--all (yaml--chr ?\&)
-                 (yaml--parse-from-grammar 'ns-anchor-name))))
-
-   ((eq state 'ns-plain-safe)
-    (let ((c (nth 0 args)))
-      (yaml--frame "ns-plain-safe"
-        (cond ((equal c "block-key") (yaml--parse-from-grammar 
'ns-plain-safe-out))
-              ((equal c "flow-in") (yaml--parse-from-grammar 
'ns-plain-safe-in))
-              ((equal c "flow-key") (yaml--parse-from-grammar 
'ns-plain-safe-in))
-              ((equal c "flow-out") (yaml--parse-from-grammar 
'ns-plain-safe-out))))))
-
-   ((eq state 'ns-flow-content)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-flow-content"
-        (yaml--any (yaml--parse-from-grammar 'ns-flow-yaml-content n c)
-                   (yaml--parse-from-grammar 'c-flow-json-content n c)))))
-
-   ((eq state 'c-ns-flow-map-separate-value)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "c-ns-flow-map-separate-value"
-        (yaml--all (yaml--chr ?\:)
-                   (yaml--chk "!" (yaml--parse-from-grammar 'ns-plain-safe c))
-                   (yaml--any (yaml--all (yaml--parse-from-grammar 's-separate 
n c)
-                                         (yaml--parse-from-grammar 
'ns-flow-node n c))
-                              (yaml--parse-from-grammar 'e-node))))))
-
-   ((eq state 'in-flow)
-    (let ((c (nth 0 args)))
-      (yaml--frame "in-flow"
-        (cond ((equal c "block-key") "flow-key")
-              ((equal c "flow-in") "flow-in")
-              ((equal c "flow-key") "flow-key")
-              ((equal c "flow-out") "flow-in")))))
-
-   ((eq state 'c-verbatim-tag)
-    (yaml--frame "c-verbatim-tag"
-      (yaml--all (yaml--chr ?\!)
-                 (yaml--chr ?\<)
-                 (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-uri-char)))
-                 (yaml--chr ?\>))))
-
-   ((eq state 'c-literal)
-    (yaml--frame "c-literal" (yaml--chr ?\|)))
-
-   ((eq state 'ns-esc-line-feed)
-    (yaml--frame "ns-esc-line-feed" (yaml--chr ?\n)))
-
-   ((eq state 'nb-double-multi-line)
-    (let ((n (nth 0 args)))
-      (yaml--frame "nb-double-multi-line"
-        (yaml--all (yaml--parse-from-grammar 'nb-ns-double-in-line)
-                   (yaml--any (yaml--parse-from-grammar 's-double-next-line n)
-                              (yaml--rep2 0 nil (lambda () 
(yaml--parse-from-grammar 's-white))))))))
-
-   ((eq state 'b-l-spaced)
-    (let ((n (nth 0 args)))
-      (yaml--frame "b-l-spaced"
-        (yaml--all (yaml--parse-from-grammar 'b-as-line-feed) (yaml--rep2 0 
nil (lambda () (yaml--parse-from-grammar 'l-empty n "block-in")))))))
-
-   ((eq state 'ns-flow-yaml-content)
-    (let ((n (nth 0 args)) (c (nth 1 args)))
-      (yaml--frame "ns-flow-yaml-content"
-        (yaml--parse-from-grammar 'ns-plain n c))))
-   (t (error "Unknown parsing grammar state: %s %s" state args))))
+                    (lambda ()
+                      (yaml--any (yaml--all
+                                  (yaml--rep 1 nil
+                                             (lambda () 
(yaml--parse-from-grammar 'l-document-suffix)))
+                                  (yaml--rep2 0 nil
+                                              (lambda () 
(yaml--parse-from-grammar 'l-document-prefix)))
+                                  (yaml--rep 0 1
+                                             (lambda () 
(yaml--parse-from-grammar 'l-any-document))))
+                                 (yaml--all
+                                  (yaml--rep2 0 nil
+                                              (lambda () 
(yaml--parse-from-grammar 'l-document-prefix)))
+                                  (yaml--rep 0 1
+                                             (lambda () 
(yaml--parse-from-grammar 'l-explicit-document))))))))))
+
+    ('nb-double-one-line
+     (yaml--frame "nb-double-one-line"
+       (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-double-char)))))
+
+    ('s-l-comments
+     (yaml--frame "s-l-comments"
+       (yaml--all (yaml--any (yaml--parse-from-grammar 's-b-comment)
+                             (yaml--start-of-line))
+                  (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-comment))))))
+
+    ('nb-char
+     (yaml--frame "nb-char"
+       (yaml--but (lambda () (yaml--parse-from-grammar 'c-printable))
+                  (lambda () (yaml--parse-from-grammar 'b-char))
+                  (lambda () (yaml--parse-from-grammar 'c-byte-order-mark)))))
+
+    ('ns-plain-first
+     (let ((c (nth 0 args)))
+       (yaml--frame "ns-plain-first"
+         (yaml--any (yaml--but (lambda () (yaml--parse-from-grammar 'ns-char))
+                               (lambda () (yaml--parse-from-grammar 
'c-indicator)))
+                    (yaml--all (yaml--any (yaml--chr ?\?)
+                                          (yaml--chr ?\:)
+                                          (yaml--chr ?\-))
+                               (yaml--chk "=" (yaml--parse-from-grammar 
'ns-plain-safe c)))))))
+
+    ('c-ns-esc-char
+     (yaml--frame "c-ns-esc-char"
+       (yaml--all (yaml--chr ?\\)
+                  (yaml--any (yaml--parse-from-grammar 'ns-esc-null)
+                             (yaml--parse-from-grammar 'ns-esc-bell)
+                             (yaml--parse-from-grammar 'ns-esc-backspace)
+                             (yaml--parse-from-grammar 'ns-esc-horizontal-tab)
+                             (yaml--parse-from-grammar 'ns-esc-line-feed)
+                             (yaml--parse-from-grammar 'ns-esc-vertical-tab)
+                             (yaml--parse-from-grammar 'ns-esc-form-feed)
+                             (yaml--parse-from-grammar 'ns-esc-carriage-return)
+                             (yaml--parse-from-grammar 'ns-esc-escape)
+                             (yaml--parse-from-grammar 'ns-esc-space)
+                             (yaml--parse-from-grammar 'ns-esc-double-quote)
+                             (yaml--parse-from-grammar 'ns-esc-slash)
+                             (yaml--parse-from-grammar 'ns-esc-backslash)
+                             (yaml--parse-from-grammar 'ns-esc-next-line)
+                             (yaml--parse-from-grammar 
'ns-esc-non-breaking-space)
+                             (yaml--parse-from-grammar 'ns-esc-line-separator)
+                             (yaml--parse-from-grammar 
'ns-esc-paragraph-separator)
+                             (yaml--parse-from-grammar 'ns-esc-8-bit)
+                             (yaml--parse-from-grammar 'ns-esc-16-bit)
+                             (yaml--parse-from-grammar 'ns-esc-32-bit)))))
+
+    ('ns-flow-map-entry
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-flow-map-entry"
+         (yaml--any (yaml--all (yaml--chr ?\?)
+                               (yaml--parse-from-grammar 's-separate n c)
+                               (yaml--parse-from-grammar 
'ns-flow-map-explicit-entry n c))
+                    (yaml--parse-from-grammar 'ns-flow-map-implicit-entry n 
c)))))
+
+    ('l-explicit-document
+     (yaml--frame "l-explicit-document"
+       (yaml--all (yaml--parse-from-grammar 'c-directives-end)
+                  (yaml--any (yaml--parse-from-grammar 'l-bare-document)
+                             (yaml--all (yaml--parse-from-grammar 'e-node)
+                                        (yaml--parse-from-grammar 
's-l-comments))))))
+
+    ('s-white
+     (yaml--frame "s-white"
+       (yaml--any (yaml--parse-from-grammar 's-space)
+                  (yaml--parse-from-grammar 's-tab))))
+
+    ('l-keep-empty
+     (let ((n (nth 0 args)))
+       (yaml--frame "l-keep-empty"
+         (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-empty n "block-in")))
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'l-trail-comments n)))))))
+
+    ('ns-tag-prefix
+     (yaml--frame "ns-tag-prefix"
+       (yaml--any (yaml--parse-from-grammar 'c-ns-local-tag-prefix)
+                  (yaml--parse-from-grammar 'ns-global-tag-prefix))))
+
+    ('c-l+folded
+     (let ((n (nth 0 args)))
+       (yaml--frame "c-l+folded"
+         (yaml--all (yaml--chr ?\>)
+                    (yaml--parse-from-grammar 'c-b-block-header 
(yaml--state-curr-m) (yaml--state-curr-t))
+                    (yaml--parse-from-grammar 'l-folded-content
+                                              (max (+ n (yaml--state-curr-m)) 
1)
+                                              (yaml--state-curr-t))))))
+
+    ('ns-directive-name
+     (yaml--frame "ns-directive-name"
+       (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char)))))
+
+    ('b-char
+     (yaml--frame "b-char"
+       (yaml--any (yaml--parse-from-grammar 'b-line-feed)
+                  (yaml--parse-from-grammar 'b-carriage-return))))
+
+    ('ns-plain-multi-line
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-plain-multi-line"
+         (yaml--all (yaml--parse-from-grammar 'ns-plain-one-line c)
+                    (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
's-ns-plain-next-line n c)))))))
+
+    ('ns-char
+     (yaml--frame "ns-char"
+       (yaml--but (lambda () (yaml--parse-from-grammar 'nb-char))
+                  (lambda () (yaml--parse-from-grammar 's-white)))))
+
+    ('s-space
+     (yaml--frame "s-space" (yaml--chr ?\x20)))
+
+    ('c-l-block-seq-entry
+     (yaml--frame "c-l-block-seq-entry"
+       (yaml--all (yaml--chr ?\-)
+                  (yaml--chk "!" (yaml--parse-from-grammar 'ns-char))
+                  (yaml--parse-from-grammar 's-l+block-indented (nth 0 args) 
"block-in"))))
+
+    ('c-ns-properties
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "c-ns-properties"
+         (yaml--any (yaml--all (yaml--parse-from-grammar 'c-ns-tag-property)
+                               (yaml--rep 0 1 (lambda () (yaml--all 
(yaml--parse-from-grammar 's-separate n c) (yaml--parse-from-grammar 
'c-ns-anchor-property)))))
+                    (yaml--all (yaml--parse-from-grammar 'c-ns-anchor-property)
+                               (yaml--rep 0 1 (lambda () (yaml--all
+                                                          
(yaml--parse-from-grammar 's-separate n c)
+                                                          
(yaml--parse-from-grammar 'c-ns-tag-property)))))))))
+
+    ('ns-directive-parameter
+     (yaml--frame "ns-directive-parameter"
+       (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 'ns-char)))))
+
+    ('c-chomping-indicator
+     (yaml--frame "c-chomping-indicator"
+       (yaml--any (when (yaml--chr ?\-) (yaml--set t "strip") t)
+                  (when (yaml--chr ?\+) (yaml--set t "keep") t)
+                  (when (yaml--empty) (yaml--set t "clip") t))))
+
+    ('ns-global-tag-prefix
+     (yaml--frame "ns-global-tag-prefix"
+       (yaml--all (yaml--parse-from-grammar 'ns-tag-char)
+                  (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'ns-uri-char))))))
+
+    ('c-ns-flow-pair-json-key-entry
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "c-ns-flow-pair-json-key-entry"
+         (yaml--all (yaml--parse-from-grammar 'c-s-implicit-json-key 
"flow-key")
+                    (yaml--parse-from-grammar 'c-ns-flow-map-adjacent-value n 
c)))))
+
+    ('l-literal-content
+     (let ((n (nth 0 args))
+           (tt (nth 1 args)))
+       (yaml--frame "l-literal-content"
+         (yaml--all (yaml--rep 0 1
+                               (lambda () (yaml--all (yaml--parse-from-grammar 
'l-nb-literal-text n)
+                                                     (yaml--rep2 0 nil (lambda 
() (yaml--parse-from-grammar 'b-nb-literal-next n)))
+                                                     (yaml--parse-from-grammar 
'b-chomped-last tt))))
+                    (yaml--parse-from-grammar 'l-chomped-empty n tt)))))
+
+    ('c-document-end
+     (yaml--frame "c-document-end"
+       (yaml--all (yaml--chr ?\.)
+                  (yaml--chr ?\.)
+                  (yaml--chr ?\.))))
+
+    ('nb-double-text
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "nb-double-text"
+         (cond ((equal c "block-key") (yaml--parse-from-grammar 
'nb-double-one-line))
+               ((equal c "flow-in") (yaml--parse-from-grammar 
'nb-double-multi-line n))
+               ((equal c "flow-key") (yaml--parse-from-grammar 
'nb-double-one-line))
+               ((equal c "flow-out") (yaml--parse-from-grammar 
'nb-double-multi-line n))))))
+
+    ('s-b-comment
+     (yaml--frame "s-b-comment"
+       (yaml--all (yaml--rep 0 1 (lambda () (yaml--all 
(yaml--parse-from-grammar 's-separate-in-line)
+                                                       (yaml--rep 0 1 (lambda 
() (yaml--parse-from-grammar 'c-nb-comment-text))))))
+                  (yaml--parse-from-grammar 'b-comment))))
+
+    ('s-block-line-prefix
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-block-line-prefix"
+         (yaml--parse-from-grammar 's-indent n))))
+
+    ('c-tag-handle
+     (yaml--frame "c-tag-handle"
+       (yaml--any (yaml--parse-from-grammar 'c-named-tag-handle)
+                  (yaml--parse-from-grammar 'c-secondary-tag-handle)
+                  (yaml--parse-from-grammar 'c-primary-tag-handle))))
+
+    ('ns-plain-one-line
+     (let ((c (nth 0 args)))
+       (yaml--frame "ns-plain-one-line"
+         (yaml--all (yaml--parse-from-grammar 'ns-plain-first c)
+                    (yaml--parse-from-grammar 'nb-ns-plain-in-line c)))))
+
+    ('nb-json
+     (yaml--frame "nb-json"
+       (yaml--any (yaml--chr ?\x09)
+                  (yaml--chr-range ?\x20 ?\x10FFFF))))
+
+    ('s-ns-plain-next-line
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "s-ns-plain-next-line"
+         (yaml--all (yaml--parse-from-grammar 's-flow-folded n)
+                    (yaml--parse-from-grammar 'ns-plain-char c)
+                    (yaml--parse-from-grammar 'nb-ns-plain-in-line c)))))
+
+    ('c-reserved
+     (yaml--frame "c-reserved"
+       (yaml--any (yaml--chr ?\@) (yaml--chr ?\`))))
+
+    ('b-l-trimmed
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "b-l-trimmed"
+         (yaml--all (yaml--parse-from-grammar 'b-non-content)
+                    (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'l-empty n c)))))))
+
+    ('l-document-prefix
+     (yaml--frame "l-document-prefix"
+       (yaml--all (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'c-byte-order-mark)))
+                  (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-comment))))))
+
+    ('c-byte-order-mark
+     (yaml--frame "c-byte-order-mark" (yaml--chr ?\xFEFF)))
+
+    ('c-anchor
+     (yaml--frame "c-anchor" (yaml--chr ?\&)))
+
+    ('s-double-escaped
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-double-escaped"
+         (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
's-white)))
+                    (yaml--chr ?\\)
+                    (yaml--parse-from-grammar 'b-non-content)
+                    (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'l-empty n "flow-in")))
+                    (yaml--parse-from-grammar 's-flow-line-prefix n)))))
+
+    ('ns-esc-32-bit
+     (yaml--frame "ns-esc-32-bit"
+       (yaml--all (yaml--chr ?U)
+                  (yaml--rep 8 8 (lambda () (yaml--parse-from-grammar 
'ns-hex-digit))))))
+
+
+    ('b-non-content
+     (yaml--frame "b-non-content" (yaml--parse-from-grammar 'b-break)))
+
+    ('ns-tag-char
+     (yaml--frame "ns-tag-char"
+       (yaml--but (lambda () (yaml--parse-from-grammar 'ns-uri-char))
+                  (lambda () (yaml--chr ?\!))
+                  (lambda () (yaml--parse-from-grammar 'c-flow-indicator)))))
+
+    ('b-carriage-return
+     (yaml--frame "b-carriage-return" (yaml--chr ?\x0D)))
+
+    ('s-double-next-line
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-double-next-line"
+         (yaml--all (yaml--parse-from-grammar 's-double-break n)
+                    (yaml--rep 0 1
+                               (lambda ()
+                                 (yaml--all (yaml--parse-from-grammar 
'ns-double-char)
+                                            (yaml--parse-from-grammar 
'nb-ns-double-in-line)
+                                            (yaml--any 
(yaml--parse-from-grammar 's-double-next-line n)
+                                                       (yaml--rep2 0 nil 
(lambda () (yaml--parse-from-grammar 's-white)))))))))))
+
+    ('ns-esc-non-breaking-space
+     (yaml--frame "ns-esc-non-breaking-space" (yaml--chr ?\_)))
+
+    ('l-nb-diff-lines
+     (let ((n (nth 0 args)))
+       (yaml--frame "l-nb-diff-lines"
+         (yaml--all (yaml--parse-from-grammar 'l-nb-same-lines n)
+                    (yaml--rep2 0 nil (lambda ()
+                                        (yaml--all (yaml--parse-from-grammar 
'b-as-line-feed)
+                                                   (yaml--parse-from-grammar 
'l-nb-same-lines n))))))))
+
+    ('s-flow-folded
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-flow-folded"
+         (yaml--all (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate-in-line)))
+                    (yaml--parse-from-grammar 'b-l-folded n "flow-in")
+                    (yaml--parse-from-grammar 's-flow-line-prefix n)))))
+
+    ('ns-flow-map-explicit-entry
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-flow-map-explicit-entry"
+         (yaml--any (yaml--parse-from-grammar 'ns-flow-map-implicit-entry n c)
+                    (yaml--all (yaml--parse-from-grammar 'e-node) 
(yaml--parse-from-grammar 'e-node))))))
+
+    ('ns-l-block-map-implicit-entry
+     (yaml--frame "ns-l-block-map-implicit-entry"
+       (yaml--all (yaml--any (yaml--parse-from-grammar 
'ns-s-block-map-implicit-key)
+                             (yaml--parse-from-grammar 'e-node))
+                  (yaml--parse-from-grammar 'c-l-block-map-implicit-value (nth 
0 args)))))
+
+    ('l-nb-folded-lines
+     (let ((n (nth 0 args)))
+       (yaml--frame "l-nb-folded-lines"
+         (yaml--all (yaml--parse-from-grammar 's-nb-folded-text n)
+                    (yaml--rep2 0 nil (lambda () (yaml--all 
(yaml--parse-from-grammar 'b-l-folded n "block-in")
+                                                            
(yaml--parse-from-grammar 's-nb-folded-text n))))))))
+
+    ('c-l-block-map-explicit-key
+     (let ((n (nth 0 args)))
+       (yaml--frame "c-l-block-map-explicit-key"
+         (yaml--all (yaml--chr ?\?)
+                    (yaml--parse-from-grammar 's-l+block-indented n 
"block-out")))))
+
+    ('s-separate
+     (let ((n (nth 0 args))
+           (c (nth 1 args)))
+       (yaml--frame "s-separate"
+         (cond ((equal c "block-in") (yaml--parse-from-grammar 
's-separate-lines n))
+               ((equal c "block-key") (yaml--parse-from-grammar 
's-separate-in-line))
+               ((equal c "block-out") (yaml--parse-from-grammar 
's-separate-lines n))
+               ((equal c "flow-in") (yaml--parse-from-grammar 
's-separate-lines n))
+               ((equal c "flow-key") (yaml--parse-from-grammar 
's-separate-in-line))
+               ((equal c "flow-out") (yaml--parse-from-grammar 
's-separate-lines n))))))
+
+    ('ns-flow-pair-entry
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-flow-pair-entry"
+         (yaml--any (yaml--parse-from-grammar 'ns-flow-pair-yaml-key-entry n c)
+                    (yaml--parse-from-grammar 'c-ns-flow-map-empty-key-entry n 
c)
+                    (yaml--parse-from-grammar 'c-ns-flow-pair-json-key-entry n 
c)))))
+
+    ('c-flow-indicator
+     (yaml--frame "c-flow-indicator"
+       (yaml--any (yaml--chr ?\,)
+                  (yaml--chr ?\[)
+                  (yaml--chr ?\])
+                  (yaml--chr ?\{)
+                  (yaml--chr ?\}))))
+
+    ('ns-flow-pair-yaml-key-entry
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-flow-pair-yaml-key-entry"
+         (yaml--all (yaml--parse-from-grammar 'ns-s-implicit-yaml-key 
"flow-key")
+                    (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n 
c)))))
+
+    ('e-scalar
+     (yaml--frame "e-scalar" (yaml--empty)))
+
+    ('s-indent-lt
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-indent-lt"
+         (yaml--all (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
's-space)))
+                    (< (length (yaml--match)) n)))))
+
+    ('nb-single-one-line
+     (yaml--frame "nb-single-one-line"
+       (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-single-char)))))
+
+    ('c-collect-entry
+     (yaml--frame "c-collect-entry" (yaml--chr ?\,)))
+
+    ('ns-l-compact-sequence
+     (let ((n (nth 0 args)))
+       (yaml--frame "ns-l-compact-sequence"
+         (yaml--all (yaml--parse-from-grammar 'c-l-block-seq-entry n)
+                    (yaml--rep2 0 nil (lambda () (yaml--all 
(yaml--parse-from-grammar 's-indent n) (yaml--parse-from-grammar 
'c-l-block-seq-entry n))))))))
+
+    ('c-comment
+     (yaml--frame "c-comment" (yaml--chr ?\#)))
+
+    ('s-line-prefix
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "s-line-prefix"
+         (cond ((equal c "block-in") (yaml--parse-from-grammar 
's-block-line-prefix n))
+               ((equal c "block-out") (yaml--parse-from-grammar 
's-block-line-prefix n))
+               ((equal c "flow-in") (yaml--parse-from-grammar 
's-flow-line-prefix n))
+               ((equal c "flow-out") (yaml--parse-from-grammar 
's-flow-line-prefix n))))))
+
+    ('s-tab
+     (yaml--frame "s-tab" (yaml--chr ?\x09)))
+
+    ('c-directive
+     (yaml--frame "c-directive" (yaml--chr ?\%)))
+
+    ('ns-flow-pair
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-flow-pair"
+         (yaml--any (yaml--all (yaml--chr ?\?)
+                               (yaml--parse-from-grammar 's-separate n c)
+                               (yaml--parse-from-grammar 
'ns-flow-map-explicit-entry n c))
+                    (yaml--parse-from-grammar 'ns-flow-pair-entry n c)))))
+
+    ('s-l+block-indented
+     (yaml--frame "s-l+block-indented"
+       (let ((m (yaml--auto-detect-indent (nth 0 args))))
+         (yaml--any (yaml--all (yaml--parse-from-grammar 's-indent m)
+                               (yaml--any (yaml--parse-from-grammar 
'ns-l-compact-sequence (+ (nth 0 args) (+ 1 m)))
+                                          (yaml--parse-from-grammar 
'ns-l-compact-mapping (+ (nth 0 args) (+ 1 m)))))
+                    (yaml--parse-from-grammar 's-l+block-node (nth 0 args) 
(nth 1 args))
+                    (yaml--all (yaml--parse-from-grammar 'e-node)
+                               (yaml--parse-from-grammar 's-l-comments))))))
+
+    ('c-single-quote
+     (yaml--frame "c-single-quote" (yaml--chr ?\')))
+
+    ('s-flow-line-prefix
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-flow-line-prefix"
+         (yaml--all (yaml--parse-from-grammar 's-indent n)
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate-in-line)))))))
+
+    ('nb-double-char
+     (yaml--frame "nb-double-char"
+       (yaml--any (yaml--parse-from-grammar 'c-ns-esc-char)
+                  (yaml--but (lambda () (yaml--parse-from-grammar 'nb-json))
+                             (lambda () (yaml--chr ?\\)) (lambda () (yaml--chr 
?\"))))))
+
+    ('l-comment
+     (yaml--frame "l-comment"
+       (yaml--all (yaml--parse-from-grammar 's-separate-in-line)
+                  (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'c-nb-comment-text)))
+                  (yaml--parse-from-grammar 'b-comment))))
+
+    ('ns-hex-digit
+     (yaml--frame "ns-hex-digit"
+       (yaml--any (yaml--parse-from-grammar 'ns-dec-digit)
+                  (yaml--chr-range ?\x41 ?\x46)
+                  (yaml--chr-range ?\x61 ?\x66))))
+
+    ('s-l+flow-in-block
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-l+flow-in-block"
+         (yaml--all (yaml--parse-from-grammar 's-separate (+ n 1) "flow-out")
+                    (yaml--parse-from-grammar 'ns-flow-node (+ n 1) "flow-out")
+                    (yaml--parse-from-grammar 's-l-comments)))))
+
+    ('c-flow-json-node
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "c-flow-json-node"
+         (yaml--all (yaml--rep 0 1
+                               (lambda ()
+                                 (yaml--all (yaml--parse-from-grammar 
'c-ns-properties n c)
+                                            (yaml--parse-from-grammar 
's-separate n c))))
+                    (yaml--parse-from-grammar 'c-flow-json-content n c)))))
+
+    ('c-b-block-header
+     (let ((m (nth 0 args))
+           (tt (nth 1 args)))
+       (yaml--frame "c-b-block-header"
+         (yaml--all (yaml--any
+                     (and (not (string-match "\\`[-+][0-9]" (yaml--slice 
yaml--parsing-position)))
+                          ;; hack to not match this case if there is a number.
+                          (yaml--all
+                           (yaml--parse-from-grammar 'c-indentation-indicator 
m)
+                           (yaml--parse-from-grammar 'c-chomping-indicator 
tt)))
+                     (yaml--all
+                      (yaml--parse-from-grammar 'c-chomping-indicator tt)
+                      (yaml--parse-from-grammar 'c-indentation-indicator m)))
+                    (yaml--parse-from-grammar 's-b-comment)))))
+
+    ('ns-esc-8-bit
+     (yaml--frame "ns-esc-8-bit"
+       (yaml--all (yaml--chr ?\x)
+                  (yaml--rep 2 2 (lambda () (yaml--parse-from-grammar 
'ns-hex-digit))))))
+
+    ('ns-anchor-name
+     (yaml--frame "ns-anchor-name"
+       (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-anchor-char)))))
+
+    ('ns-esc-slash
+     (yaml--frame "ns-esc-slash" (yaml--chr ?\/)))
+
+    ('s-nb-folded-text
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-nb-folded-text"
+         (yaml--all (yaml--parse-from-grammar 's-indent n)
+                    (yaml--parse-from-grammar 'ns-char)
+                    (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-char)))))))
+
+    ('ns-word-char
+     (yaml--frame "ns-word-char"
+       (yaml--any (yaml--parse-from-grammar 'ns-dec-digit)
+                  (yaml--parse-from-grammar 'ns-ascii-letter)
+                  (yaml--chr ?\-))))
+
+    ('ns-esc-form-feed
+     (yaml--frame "ns-esc-form-feed" (yaml--chr ?\f)))
+
+    ('ns-s-block-map-implicit-key
+     (yaml--frame "ns-s-block-map-implicit-key"
+       (yaml--any (yaml--parse-from-grammar 'c-s-implicit-json-key "block-key")
+                  (yaml--parse-from-grammar 'ns-s-implicit-yaml-key 
"block-key"))))
+
+    ('ns-esc-null (yaml--frame "ns-esc-null" (yaml--chr ?\0)))
+
+    ('c-ns-tag-property
+     (yaml--frame "c-ns-tag-property"
+       (yaml--any (yaml--parse-from-grammar 'c-verbatim-tag)
+                  (yaml--parse-from-grammar 'c-ns-shorthand-tag)
+                  (yaml--parse-from-grammar 'c-non-specific-tag))))
+
+    ('c-ns-local-tag-prefix
+     (yaml--frame "c-ns-local-tag-prefix"
+       (yaml--all (yaml--chr ?\!)
+                  (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'ns-uri-char))))))
+
+    ('ns-tag-directive
+     (yaml--frame "ns-tag-directive"
+       (yaml--all (yaml--chr ?T) (yaml--chr ?A) (yaml--chr ?G)
+                  (yaml--parse-from-grammar 's-separate-in-line) 
(yaml--parse-from-grammar 'c-tag-handle) (yaml--parse-from-grammar 
's-separate-in-line) (yaml--parse-from-grammar 'ns-tag-prefix))))
+
+    ('c-flow-mapping
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "c-flow-mapping"
+         (yaml--all (yaml--chr ?\{)
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate n c)))
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
'ns-s-flow-map-entries n (yaml--parse-from-grammar 'in-flow c))))
+                    (yaml--chr ?\})))))
+
+    ('ns-double-char
+     (yaml--frame "ns-double-char"
+       (yaml--but (lambda () (yaml--parse-from-grammar 'nb-double-char))
+                  (lambda () (yaml--parse-from-grammar 's-white)))))
+
+    ('ns-ascii-letter
+     (yaml--frame "ns-ascii-letter"
+       (yaml--any (yaml--chr-range ?\x41 ?\x5A)
+                  (yaml--chr-range ?\x61 ?\x7A))))
+
+    ('b-break
+     (yaml--frame "b-break"
+       (yaml--any (yaml--all (yaml--parse-from-grammar 'b-carriage-return)
+                             (yaml--parse-from-grammar 'b-line-feed))
+                  (yaml--parse-from-grammar 'b-carriage-return)
+                  (yaml--parse-from-grammar 'b-line-feed))))
+
+    ('nb-ns-double-in-line
+     (yaml--frame "nb-ns-double-in-line"
+       (yaml--rep2 0 nil (lambda ()
+                           (yaml--all (yaml--rep2 0 nil (lambda () 
(yaml--parse-from-grammar 's-white)))
+                                      (yaml--parse-from-grammar 
'ns-double-char))))))
+
+    ('s-l+block-node
+     (yaml--frame "s-l+block-node"
+       (yaml--any (yaml--parse-from-grammar 's-l+block-in-block (nth 0 args) 
(nth 1 args))
+                  (yaml--parse-from-grammar 's-l+flow-in-block (nth 0 args)))))
+
+    ('ns-esc-bell
+     (yaml--frame "ns-esc-bell" (yaml--chr ?\a)))
+
+    ('c-named-tag-handle
+     (yaml--frame "c-named-tag-handle"
+       (yaml--all (yaml--chr ?\!)
+                  (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-word-char)))
+                  (yaml--chr ?\!))))
+
+    ('s-separate-lines
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-separate-lines"
+         (yaml--any (yaml--all (yaml--parse-from-grammar 's-l-comments)
+                               (yaml--parse-from-grammar 's-flow-line-prefix 
n))
+                    (yaml--parse-from-grammar 's-separate-in-line)))))
+
+    ('l-directive
+     (yaml--frame "l-directive"
+       (yaml--all (yaml--chr ?\%)
+                  (yaml--any (yaml--parse-from-grammar 'ns-yaml-directive)
+                             (yaml--parse-from-grammar 'ns-tag-directive)
+                             (yaml--parse-from-grammar 'ns-reserved-directive))
+                  (yaml--parse-from-grammar 's-l-comments))))
+
+    ('ns-esc-escape
+     (yaml--frame "ns-esc-escape" (yaml--chr ?\e)))
+
+    ('b-nb-literal-next
+     (let ((n (nth 0 args)))
+       (yaml--frame "b-nb-literal-next"
+         (yaml--all (yaml--parse-from-grammar 'b-as-line-feed)
+                    (yaml--parse-from-grammar 'l-nb-literal-text n)))))
+
+    ('ns-s-flow-map-entries
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-s-flow-map-entries"
+         (yaml--all (yaml--parse-from-grammar 'ns-flow-map-entry n c)
+                    (yaml--rep 0 1 (lambda () (yaml--parse-from-grammar 
's-separate n c)))
+                    (yaml--rep 0 1
+                               (lambda ()
+                                 (yaml--all (yaml--chr ?\,)
+                                            (yaml--rep 0 1 (lambda () 
(yaml--parse-from-grammar 's-separate n c)))
+                                            (yaml--rep 0 1 (lambda () 
(yaml--parse-from-grammar 'ns-s-flow-map-entries n c))))))))))
+
+    ('c-nb-comment-text
+     (yaml--frame "c-nb-comment-text"
+       (yaml--all (yaml--chr ?\#)
+                  (yaml--rep2 0 nil (lambda () (yaml--parse-from-grammar 
'nb-char))))))
+
+    ('ns-dec-digit
+     (yaml--frame "ns-dec-digit"
+       (yaml--chr-range ?\x30 ?\x39)))
+
+    ('ns-yaml-directive
+     (yaml--frame "ns-yaml-directive"
+       (yaml--all (yaml--chr ?Y) (yaml--chr ?A) (yaml--chr ?M) (yaml--chr ?L)
+                  (yaml--parse-from-grammar 's-separate-in-line)
+                  (yaml--parse-from-grammar 'ns-yaml-version))))
+
+    ('c-mapping-key
+     (yaml--frame "c-mapping-key" (yaml--chr ?\?)))
+
+    ('b-as-line-feed
+     (yaml--frame "b-as-line-feed"
+       (yaml--parse-from-grammar 'b-break)))
+
+    ('s-l+block-in-block
+     (yaml--frame "s-l+block-in-block"
+       (yaml--any (yaml--parse-from-grammar 's-l+block-scalar (nth 0 args) 
(nth 1 args))
+                  (yaml--parse-from-grammar 's-l+block-collection (nth 0 args) 
(nth 1 args)))))
+
+    ('ns-esc-paragraph-separator
+     (yaml--frame "ns-esc-paragraph-separator" (yaml--chr ?\P)))
+
+    ('c-double-quoted
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "c-double-quoted"
+         (yaml--all (yaml--chr ?\")
+                    (yaml--parse-from-grammar 'nb-double-text n c)
+                    (yaml--chr ?\")))))
+
+    ('b-line-feed
+     (yaml--frame "b-line-feed" (yaml--chr ?\x0A)))
+
+    ('ns-esc-horizontal-tab
+     (yaml--frame "ns-esc-horizontal-tab"
+       (yaml--any (yaml--chr ?\t) (yaml--chr ?\x09))))
+
+    ('c-ns-flow-map-empty-key-entry
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "c-ns-flow-map-empty-key-entry"
+         (yaml--all (yaml--parse-from-grammar 'e-node)
+                    (yaml--parse-from-grammar 'c-ns-flow-map-separate-value n 
c)))))
+
+    ('l-any-document
+     (yaml--frame "l-any-document"
+       (yaml--any (yaml--parse-from-grammar 'l-directive-document)
+                  (yaml--parse-from-grammar 'l-explicit-document)
+                  (yaml--parse-from-grammar 'l-bare-document))))
+
+    ('c-tag (yaml--frame "c-tag" (yaml--chr ?\!)))
+
+    ('c-escape (yaml--frame "c-escape" (yaml--chr ?\\)))
+
+    ('c-sequence-end (yaml--frame "c-sequence-end" (yaml--chr ?\])))
+
+    ('l+block-mapping
+     (yaml--frame "l+block-mapping"
+       (let ((new-m (yaml--auto-detect-indent (nth 0 args))))
+         (if (= 0 new-m)
+             nil ;; For some fixed auto-detected m > 0 ;; Is this right???
+           (yaml--all (yaml--set m new-m)
+                      (yaml--rep 1 nil
+                                 (lambda ()
+                                   (yaml--all
+                                    (yaml--parse-from-grammar 's-indent (+ 
(nth 0 args) new-m))
+                                    (yaml--parse-from-grammar 
'ns-l-block-map-entry (+ (nth 0 args) new-m))))))))))
+
+    ('c-ns-flow-map-adjacent-value
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "c-ns-flow-map-adjacent-value"
+         (yaml--all (yaml--chr ?\:)
+                    (yaml--any (yaml--all (yaml--rep 0 1 (lambda () 
(yaml--parse-from-grammar 's-separate n c)))
+                                          (yaml--parse-from-grammar 
'ns-flow-node n c))
+                               (yaml--parse-from-grammar 'e-node))))))
+
+    ('s-single-next-line
+     (let ((n (nth 0 args)))
+       (yaml--frame "s-single-next-line"
+         (yaml--all (yaml--parse-from-grammar 's-flow-folded n)
+                    (yaml--rep 0 1
+                               (lambda ()
+                                 (yaml--all (yaml--parse-from-grammar 
'ns-single-char)
+                                            (yaml--parse-from-grammar 
'nb-ns-single-in-line)
+                                            (yaml--any 
(yaml--parse-from-grammar 's-single-next-line n)
+                                                       (yaml--rep2 0 nil 
(lambda () (yaml--parse-from-grammar 's-white)))))))))))
+
+    ('s-separate-in-line
+     (yaml--frame "s-separate-in-line"
+       (yaml--any (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
's-white)))
+                  (yaml--start-of-line))))
+
+    ('b-comment
+     (yaml--frame "b-comment"
+       (yaml--any (yaml--parse-from-grammar 'b-non-content)
+                  (yaml--end-of-stream))))
+
+    ('ns-esc-backslash
+     (yaml--frame "ns-esc-backslash" (yaml--chr ?\\)))
+
+    ('c-ns-anchor-property
+     (yaml--frame "c-ns-anchor-property"
+       (yaml--all (yaml--chr ?\&)
+                  (yaml--parse-from-grammar 'ns-anchor-name))))
+
+    ('ns-plain-safe
+     (let ((c (nth 0 args)))
+       (yaml--frame "ns-plain-safe"
+         (cond ((equal c "block-key") (yaml--parse-from-grammar 
'ns-plain-safe-out))
+               ((equal c "flow-in") (yaml--parse-from-grammar 
'ns-plain-safe-in))
+               ((equal c "flow-key") (yaml--parse-from-grammar 
'ns-plain-safe-in))
+               ((equal c "flow-out") (yaml--parse-from-grammar 
'ns-plain-safe-out))))))
+
+    ('ns-flow-content
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-flow-content"
+         (yaml--any (yaml--parse-from-grammar 'ns-flow-yaml-content n c)
+                    (yaml--parse-from-grammar 'c-flow-json-content n c)))))
+
+    ('c-ns-flow-map-separate-value
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "c-ns-flow-map-separate-value"
+         (yaml--all (yaml--chr ?\:)
+                    (yaml--chk "!" (yaml--parse-from-grammar 'ns-plain-safe c))
+                    (yaml--any (yaml--all (yaml--parse-from-grammar 
's-separate n c)
+                                          (yaml--parse-from-grammar 
'ns-flow-node n c))
+                               (yaml--parse-from-grammar 'e-node))))))
+
+    ('in-flow
+     (let ((c (nth 0 args)))
+       (yaml--frame "in-flow"
+         (cond ((equal c "block-key") "flow-key")
+               ((equal c "flow-in") "flow-in")
+               ((equal c "flow-key") "flow-key")
+               ((equal c "flow-out") "flow-in")))))
+
+    ('c-verbatim-tag
+     (yaml--frame "c-verbatim-tag"
+       (yaml--all (yaml--chr ?\!)
+                  (yaml--chr ?\<)
+                  (yaml--rep 1 nil (lambda () (yaml--parse-from-grammar 
'ns-uri-char)))
+                  (yaml--chr ?\>))))
+
+    ('c-literal
+     (yaml--frame "c-literal" (yaml--chr ?\|)))
+
+    ('ns-esc-line-feed
+     (yaml--frame "ns-esc-line-feed" (yaml--chr ?\n)))
+
+    ('nb-double-multi-line
+     (let ((n (nth 0 args)))
+       (yaml--frame "nb-double-multi-line"
+         (yaml--all (yaml--parse-from-grammar 'nb-ns-double-in-line)
+                    (yaml--any (yaml--parse-from-grammar 's-double-next-line n)
+                               (yaml--rep2 0 nil (lambda () 
(yaml--parse-from-grammar 's-white))))))))
+
+    ('b-l-spaced
+     (let ((n (nth 0 args)))
+       (yaml--frame "b-l-spaced"
+         (yaml--all (yaml--parse-from-grammar 'b-as-line-feed) (yaml--rep2 0 
nil (lambda () (yaml--parse-from-grammar 'l-empty n "block-in")))))))
+
+    ('ns-flow-yaml-content
+     (let ((n (nth 0 args)) (c (nth 1 args)))
+       (yaml--frame "ns-flow-yaml-content"
+         (yaml--parse-from-grammar 'ns-plain n c))))
+    (t (error "Unknown parsing grammar state: %s %s" state args))))
 
 (provide 'yaml)
 

Reply via email to