Refixing parsing of numbers...
This commit is contained in:
parent
64ff020cb4
commit
37ba03f05e
|
@ -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
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue