From 37ba03f05e8acea184ff01de211f6bd3eb159cad Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Wed, 29 Mar 2023 14:19:49 +0100 Subject: [PATCH] Refixing parsing of numbers... --- src/beowulf/core.clj | 2 +- src/beowulf/reader/generate.clj | 4 +++- src/beowulf/reader/parser.clj | 6 +++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/beowulf/core.clj b/src/beowulf/core.clj index e46a4a0..d924795 100644 --- a/src/beowulf/core.clj +++ b/src/beowulf/core.clj @@ -78,7 +78,7 @@ "\nSprecan '" stop-word "' tó laéfan\n")) (binding [*options* (:options args)] - (pprint *options*) +;; (pprint *options*) (when (:read *options*) (try (SYSIN (:read *options*)) (catch Throwable any diff --git a/src/beowulf/reader/generate.clj b/src/beowulf/reader/generate.clj index d2e763b..3037f9c 100644 --- a/src/beowulf/reader/generate.clj +++ b/src/beowulf/reader/generate.clj @@ -186,13 +186,14 @@ (:coefficient :exponent) (generate (second p)) :cond (gen-cond p) :cond-clause (gen-cond-clause p) - (:decimal :integer) (read-string (strip-leading-zeros (second p))) + :decimal (read-string (apply str (map second (rest p)))) :defn (generate-assign p) :dotted-pair (make-cons-cell (generate (nth p 1)) (generate (nth p 2))) :fncall (gen-fn-call p) :iexpr (gen-iexpr p) + :integer (read-string (strip-leading-zeros (second p))) :iop (case (second p) "/" 'DIFFERENCE "=" 'EQUAL @@ -210,6 +211,7 @@ :mconst (make-beowulf-list (list 'QUOTE (symbol (upper-case (second p))))) :mvar (symbol (upper-case (second p))) + :number (generate (second p)) :octal (let [n (read-string (strip-leading-zeros (second p) "0")) scale (generate (nth p 3))] (* n (expt 8 scale))) diff --git a/src/beowulf/reader/parser.clj b/src/beowulf/reader/parser.clj index 30c2ae0..ae87075 100644 --- a/src/beowulf/reader/parser.clj +++ b/src/beowulf/reader/parser.clj @@ -24,7 +24,7 @@ ;; but it's a convenience. "exprs := expr | exprs;" - "mexpr := λexpr | fncall | defn | cond | mvar | mconst | iexpr | mexpr comment; + "mexpr := λexpr | fncall | defn | cond | mvar | mconst | iexpr | number | mexpr comment; λexpr := λ lsqb bindings semi-colon body rsqb; λ := 'λ'; bindings := lsqb args rsqb; @@ -76,9 +76,9 @@ ;; Lisp 1.5 supported octal as well as decimal and scientific notation "number := integer | decimal | scientific | octal; integer := #'-?[1-9][0-9]*'; - decimal := #'-?[1-9][0-9]*\\.?[0-9]*' | #'0.[0-9]*'; + decimal := integer dot integer; scientific := coefficient e exponent; - coefficient := integer | decimal; + coefficient := decimal | integer; exponent := integer; e := 'E'; octal := #'[+-]?[0-7]+{1,12}' q scale-factor;