From 3603360036d3748fc038a065f49435be460a6a9d Mon Sep 17 00:00:00 2001 From: "Tarn W. Burton" Date: Mon, 12 Aug 2024 08:50:46 -0400 Subject: [PATCH] common-lisp: Add #b, #o and #x parsing support --- code/common-lisp/implementation.lisp | 59 ++++++++++++++++++---------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/code/common-lisp/implementation.lisp b/code/common-lisp/implementation.lisp index 2d9cc7b7..0840a723 100644 --- a/code/common-lisp/implementation.lisp +++ b/code/common-lisp/implementation.lisp @@ -42,27 +42,44 @@ (:set :code :infinity)) (:sequence #\- (:set :code :quiet-nan)))) - (:digits :exponent))) - (:alternate? #\+ - (:sequence #\- - (:set :sign -1))) - (:alternate (:sequence (:assert :float t) - #\. - (:digits :fractional) - (:set :ratio nil - :integer nil) - :exponent?) - (:sequence (:digits :integral) - (:alternate (:sequence (:assert :ratio t) - #\/ - (:set :integer nil :float nil) - (:digits :divisor)) - (:sequence (:sequence? #\. - (:sequence? (:assert :float t) - (:digits :fractional) - (:set :ratio nil - :integer nil))) - :exponent?))))) + (:digits :exponent)) + :sign? (:alternate? #\+ + (:sequence #\- + (:set :sign -1)))) + (:alternate (:sequence #\# + (:alternate (:sequence #\b + (:set :integral-base 2 + :divisor-base 2)) + (:sequence #\o + (:set :integral-base 8 + :divisor-base 8)) + (:sequence #\x + (:set :integral-base 16 + :divisor-base 16))) + :sign? + (:digits :integral) + (:sequence? (:assert :ratio t) + #\/ + (:set :integer nil :float nil) + (:digits :divisor))) + (:sequence :sign? + (:alternate (:sequence (:assert :float t) + #\. + (:digits :fractional) + (:set :ratio nil + :integer nil) + :exponent?) + (:sequence (:digits :integral) + (:alternate (:sequence (:assert :ratio t) + #\/ + (:set :integer nil :float nil) + (:digits :divisor)) + (:sequence (:sequence? #\. + (:sequence? (:assert :float t) + (:digits :fractional) + (:set :ratio nil + :integer nil))) + :exponent?))))))) (defmethod quaviver:write-number ((client client) (base (eql 2)) (value integer) stream) (write-string "#b" stream)