diff --git a/src/beowulf/read.clj b/src/beowulf/read.clj index f0cee09..0551be7 100644 --- a/src/beowulf/read.clj +++ b/src/beowulf/read.clj @@ -54,7 +54,7 @@ ;; 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 := #'-?[1-9][0-9]*\\.?[0-9]*' | #'0.[0-9]*'; scientific := coefficient e exponent; coefficient := decimal; exponent := integer; @@ -248,7 +248,7 @@ (generate (nth p 2))) :exponent (generate (second p)) :fncall (gen-fn-call p) - :mvar (upper-case (second p)) + :mvar (symbol (upper-case (second p))) :octal (let [n (read-string (strip-leading-zeros (second p) "0")) scale (generate (nth p 2))] (* n (expt 8 scale))) diff --git a/test/beowulf/sexpr_test.clj b/test/beowulf/sexpr_test.clj index b0f48c1..eb1df91 100644 --- a/test/beowulf/sexpr_test.clj +++ b/test/beowulf/sexpr_test.clj @@ -1,6 +1,7 @@ (ns beowulf.sexpr-test (:require [clojure.math.numeric-tower :refer [abs]] [clojure.test :refer :all] + [beowulf.cons-cell :refer :all] [beowulf.read :refer [parse simplify generate]] [beowulf.print :refer :all])) @@ -74,3 +75,15 @@ actual (generate (simplify (parse "0.6E2")))] (is (< (abs (- actual expected)) 0.0001)))) +(deftest dotted-pair-tests + (testing "Reading dotted pairs" + (let [expected "(A . B)" + actual (prin (generate (simplify (parse expected))))] + (is (= actual expected))) + (let [expected "(A B C . D)" + actual (prin (generate (simplify (parse expected))))] + (is (= actual expected))) + (let [expected "(A B (C . D) E)" + actual (prin (generate (simplify (parse expected))))] + (is (= actual expected))) +))