pjs/js2/semantics/Test/ThrowCatch.lisp

57 строки
1.6 KiB
Common Lisp

(progn
(defparameter *tcw*
(generate-world
"TC"
'((lexer throw-catch-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)
(rule :expr ((value (-> () integer)))
(production :expr (:digit) expr-digit
((value) (return (value :digit))))
(production :expr (#\t :expr) expr-throw
((value) (throw ((value :expr)))))
(production :expr (#\c #\{ :expr #\} :expr) expr-catch
((value) (catch ((return ((value :expr 1))))
(e) (return (+ (* e 10) ((value :expr 2))))))))
(rule :main ((value integer))
(production :main (:expr) main-expr
(value ((value :expr)))))
(%print-actions)
)))
(defparameter *tcl* (world-lexer *tcw* 'throw-catch-lexer))
(defparameter *tcg* (lexer-grammar *tcl*)))
#|
(depict-rtf-to-local-file
"Test/ThrowCatchSemantics.rtf"
"Throw-Catch Semantics"
#'(lambda (rtf-stream)
(depict-world-commands rtf-stream *tcw* :heading-offset 1)))
(depict-html-to-local-file
"Test/ThrowCatchSemantics.html"
"Throw-Catch Semantics"
t
#'(lambda (html-stream)
(depict-world-commands html-stream *tcw* :heading-offset 1))
:external-link-base "")
(lexer-pparse *tcl* "7")
(lexer-pparse *tcl* "t3")
(lexer-pparse *tcl* "c{t6}5")
|#
(length (grammar-states *tcg*))