(progn
  (defparameter *waw*
    (generate-world
     "WA"
     '((lexer writable-action-lexer
              :lalr-1
              :main
              ((:digit (#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9)
                       ((value $digit-value))))
              (($digit-value integer digit-value digit-char-36)))
       
       (%charclass :digit)
       
       (deftype semantic-exception integer)
       
       (defvar g integer 0)
       
       (rule :expr ((serial-num (writable-cell integer)) (walk (-> () void)) (value (-> () (vector integer))))
         (production :expr (:digit) expr-digit
           ((walk)
            (<- g (+ g 1))
            (action<- (serial-num :expr 0) g))
           ((value)
            (return (vector (+ (* 10 (serial-num :expr 0)) (value :digit))))))
         (production :expr (:digit :expr) expr-more
           ((walk)
            ((walk :expr))
            (<- g (+ g 1))
            (action<- (serial-num :expr 0) g))
           ((value)
            (const i integer (+ (* 10 (serial-num :expr 0)) (value :digit)))
            (return (cons i ((value :expr)))))))
       
       (rule :main ((value (vector integer)))
         (production :main (:expr) main-expr
           (value (begin
                   ((walk :expr))
                   (return ((value :expr)))))))
       (%print-actions)
       )))
  
  (defparameter *wal* (world-lexer *waw* 'writable-action-lexer))
  (defparameter *wag* (lexer-grammar *wal*)))

#|
(depict-rtf-to-local-file
 "Test/WritableActionSemantics.rtf"
 "Writable Action Semantics"
 #'(lambda (rtf-stream)
     (depict-world-commands rtf-stream *waw* :heading-offset 1)))

(depict-html-to-local-file
 "Test/WritableActionSemantics.html"
 "Writable Action Semantics"
 t
 #'(lambda (html-stream)
     (depict-world-commands html-stream *waw* :heading-offset 1))
 :external-link-base "")


(lexer-pparse *wal* "7")
(lexer-pparse *wal* "7500")
|#

(length (grammar-states *wag*))
